Phineas Posted July 11, 2013 Share Posted July 11, 2013 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. Quote Link to comment Share on other sites More sharing options...
Phineas Posted July 12, 2013 Author Share Posted July 12, 2013 bump Quote Link to comment Share on other sites More sharing options...
Phineas Posted July 12, 2013 Author Share Posted July 12, 2013 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... Quote Link to comment Share on other sites More sharing options...
Phineas Posted July 12, 2013 Author Share Posted July 12, 2013 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). Quote Link to comment Share on other sites More sharing options...
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.