Jump to content

Recommended Posts

Posted (edited)

I have some items which I give a 'decay' capability. It stores the time the item was created, and compares that against the current time and a predefined shelf-life to give different effects. All of these things are working exactly as expected when I play in single player.

  • The item's durability bar is coloured in a shade between green and red representing its decay level (more red = more rotten).
  • When the item is fully rotten:
    • The player can't eat it
    • The model changes to a 'rot' texture using a property override
    • The display name of the stack becomes "Rotten ____"

 

But some weird things are happening when I run a server and connect to it, and I have no idea why:

  • When a decayable item is a dropped entity in the world, it always renders as rotten - whether it actually is or not. (In singleplayer, they render correctly when they're dropped entities).
  • Decayable items in my inventory have their durability bar completely green until fully rotten (In singleplayer they fade progressively from green to red).
  • When I click on an item in a slot of my inventory, it immediately 'becomes' rotten (displays the rot texture, name, and red durability bar). It stays that way when I put it down into a slot. But, these stacks will revert back to their correct state when:
    • I eat one from a stack of items (and if they were truly rotten I wouldn't be able to eat them in the first place)
    • I drop part or all of the stack using Q or clicking outside the inventory GUI.

These problems are so weirdly specific, and I have no idea how they can be different between singleplayer and connected to a server. Can anyone help?

 

My code is all on github. Probably-relevant classes:

Edited by Jay Avery
Posted

Item capabilities are hard to sync properly, as discussed here and in the referenced issues.

 

The best option at the moment may be overriding Item#getNBTShareTag to include the capability data required for display purposes. If you're attaching your capability to external items (from vanilla or other mods), you may have to put the capability data directly in the ItemStack's compound tag.

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.

Posted
9 hours ago, Choonster said:

Item capabilities are hard to sync properly, as discussed here and in the referenced issues.

 

The best option at the moment may be overriding Item#getNBTShareTag to include the capability data required for display purposes. If you're attaching your capability to external items (from vanilla or other mods), you may have to put the capability data directly in the ItemStack's compound tag.

The confusing thing is that the data stored in my capability should never change - once it's initialised it just stores its birth time, and I don't see why it should be getting reset or lost somehow (especially why it's getting lost while connected to a server but not singleplayer - surely if data is mistakenly getting deleted or overwritten at a certain point it would happen regardless?).

 

If I add the capability data to getNBTShareTag, do I need to override something else to make sure it gets read correctly? I am only using internal items from my mod, so at least that simplifies it slightly.

Posted
2 minutes ago, Jay Avery said:

If I add the capability data to getNBTShareTag, do I need to override something else to make sure it gets read correctly? I am only using internal items from my mod, so at least that simplifies it slightly.

 

Your client-side code will need to get its data from the ItemStack's compound tag instead of the capability instance.

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.

Posted

I just remembered the reason I hadn't used stackTagCompound before is because the doc comments say it can only be used for non-stackable items - whereas mine are stackable. Is that going to cause problems if I try it?

Posted
22 minutes ago, Jay Avery said:

I just remembered the reason I hadn't used stackTagCompound before is because the doc comments say it can only be used for non-stackable items - whereas mine are stackable. Is that going to cause problems if I try it?

 

I think the doc comment is outdated or just incorrect, ItemFireworkCharge and ItemMonsterPlacer are both stackable items that use NBT.

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.

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.