Posted September 15, 20169 yr Can someone give some guidance on how to edit items attributes? I'm cheking this link (http://minecraft.gamepedia.com/Attribute#Modifiers) but yet i haven't found a way to do it on a modded item. Thank you in advance.
September 15, 20169 yr Author Manage to find a way out but isn't perfect since if i get the item from creative menu it wont came with the Attribute Modifier. ItemStack swordStack = new ItemStack(TutorialItems.super_cheaty_sword); swordStack.setStackDisplayName("Not a cheaty sword"); final UUID ATTACK_DAMAGE_MODIFIER = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); final UUID ATTACK_SPEED_MODIFIER = UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"); swordStack.addAttributeModifier(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", (double)40, 0), EntityEquipmentSlot.MAINHAND); swordStack.addAttributeModifier(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", (double)10, 0), EntityEquipmentSlot.MAINHAND); String[] cheatySwordCraft = {"CCC", "CDC", "CCC"}; GameRegistry.addShapedRecipe(swordStack, cheatySwordCraft[0], cheatySwordCraft[1], cheatySwordCraft[2], 'C', TutorialItems.custom_item, 'D', Items.DIAMOND_SWORD); Can someone help me with the creative tab issue? Source:
September 15, 20169 yr Override Item#getAttributeModifiers to do the following: Call the super method. Check that the EntityEquipmentSlot argument is EntityEquipmentSlot.MAINHAND . If it is, replace the modifiers with the IDs Item.ATTACK_DAMAGE_MODIFIER and Item.ATTACK_SPEED_MODIFIER (use the existing fields rather than calling UUID.fromString ) in the Multimap with your own modifiers. Return the Multimap . I have an example of this here. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 16, 20169 yr Author Thank you, it worked here but i had to reimplemented like this since i was recieving errors from the java lambda expression not being supported. private void replaceModifier(Multimap<String, AttributeModifier> modifierMultimap, IAttribute attribute, UUID id, double multiplier) { // Get the modifiers for the specified attribute final Collection<AttributeModifier> modifiers = modifierMultimap.get(attribute.getAttributeUnlocalizedName()); AttributeModifier selectedModifier = null; for (AttributeModifier modifier: modifiers) { if (modifier.getID().equals(id)) { selectedModifier = modifier; break; } } if (selectedModifier != null) { modifiers.remove(selectedModifier); modifiers.add(new AttributeModifier(selectedModifier.getID(), selectedModifier.getName(), selectedModifier.getAmount() * multiplier, selectedModifier.getOperation())); } } Previous error: “lambda expressions not supported at this language level”
September 16, 20169 yr Author Just a quick question about other AttributeModifier. I'm able to add Knockack resistance to an armor like this: @Override public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { final Multimap<String, AttributeModifier> modifiers = super.getAttributeModifiers(slot, stack); if (slot == EQUIPMENT_SLOT) { modifiers.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getAttributeUnlocalizedName(), new AttributeModifier(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getAttributeUnlocalizedName(), (double)20, 0)); } return modifiers; } Is this the best way to do it? I couldn't find the UUID either know what modifiers are those at ItemArmor private static final UUID[] ARMOR_MODIFIERS = new UUID[] {UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150")};
September 16, 20169 yr You should use the existing ItemArmor#armorType field to get the EntityEquipmentSlot of an ItemArmor instance rather than creating your own field. The ItemArmor.ARMOR_MODIFIERS array contains the UUID s used for the SharedMonsterAttributes.ARMOR and SharedMonsterAttributes.ARMOR_TOUGHNESS modifiers provided by each piece of armour (see ItemArmor#getItemAttributeModifiers ). It uses the return of EntityEquipmentSlot#getIndex as the index. You should create your own UUID for your modifier. Call UUID.randomUUID once at startup to generate a random UUID, then write it to the log. Create a private static final field of type UUID in your armour class and initialise it by calling UUID.fromString with the UUID that was printed to the log. Use this field as the ID of your modifier. Side note: You don't need to cast from int to double , Java will automatically convert numeric types to "wider" types. You only see these casts in vanilla code because the compiler automatically generates them. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
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.