Kinniken Posted March 19, 2014 Posted March 19, 2014 Hi guys, It seems stupid, but I haven't managed to get the damage from an Item (like ItemSword or ItemTool). Here was my attempt: public static double getItemWeaponDamage(Item item) { Multimap multimap = item.getItemAttributeModifiers(); if (multimap.containsKey(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName())) { if (multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()) instanceof AttributeModifier) { AttributeModifier weaponModifier=(AttributeModifier) multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()); return weaponModifier.getAmount(); } } return 0; } However multimap.get doesn't return an AttributeModifier but an class com.google.common.collect.AbstractMapBasedMultimap$WrappedSet. Anyone knows how this works? Thanks K. Quote http://www.millenaire.org/img/dynamicsig.png[/img]
Kinniken Posted March 19, 2014 Author Posted March 19, 2014 With the correct criteria. Thanks, though. Quote http://www.millenaire.org/img/dynamicsig.png[/img]
Kinniken Posted March 20, 2014 Author Posted March 20, 2014 In case anyone else needs it: @SuppressWarnings({ "rawtypes", "unchecked" }) public static double getItemWeaponDamage(Item item) { Multimap multimap = item.getItemAttributeModifiers(); if (multimap.containsKey(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName())) { if (multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()).toArray().length>0 ) { if (multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()).toArray()[0] instanceof AttributeModifier) { AttributeModifier weaponModifier=(AttributeModifier) multimap.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()).toArray()[0]; return weaponModifier.getAmount(); } } } return 0; } This assumes the modifier will be in the first entry in the set and seems to work fine with the vanilla Minecraft weapons. No idea whether there are cases where this won't be true. Quote http://www.millenaire.org/img/dynamicsig.png[/img]
Kinniken Posted March 20, 2014 Author Posted March 20, 2014 For a collection with an expected size of 1, the actual difference isn't going to be very significant... After that, I suppose it depends how often you can that method. If it's every tick then you need to be careful. If it's once in very specific circumstances then I'm skeptical the difference will amount to anything. Quote http://www.millenaire.org/img/dynamicsig.png[/img]
Kinniken Posted March 20, 2014 Author Posted March 20, 2014 I don't doubt I could do things more cleanly, but I have a hell of a lot of more urgent points to work on if I ever want to get a working release of Millénaire for 1.7 out Quote http://www.millenaire.org/img/dynamicsig.png[/img]
Kinniken Posted March 20, 2014 Author Posted March 20, 2014 Yep. And if I ever come back to this forum in a few weeks complaining that the code above doesn't work properly, feel free to remind me of this thread Quote http://www.millenaire.org/img/dynamicsig.png[/img]
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.