如何在Java代码中用实体属性修改Minecraft玩家最大生命值(Forge 1.18.2)
Forge 1.18.2 实现可叠加的最大生命值提升装备
核心思路
利用原版EntityAttributes.MAX_HEALTH属性,通过**属性修改器(AttributeModifier)**实现固定数值叠加效果。关键是给每件装备分配唯一UUID,确保多件装备的修改器不会互相覆盖,同时选择ADDITION运算逻辑实现数值累加。
步骤1:创建带属性修改器的装备类
以护甲类装备为例(普通物品/自定义槽位逻辑类似),编写继承ArmorItem的类,在构造器中添加属性修改器:
import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterials; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import java.util.UUID; public class HealthBoostChestplate extends ArmorItem { // 生成唯一UUID(可通过在线UUID工具生成) private static final UUID HEALTH_BOOST_UUID = UUID.fromString("f4c2d1a0-7e89-4b3c-8d2e-1f7a6b5c4d3e"); public HealthBoostChestplate() { // 基础护甲配置:钻石材质、胸甲槽位、放入战斗物品栏 super(ArmorMaterials.DIAMOND, Type.CHESTPLATE, new Item.Properties().stacksTo(1).tab(CreativeModeTab.TAB_COMBAT)); // 添加最大生命值提升的属性修改器 this.addAttributeModifier(Attributes.MAX_HEALTH, HEALTH_BOOST_UUID, 6.0D, // 每件装备提升6点生命值(3颗心) AttributeModifier.Operation.ADDITION, // 运算类型:直接累加数值 Type.CHESTPLATE.getSlot()); // 指定仅在胸甲槽位装备时生效 } }
关键参数说明:
- UUID:每个属性修改器必须唯一,否则多件装备的效果会互相覆盖。
- Operation.ADDITION:直接叠加固定数值,是实现多件装备效果累加的核心。另外两种运算类型:
MULTIPLY_BASE:基于基础生命值的百分比提升(如0.1=10%),多件会叠加计算MULTIPLY_TOTAL:基于当前总生命值的百分比提升,不推荐用于可叠加装备(会指数增长)
- 装备槽位:通过最后一个参数指定修改器生效的槽位,确保只有装备时才触发效果。
步骤2:注册装备
在你的Mod注册类中完成物品注册:
import net.minecraft.world.item.Item; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { // 注册器,替换为你的ModID public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, "your_mod_id"); // 注册生命值提升胸甲 public static final RegistryObject<Item> HEALTH_BOOST_CHESTPLATE = ITEMS.register( "health_boost_chestplate", HealthBoostChestplate::new ); }
步骤3:验证效果
启动游戏后,装备一件该胸甲,玩家最大生命值会增加对应数值;装备多件同类型/不同类型的生命值提升装备(只要每个修改器UUID唯一),效果会直接累加,完全符合需求。
内容的提问来源于stack exchange,提问作者Bradley Hewitt
相关产品推荐
相关产品推荐

