指令①的返回值为正常的40.0,也就是将我们自己在health_max计分项上的值改为40。指令②虽然给我们的消息是40.0,但实际返回的是80.0,计分项上的分数也会改为80。
所以,『乘数』参数并不是没有用,而是它的用处在于影响指令的返回值。
修改属性还是很简单的。那使用/attribute给实体添加修饰符呢?让我们再试一试:
/attribute @s generic.max_health modifier add 1-1-1-1-1 A 1.0 add
→为实体xxx的属性最大生命值添加了修饰符00000001-0001-0001-0001-000000000001
在上面的指令中,使用了『modifier』子命令的『add』子命令来添加一个修饰符,参数『1-1-1-1-1』指定了该修饰符的UUID,『A』指定了该修饰符的名称,『1.0』指定了该修饰符的值,『add』指定了该修饰符的计算模式是『属性增量』。其中得讲一下的就是这个UUID参数。
在这边的UUID参数,填写的是『带连字符的十六进制UUID』。这种形式的UUID很常见,它长下面这样:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
详细内容会在第一百一十章讲到,在这边你只需要把这东西当做填写五个用连字符『-』连在一起的整数即可:
1-1-1-1-1
上面的『add』参数所在的位置,也可以填写multiply_base(倍率增量)和multiply(最终倍乘),来改变运算模式。
现在,让我们看看的生命值上限是不是高达41.0:
/attribute @s generic.max_health base get
→实体xxx的属性最大生命值的基值为40.0
?怎么还是40.0?啊,是用错了,这获取到的是基值,应该把『base』参数去掉:
/attribute @s generic.max_health get
→实体xxx的属性最大生命值的值为41.0
很好,所以你现在会用/attribute给实体添加属性修饰符了吗?
remove和value get两个子命令的使用很简单,让我们试一试:
/attribute @s minecraft:generic.max_health modifier value get 1-1-1-1-1 2.0
→实体xxx的属性最大生命值中修饰符00000001-0001-0001-0001-000000000001值为1.0
上面这条指令会返回这个修饰符的值。并且由于指定了乘数为『2.0』,这条指令的返回值还会是『2.0』(1.0×2.0)。
/attribute @s minecraft:generic.max_health modifier remove 1-1-1-1-1
→为实体xxx的属性最大生命值移除了修饰符00000001-0001-0001-0001-000000000001
这样子我们就删掉了刚刚给我们自己添加的属性修饰符,生命值上限回到了40.0。
本章到此为止。
附录:/attribute历史
Java
1.16——加入了/attribute