Jump to content

Storing/Retrieving NBT data in an itemstack in 1.21


Recommended Posts

I'm a bit confused as how to get/store custom nbt data in itemstacks on the fly in version 1.21. After a lot of googling I have found that in the past the ItemStack class had the functions getTagCompound() and setTagCompound(), however they seem to have been deprecated? It's unfortunate because that seemed so straight forward and I can't find much info on the subject otherwise. Apologies if this isn't worded nicely as I am still pretty new to minecraft modding. Any help would be appreciated.

Link to comment
Share on other sites

Item Capabilities haven't been re-implemented in 1.21 yet, you can use Vanilla's Data Components system instead. See DataComponents and the related classes.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Okay, so I actually downgraded the mod to 1.20.6 because I did not want to have to deal with vanilla datacomponents. I followed a youtube tutorial and now have a capability I made attach to my modded item. However I am now unsure how to actually retrieve and manipulate the capability of an itemstack. I saw a getCapability function in some tutorials but that seems to have been deprecated...

Link to comment
Share on other sites

The situation is the same in 1.20.6. Data Components were introduced in 1.20.5/1.20.6 and Item Capabilities haven't been re-implemented since then.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Okay, I'm glad I made a backup then. I'm confused as to where there is any information on how to work with Data Components. I don't see anything about it on the Forge docs or any tutorials on this in general unless I'm missing it somehow. I can see the DataComponents decompiled class file but I'm not sure how to work with it. Maybe it's beyond my technical expertise?

Link to comment
Share on other sites

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Okay, so I got everything set up and should have my data component registered. However when I try to register my modded item with the data component added to it, I get an error saying that the registry object (for the data component) is not present. I tried changing the order in which things are registered in the mod startup to no avail.

Link to comment
Share on other sites

Forge fires RegisterEvent (which is used internally by DeferredRegister) for each registry in a specific order, so changing the registration order in your code won't help. I haven't actually been able to run my mod since 1.20.6 because I'm waiting on Item Capabilities, so I haven't encountered this error myself.

It looks like you can't use your DataComponentType during Item registration, so you probably need to get/add it on demand with getOrDefault and set, instead of in registration.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Thanks. I removed the data component from item registration and the game boots fine now. However now when I try to call the set() method on my item stack during the item's useOn method, it still throws an error that the registry object is not present. I have registered the data component along with all of my other modded content in the main mod class, so I am at a genuine loss as to why this is still happening. I am new to these forums, am I allowed to link the github repo?

Link to comment
Share on other sites

Have you registered the DeferredRegister with the mod event bus? You can link your GitHub repo.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

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.

Announcements



×
×
  • Create New...

Important Information

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