Maciej916 Posted December 8, 2021 Posted December 8, 2021 I have problem with item reapearing in players hand after changing capability value. Here is what I mean by reapearing: It only happens when item has tag "active" and energy.consumeEnergy is called. Does it have something to to with capability or im doing something wrong or do i need to sync it with client? Here is the code: int tickCounter = 0; @Override public void inventoryTick(ItemStack stack, Level level, Entity entity, int p_41407_, boolean p_41408_) { if (!level.isClientSide()) { if (++tickCounter == 20) { tickCounter = 0; stack.getCapability(ModCapabilities.ENERGY).ifPresent(energy -> { CompoundTag tag = stack.getTag(); if (tag != null) { if (tag.getBoolean("active")) { energy.consumeEnergy(Math.min(energy.energyStored(), 100), false); } if (energy.energyStored() == 0) { tag.putBoolean("active", false); stack.setTag(tag); } } }); } } super.inventoryTick(stack, level, entity, p_41407_, p_41408_); } Quote
Maciej916 Posted December 8, 2021 Author Posted December 8, 2021 1 hour ago, diesieben07 said: You cannot do this, this will be shared between all instances of your item, client and server. I would recommend you use getGameTime instead, which will increase by 1 every tick. You can override shouldCauseReequipAnimation in your Item class to control this. That was easier than i expected, thank you for the advice, i'll use: if (level.getGameTime() % 20 == 0) Quote
Recommended Posts
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.