MC Toolkit

指南 / 命令与数据

/attribute:基础值与修饰符的区别,以及为什么你的数值总是被重置

设置基础值是永久的,而设置修饰符不是——除非你选错了运算模式。三种运算模式、叠加顺序,以及槽位陷阱,现在修饰符的 id 也要带上完整的命名空间了,这是与旧版命令写法之间一个很容易被人忽略掉的重要差异。

/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,要么是你添加了一个修饰符而需要用 modifier remove <id>。

三种运算模式及其应用顺序

运算模式作用应用顺序
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 是在 add_value 修饰符加完之后再乘以基础值——而不是当前总值——这就是为什么两个 add_multiplied_base 是加法叠加而非复利叠加。

修饰符 id 现在使用命名空间

旧版本使用 UUID。现代版本使用命名空间 id:

/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value

添加一个 id 相同的第二个修饰符会失败并提示“Modifier … is already present”,而不是叠加或替换。要刷新一个增益效果,请先 modifier remove 它。

装备修饰符存在于物品上,而非实体上

剑的伤害加成是一个 attribute_modifiers 物品组件 (item component),并且只在物品位于正确槽位时才生效:

/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
  operation:"add_value",slot:"mainhand",id:"my:bonus"}]]

省略 slot 是最常见的错误。 它默认值为 any,因此修饰符会在所有装备槽位生效——一把剑会从你的副手或盔甲槽位给你加成,而不仅仅是从主手。

有效槽位:mainhand、offhand、hand、head、chest、legs、feet、armor、body、saddle、any。

读取数值

/attribute @s minecraft:max_health get

返回的是有效总值,包含修饰符。/attribute @s minecraft:max_health base get 只返回基础值。

在实体与战斗命令生成器中构建以上任意一种——包括设置了槽位的物品组件形式。

实体与战斗命令生成器 →

更多指南

查看全部 →