本篇教程由作者设定未经允许禁止转载。
前言
大部分人可能在修改物品属性的时候,都有可能遇到无论什么方法(modifyAttribute,addAttribute)都无法成功修改属性的物品,改武器伤害还比较好说,可以使用LivingHurt修改Amount达到改伤害的目的(相关教程livinghurt修改伤害),但是这种方法并没有真正的修改物品的属性,所以物品的伤害显示还是原来的伤害显示,而且这种方法只适用于武器修改伤害,并不能为盔甲或其他物品添加新的属性,但是,我们可以使用forge的ItemAttributeModifierEvent来修改这些物品的属性。
正文
代码
ForgeEvents.onEvent('net.minecraftforge.event.ItemAttributeModifierEvent', event => {let itemStack = event.getItemStack();
let slot = event.getSlotType();
let EquipmentSlot = Java.loadClass("net.minecraft.world.entity.EquipmentSlot"); let ModifyUUID = UUID.fromString("550e8400-e29b-41d4-a716-446655440003"); let AttributeModifier = Java.loadClass("net.minecraft.world.entity.ai.attributes.AttributeModifier"); if(itemStack.getId() == "minecraft:stick" && slot == EquipmentSlot.MAINHAND){event.addModifier(
"minecraft:generic.max_health",
new AttributeModifier(
ModifyUUID,
"whip_mainhand_crit_rate",
10,
AttributeModifier.Operation.ADDITION
)
);
}
});
该代码的作用是当木棍在主手时添加10最大生命值
现在对代码进行拆分解释
ForgeEvents.onEvent('net.minecraftforge.event.ItemAttributeModifierEvent'使用forge的ItemAttributeModifierEvent
let itemStack = event.getItemStack();
let slot = event.getSlotType();
获取物品和物品所在的槽位
let AttributeModifier = Java.loadClass("net.minecraft.world.entity.ai.attributes.AttributeModifier");let EquipmentSlot = Java.loadClass("net.minecraft.world.entity.EquipmentSlot");导入所需的Java类
let ModifyUUID = UUID.fromString("550e8400-e29b-41d4-a716-446655440003");定义ModifyUUID这个变量,后面双引号里面的字符串为UUID,不可以重复!!!!!
if(itemStack.getId() == "minecraft:stick" && slot == EquipmentSlot.MAINHAND)
判断物品ID是否为木棍和物品所在的栏位是否为主手
可用的物品所在栏位都有:
EquipmentSlot.MAINHAND —— 主手
EquipmentSlot.HEAD —— 头盔
EquipmentSlot.CHEST —— 胸甲
EquipmentSlot.LEGS —— 护腿
EquipmentSlot.FEET —— 靴子
EquipmentSlot.OFFHAND —— 副手
event.addModifier
为物品添加修改器(它所需要的参数是属性ID,AttributeModifier)
new AttributeModifier(
ModifyUUID,
"whip_mainhand_crit_rate",
10,
AttributeModifier.Operation.ADDITION
)
new一个AttributeModifier,里面所需的参数分别为UUID,属性名,数值,操作类型,属性名和UUID都不可以重复
所有可用的操作类型
AttributeModifier.Operation.ADDITION —— 直接添加,如:+20
AttributeModifier.Operation.MULTIPLY_BASE —— 百分比加成,如:+20%(公共乘区)
AttributeModifier.Operation.MULTIPLY_TOTAL —— 百分百加成(独立乘区)
最后
如果该教程中有什么错误或改进之处,请指出


