Posted December 20, 20186 yr I have went through the forums and multiple posts and have came up with the following code. However, the bit of code doesn't seem to change anything, regardless of what I have tried. My goal is to have the damage increase depending on the amount of mobs killed, and also to increase the speed of the sword based on this. Neither of the modified stats are having any effect on the sword in the game. To test the method, I changed the attackMod to a flat 100 and it still only did 8 damage. @Override public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot){ Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND){ multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", (double)super.getAttackDamage() + 100, 0)); multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4D + speedMod, 0)); } return multimap; } The whole file can be found here If any other code is needed, ask and I shall provide. Thanks in advance! Edited December 20, 20186 yr by Elrol_Arrowsend Solved again
December 20, 20186 yr This happens because you are extending ItemSword and instantinating the base MultiMap through a super invocation. That returns you a multimap with the sword's base values already in place set by ItemSword. Your additions are not taken by the game since they are already applied by ItemSword, and they don't override the old ones because it's a MultiMap. Basically create a new empty multimap instead of grabbing the one from ItemSword.
December 20, 20186 yr Author Okay. I will give this a try. I had thought it would have overridden the old ones. Thanks for the tip! -Edit- Works perfectly now. Thanks a ton! Edited December 20, 20186 yr by Elrol_Arrowsend Solved
December 20, 20186 yr Author Well, while testing it seems like I found an issue, while I hold just one sword, it works perfectly, but if I have one sword that has 0 souls, and another with 1000, they both have the same attack and speed that was modified by the sword with 1000 souls. Where exactly have I messed up? Here is the current code that I am working with.
December 20, 20186 yr Quote protected double souls; You can't store ItemStack sensitive data in Item since items are singletons. Either use capabilities or NBT.
December 20, 20186 yr Author Well the souls are stored on nbt. And that method is just so I can get the number of souls in the other methods. Is there a way to get the current held item in the getItemAttributeModifiers method?
December 20, 20186 yr 10 minutes ago, Elrol_Arrowsend said: Is there a way to get the current held item in the getItemAttributeModifiers method? Use the overload of that method that takes in an ItemStack as one of it's parameters.
December 20, 20186 yr Author Did not see that the first time around. Thanks so much. Back to coding lol.
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.