兮莫辞
我想用命令方块加强原版MC怪物我用三个命令方块想让僵尸拥有40血量


左绿:execute as @e[type=minecraft:zombie,nbt={Health:40.0f},tag=!change] if data entity @s Attributes[{Base:40.0d,Name:"minecraft:generic.max_health"}] run tag @s add change
中间绿:execute as @e[type=minecraft:zombie,tag=!change] run data modify entity @s Attributes[{Name:"minecraft:generic.max_health"}].Base set value 40.0d
右蓝:execute as @e[type=minecraft:zombie,tag=!change] run data modify entity @s Health set value 40.0d

然后用拉杆激活之后,僵尸好像无敌了。。。用铁剑砍了几十刀都不死
求大佬指出错误,或者帮忙重新设置

使僵尸血量从原版的20变成40,要自然生成的也是

PS:大佬不介意的话可以帮忙也设计一个让僵尸普攻伤害*2的命令吗
求求了

无敌三脚猫
为啥你不用我之前写的那个呢?
  1. /execute as @e[type=minecraft:zombie,nbt={Health:20.0f}] run data merge entity @s {Attributes:[{Name:"generic.max_health",Base:40.0f}],Health:40.0f}
复制代码

注意细节,generic.max_health和Health的数据类型都应该是float(用后缀f表示),可是不知道为啥你写的后两个指令都是写的40.0d(这个后缀代表double数据类型),改又不统一改,所以你的左绿命令方块里的指令根本就没有用,如果你用data get看看此时僵尸的数据,就会发现僵尸的Health是40.0d,无法被nbt={Health:40.0f}匹配到

无敌三脚猫
本帖最后由 无敌三脚猫 于 2021-9-29 22:53 编辑

呐,之前我也说过,加攻击力这种可以用药水来做,指令写起来简单很多,不过如果真是要求两倍攻击力(在有武器有力量药水的情况下也给它加两倍加一倍攻击力),而不是加固定数额的攻击力,那还是只能用属性修饰符/execute as @e[type=minecraft:zombie] run attribute @s minecraft:generic.attack_damage modifier add 390dbc48-1592-4677-bc08-8db7059959cc bulabula 2 multiply
等等我搞错了啊,你要的是两倍,不是加两倍,那改成
  1. /execute as @e[type=minecraft:zombie] run attribute @s minecraft:generic.attack_damage modifier add 390dbc48-1592-4677-bc08-8db7059959cc bulabula 1 multiply
复制代码

兮莫辞
无敌三脚猫 发表于 2021-9-29 22:07
为啥你不用我之前写的那个呢?
注意细节,generic.max_health和Health的数据类型都应该是float(用后缀f表示 ...

我把僵尸的标签换成骷髅的 为什么骷髅就直接无敌了。。。

无敌三脚猫
兮莫辞 发表于 2021-9-29 23:42
我把僵尸的标签换成骷髅的 为什么骷髅就直接无敌了。。。

因为我的那个指令就是简单的把所有血量=20的僵尸的血量和血量上限改成40,想象一下,如果我把僵尸砍到20血,那它不又满血了吗,不过这个不会发生,因为僵尸是自带护甲的,掉血不是整数,我砍40血的僵尸一刀,它血量变成了28.191999,显然,砍到20血基本不可能
不过骷髅就没有护甲
所以得改改,像这样
  1. /execute as @e[type=minecraft:zombie,nbt=!{Attributes:[{Base:40.0d,Name:"minecraft:generic.max_health"}]}] run data merge entity @s {Attributes:[{Name:"generic.max_health",Base:40.0d}],Health:40.0f}
复制代码
只给血量上限≠40的僵尸加血,保证不给同一个僵尸加两次血,为什么这里的判断逻辑是血量上限≠40,而不判断血量上限=20呢?因为没有改过属性的僵尸压根没有"血量上限"这个属性(可以用data get看出来)
当然,指令里的zombie可以换成skeleton
血量上限默认的数据类型是double(后缀是d),之前我写错了,这次也随便改正了

第一页 上一页 下一页 最后一页