Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.18] Item in hand reapearing when updating capability value on inventoryTick


Maciej916
 Share

Recommended Posts

I have problem with item reapearing in players hand after changing capability value. Here is what I mean by reapearing:

 021017d319261196dc6e0e1c4408dfa9.gif 

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_);
    }

 

Link to comment
Share on other sites

59 minutes ago, Maciej916 said:
int tickCounter = 0;

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.

1 hour ago, Maciej916 said:

I have problem with item reapearing in players hand after changing capability value.

You can override shouldCauseReequipAnimation in your Item class to control this.

Link to comment
Share on other sites

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)

 

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
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.