NMS · NMS 實體
NMS 屬性修改器
透過 NMS AttributeMap/AttributeModifier 動態修改實體屬性,實現 RPG 裝備加成與 Buff/Debuff 系統。
NMS Attribute Modifier
目的
透過 NMS AttributeMap、AttributeInstance、AttributeModifier 精確控制實體屬性,支援加法、倍乘、基底值修改,實現 RPG 裝備加成、Buff/Debuff 系統。
平台需求
- Paper 1.21.11 / 26.2(兩版皆經編譯驗證;版本差異以行尾
// @1.21.11:標註) - Paperweight userdev 2.0.0-beta.24+
- Mojang 官方名稱(Minecraft 26.1 起不再混淆)
- Java 21(1.21.11)/25(26.2)
產生的代碼
AttributeUtil.java
// 取得屬性最終值(含所有 modifier 計算後)
double hp = AttributeUtil.getValue(player, Attributes.MAX_HEALTH);
// 新增加法 modifier(+10 攻擊力)
AttributeUtil.addModifier(player, Attributes.ATTACK_DAMAGE,
ModifierBuilder.addition("myplugin", "sword_bonus", 10.0));
// 移除指定 modifier(1.21 起 id 為 Identifier,舊稱 ResourceLocation)
AttributeUtil.removeModifier(player, Attributes.ATTACK_DAMAGE,
Identifier.fromNamespaceAndPath("myplugin", "sword_bonus"));
ModifierBuilder.java(建立器)
// 加法(baseValue + amount)
AttributeModifier mod = ModifierBuilder.addition("myplugin", "buff_id", 5.0);
// 倍乘基底(baseValue + baseValue * amount)
AttributeModifier mod = ModifierBuilder.multiplyBase("myplugin", "speed_boost", 0.2);
// 倍乘全部(totalValue * (1 + amount))
AttributeModifier mod = ModifierBuilder.multiplyTotal("myplugin", "debuff", -0.1);
執行緒安全
AttributeUtil存取實體狀態,必須在主執行緒呼叫