Jump to content

[1.6] Using attributemodifier on item usage, GUI does not update


Recommended Posts

Posted

Ok, following problem:

 

AttributeInstance attributeinstance = player.func_110148_a(SharedMonsterAttributes.field_111267_a); //gets the "max health" attribute instance
attributeinstance.func_111124_b(attributeinstance.func_111127_a(Reference.UUID_HP)); //deletes old modifier (you cannot overwrite)
attributeinstance.func_111121_a(new AttributeModifier(Reference.UUID_HP, "modifier.health", 0, 0)); //adds new modifier

 

I run this code (with slightly different parameters) in a PlayerTracker to reduce the max health of players on respawn via the new attribute modifier system of 1.6. It works like a charm.

However, if I try to set it back to zero once the player uses an item (onItemRightClick() in the Item class), the GUI does not reflect the changes correctly.

With the new GUI, minecraft actually checks your max health and draws the amount of hearts accordingly. This works in my PlayerTracker, but when I run the code in the Item class, all I get back is greyed out hearts (like you took damage). They don't regenerate (because they are full internally). They should be red, which they are once I update the GUI manually ingame (take damage / eat food).

 

A workaround I found was to damage the player with 1/2 heart once he eats the item but that is not a solution. Any help would be appreciated.

Posted

I'm sorry, but to me it looks the same... This is from the potion class:

public void func_111185_a(EntityLivingBase par1EntityLivingBase, BaseAttributeMap par2BaseAttributeMap, int par3)
    {
        Iterator iterator = this.field_111188_I.entrySet().iterator();

        while (iterator.hasNext())
        {
            Entry entry = (Entry)iterator.next();
            AttributeInstance attributeinstance = par2BaseAttributeMap.func_111151_a((Attribute)entry.getKey());

            if (attributeinstance != null)
            {
                AttributeModifier attributemodifier = (AttributeModifier)entry.getValue();
                attributeinstance.func_111124_b(attributemodifier);
                attributeinstance.func_111121_a(new AttributeModifier(attributemodifier.func_111167_a(), this.getName() + " " + par3, this.func_111183_a(par3, attributemodifier), attributemodifier.func_111169_c()));
            }
        }
    }

 

This is basically the same thing except it grabs the AttributeInstance from the BaseAttributeMap and uses EntityLivingBase instead EntityPlayer. But changing my code to

BaseAttributeMap attributemap = par1EntityLivingBase.func_110140_aT();
AttributeInstance attributeinstance = attributemap.func_111151_a(SharedMonsterAttributes.field_111267_a);
attributeinstance.func_111124_b(attributeinstance.func_111127_a(Reference.UUID_HP));
attributeinstance.func_111121_a(new AttributeModifier(Reference.UUID_HP, "modifier.health", 0, 0));

does not work properly either.

 

However, calling that function like this (21 is the health boost potion):

Potion.potionTypes[21].func_111185_a(par3EntityPlayer, par3EntityPlayer.func_110140_aT(), 0);

does work. That's not really an option though because it only works in multipliers of 2 full hearts...

 

I feel like I'm close but I just cannot figure it out...

Posted

SOLVED - My feeling was right, I was very close.

 

AttributeInstance attributeinstance = player.func_110140_aT().func_111151_a(SharedMonsterAttributes.field_111267_a);

 

Getting the attribute instance like that works, I'm just using EntityPlayer instead of EntityLivingBase (as I tried above).

 

 

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I can't understand the logs, so I'm hoping someone could tell me what's causing the issues. https://pastebin.com/d1XPxCes
    • Hello I'm currently making an Item that thrusts you to viewing direction, and I referenced riptide code of trident for my item. @Override public InteractionResultHolder<ItemStack> use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) { if(!pLevel.isClientSide() && pUsedHand == InteractionHand.MAIN_HAND && pPlayer.isOnGround()){ Impale(pPlayer, pUsedHand); pPlayer.getCooldowns().addCooldown(this, 40); } return super.use(pLevel, pPlayer, pUsedHand); } public void Impale(Player pPlayer, InteractionHand pUsedHand) { float playerYRot = pPlayer.getYRot(); float xForce = -Mth.sin(playerYRot * ((float)Math.PI / 180F)) * Mth.cos((float)Math.PI / 180F); float yForce = 100.6F; float zForce = Mth.cos(playerYRot * ((float)Math.PI / 180F)) * Mth.cos((float)Math.PI / 180F); float stabilizedForce = Mth.sqrt(xForce * xForce + zForce * zForce); xForce /= stabilizedForce; zForce /= stabilizedForce; pPlayer.push((double)xForce, (double)yForce, (double)zForce); pPlayer.sendSystemMessage(Component.literal(playerYRot + " " + xForce + " " + yForce + " " + zForce + " " + stabilizedForce + "shoo")); } I sure edited a lot from source code but this isn't working somehow? the sendSystemMessage works correctly. It prints value of variables and string, but the force isn't applying to player. how can I make this to work? Thanks.
    • i tried putting a modpack together and cant get this working no matter what i have tried log: https://pastebin.com/uqz1aKiY
    • We have an event for an Entity being struck by lighting, but doesn't look like we have one for Blocks. And unfortunately, looking at it, the LightingBolt entity doesn't have any context on why it was registered, so you wouldn't be able to get the source context. What are you trying to accomplish with this event?
    • Hey guys, I'm trying to use the simple planes mod https://www.curseforge.com/minecraft/mc-mods/simple-planes with a nuclear bombs mod https://www.curseforge.com/minecraft/mc-mods/nuclear-bombs . The simple planes mod has a cargo plane that can drop tnt, and i want it to work with the nuclear bombs. I added this JSON file from chatGPT to the payloads folder in simple planes (because the nukes couldn't even get stored in the plane in the first place), but this only allows the nuke to drop but doesn't explode: https://mclo.gs/3uEQIX2 . This nuke mod requires a redstone signal and then manual activation, which makes this tougher i imagine. If someone could write me a code for the payload folder for simpleplanes, something that even tampers with the nuke mod, or any general suggestions that would be great!  Many Thanks
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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