Started by
Kuri_Pa
on
Topic category: Help with Minecraft modding (Java Edition)
I want my sword to have +50% attack damage, but it crashes when I start the game
I added these codes manually in
public void initElements() {
elements.items.add(() -> new SwordItem(new IItemTier() {
@Override
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) {
Multimap<Attribute, AttributeModifier> sword_attack = super.getAttributeModifiers(slot, stack);
if ( slot == EquipmentSlotType.MAINHAND){
sword_attack.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(UUID.randomUUID(),"Weapon modifier", (double)0.5, AttributeModifier.Operation.MULTIPLY_BASE));
}
return sword_attack;
}
I don't know what's wrong, seems is sword_attack.put
what should I do?
I refer to botania's code and found the solution
@Override
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) {
Multimap<Attribute, AttributeModifier> sword_attack =LinkedHashMultimap.create();
if ( slot == EquipmentSlotType.MAINHAND){
sword_attack.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER,"Weapon modifier", getAttackDamage(), AttributeModifier.Operation.ADDITION));
sword_attack.put(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER,"Weapon modifier", -3.2 , AttributeModifier.Operation.ADDITION));
sword_attack.put(ForgeMod.REACH_DISTANCE.get(), new AttributeModifier(UUID.randomUUID(),"Weapon modifier",2, AttributeModifier.Operation.ADDITION));
sword_attack.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(UUID.randomUUID(),"Weapon modifier",0.5, AttributeModifier.Operation.MULTIPLY_BASE));
return sword_attack;
}
Change super.getAttributeModifiers(slot, stack);
to LinkedHashMultimap.create();
Edited by Kuri_Pa on Fri, 05/27/2022 - 06:35
So there are 2 solutions, If I'm reading this correctly.
#1 - Just give your sword a attack boost in It's base damage. Example your sword has base 6 damage +50% would make it 9 Damage.
#2 - Create a procedure that /give 's the sword with +50% damage boost via item attributes like so
/give @p YOUR_MOD_NAME:YOUR_SWORD_NAME{AttributeModifiers:[{AttributeName:"generic.attack_damage",Amount:"0.5",Slot:mainhand,Operation:1,Name:"generic.attack_damage",UUID:[I;-122423,24530,92129,-49060]}]} 1
change YOUR_MOD_NAME to your mods internal name (Example "My Cool Mod - my_cool_mod")
change YOUR_SWORD_NAME to your sword's internal name (Example "Longsword of Doom - longsword_of_doom")
Since this uses math Operation 1 , which is multiply, 0.5 = 50%
If neither of these is what you are looking for then sorry I'm not sure what it is your trying to do.
I want my sword to have
20 attack damage
0.8 attack speed
+50% attack damage
I found the solution
This should also work for max health or movement speed when held in the main hand