/attribute:基础值与修改器,以及为什么你的属性值总被重置
设置基础值是永久性的,而设置修改器则不是——除非你选错了操作。本文将介绍三种操作、叠加顺序以及槽位陷阱。
/attribute 看起来像是一个带有三个子命令的命令。但实际上,它是两个碰巧共享名称的不同系统,混淆它们是导致属性值不断重置的原因。
基础值与修改器
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base set会重写实体自身的属性值。它在重新加载后仍然存在,并且除了另一个base set之外,没有任何东西可以将其移除。modifier add会在现有属性值之上叠加一个临时调整。它有一个ID,并且可以通过该ID移除。
如果你的更改在重新登录后消失了,说明你使用了修改器,并且有什么东西清除了它。如果你的更改无法移除,说明你使用了base set,你需要base reset。
三种操作及其应用顺序
| 操作 | 作用 | 应用顺序 |
|---|---|---|
add_value | 值 + n | 首先 |
add_multiplied_base | 值 + (基础值 × n) | 其次 |
add_multiplied_total | 运行总计 × (1 + n) | 最后 |
顺序是固定的,并且很重要。从基础值20开始,然后是add_value 10和add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base 总是乘以原始基础值,而不是运行总计——这就是为什么两个相同的操作会以加法方式叠加,而不是复合叠加。
修改器ID现在是命名空间化的
旧版本使用UUID。现代版本使用命名空间ID:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
添加第二个具有相同ID的修改器会替换第一个,而不是叠加。这是刷新增益的预期方式——你不需要先移除它。
装备修改器存在于物品上,而非实体上
附魔剑的伤害加成是一个attribute_modifiers物品组件,它只在物品位于正确槽位时才生效:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot是必需的,也是常见的错误。 如果省略它,修改器将在每个槽位生效,因此背包中的剑也会为你提供增益。
有效槽位:mainhand、offhand、head、chest、legs、feet、armor、body、any。
读取属性值
/attribute @s minecraft:max_health get
返回的是基础值,而不是有效总计。要获取包含修改器在内的总计,请在记分板上使用execute store result并读取该值。
所有这些——包括带有槽位设置的物品组件形式——都可以在实体与战斗命令生成器中构建。