Jump to content

[Unsolved] How to get/set the NBT tag from a tile entity?


bcwadsworth

Recommended Posts

Actually you can use normal variables in a tileEntity and get and set them with that, If you make them public it's as simple as "TileEntity.variableName" if you make it private and you have getter and setters it'd be "tileEntity.getValue()"

 

and to read and write the NBT (for saving and loading)

 

@Override

public void readFromNBT(NBTTagCompound nbtTag)

 

@Override

public void writeToNBT(NBTTagCompound nbtTag)

 

you do your saving and loading in the respected methods.

Link to comment
Share on other sites

TileEntities, unlike ItemStacks don't have their own NBTTagCompounds, I believe.

 

What are you trying to do? You're probably just thinking of thinking about the problem the wrong way. :P

BEFORE ASKING FOR HELP READ THE EAQ!

 

I'll help if I can. Apologies if I do something obviously stupid. :D

 

If you don't know basic Java yet, go and follow these tutorials.

Link to comment
Share on other sites

NBTTagCompound tag = new NBTTagCompound();

p_tileEntity.writeToNBT(tag);

// examine or do something with the NBT Data tag

 

// if you change the values for some silly reason

p_tileEntity.readFromNBT(changedTag);

 

But, beware! Messing with the NBT data of an unknown TE can cause nasty behavior or crashes.

Link to comment
Share on other sites

just write the TileEntities coords into the itemstack.

 

then all you need to do is get them and find the tileEntity usually "World.getTileEntity(x,y,z)"

 

the method "onItemUseFirst" on items should help you grab your tileEntity as this method gives the blocks coords that you right clicked

from there you can make a check to make sure the tileEntity you got is the one you want, then write the coords to NBT, and the next time you use it you can check to see if you have coords written, get the tileEntity with the coords and do your thing.

Link to comment
Share on other sites

this is why you have a check to make sure that what you got is what you wanted and is not null. Normally if(tileEntityGotten instanceof TileEntityMyTargetType) covers null and well your TE. if that passes and goes in you can then use

 

TileEntityMyTargetType targetTe = (TileEntityMyTargetType)tileEntityGotten;

targetTe.doWhatEverItIsThatPleasesYou();

 

now if you mean you these tileEntities have to be unique (place one, use item to save it's location, someone breaks it and places it down(new tileEntity, same location)) then I am not sure how to deal with that, I guess you could have that tileEntity store a special number or code in itself and the item that records it. Then when you right-click or activate your recorder item it loads up the tileEntity, checks the instance (covers null aswell) if that pans out, check the special ID in the tileEntity and match it with the one in the recorder. If that fails clear out the info on the Item (because it lost its tileEntity)

Link to comment
Share on other sites

@bcwadsworth, I have given you the code to get a tag containing all of the TE's NBTData. Saving it in your entity is basic java. Read the inline comments.

 

Also, beware that you will have no way of knowing how to recreate a tile entity just by its NBT data. You need its class, as well as the associated Block's class. So, if the TE is deleted as Hugo said, your item is no longer associated with anything.

 

@Whov, if you understood the question, the answer is not "Go the <someperson> way." State what you think the problem is and offer a suggestion.

 

@bcwadsworth, you could get more focussed help here by explaining what you are trying to accomplish with this method you seek.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.