本篇教程由作者设定未经允许禁止转载。

前言

大部分人可能在修改物品属性的时候,都有可能遇到无论什么方法(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 —— 百分百加成(独立乘区)


最后

如果该教程中有什么错误或改进之处,请指出