今天想在服务器里面通过命令方块使得掉在地上的箭都可以拾取。我一开始的思路是:判断箭的nbt标签是否为pickup:0,如果是则run data merge把它改成1。这样就可以捡起来了。但是最后发现似乎只要在判断是否包括对象的时候以nbt为判据就都没有反应。不知道是为什么。
例如:execute as @e[type=arrow] at @s if @s[nbt={pickup:0}] run data merge @s {pickup:1}
再如:execute as @e[type=arrow,nbt={pickup:0}] run data merge @s {pickup:1}
我已经试了好多种方式,应该不会有语法错误,至少控制台没有提醒错误,所以我很好奇问题到底出在哪里了。
其实我已经能通过其他方式实现类似功能:不使用if直接改pickup或是判断箭和玩家的距离再改pickup。但是因为是用命令方块循环执行,聊天窗口总是会一直刷(第一种方法是一有箭就一直刷,第二种是在离箭的某个距离内时一直刷),我又不想要关掉命令方块执行提醒,所以就没辙了
。
有没有大神能看看我的问题怎么解决,或者说是我弄错了什么?
例如:execute as @e[type=arrow] at @s if @s[nbt={pickup:0}] run data merge @s {pickup:1}
再如:execute as @e[type=arrow,nbt={pickup:0}] run data merge @s {pickup:1}
我已经试了好多种方式,应该不会有语法错误,至少控制台没有提醒错误,所以我很好奇问题到底出在哪里了。
其实我已经能通过其他方式实现类似功能:不使用if直接改pickup或是判断箭和玩家的距离再改pickup。但是因为是用命令方块循环执行,聊天窗口总是会一直刷(第一种方法是一有箭就一直刷,第二种是在离箭的某个距离内时一直刷),我又不想要关掉命令方块执行提醒,所以就没辙了

有没有大神能看看我的问题怎么解决,或者说是我弄错了什么?

execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}
xmdhs 发表于 2020-1-28 20:08
execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}
惊了,难道是这个b卡了我一天????我去试一下。

xmdhs 发表于 2020-1-28 20:08
execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}
刚刚试了一下,和我那种没加b的结果是一样的,没用欸。。。

dmz121 发表于 2020-1-28 20:14
刚刚试了一下,和我那种没加b的结果是一样的,没用欸。。。
你先看看到底箭矢的 pickup 是几
/execute as @e[type=minecraft:arrow] run data get entity @s pickup
然后
/execute as @e[type=arrow,nbt={pickup:0b}] run data merge entity @s {pickup:1b}
本帖最后由 dmz121 于 2020-1-28 20:34 编辑
老哥我用你的第一个代码查了发现,我自己射出去的可捡起的箭代码是2b。然后用你的第二个语句把1b改成2b就真的可以捡起小白的箭了。我都不知道为什么我今天下午改的那种代码为1的为什么也可以捡的起来了,人都傻了。总之谢谢了
xmdhs 发表于 2020-1-28 20:15
你先看看到底箭矢的 pickup 是几
/execute as @e[type=minecraft:arrow] run data get entity @s pickup
...
老哥我用你的第一个代码查了发现,我自己射出去的可捡起的箭代码是2b。然后用你的第二个语句把1b改成2b就真的可以捡起小白的箭了。我都不知道为什么我今天下午改的那种代码为1的为什么也可以捡的起来了,人都傻了。总之谢谢了

dmz121 发表于 2020-1-28 20:32
老哥我用你的第一个代码查了发现,我自己射出去的可捡起的箭代码是2b。然后用你的第二个语句就真的可以捡 ...
点下右下角的最佳。
创造模式射出的箭当然是 2b
然后选择器里最好把这个类型带上
xmdhs 发表于 2020-1-28 20:33
点下右下角的最佳。
创造模式射出的箭当然是 2b
刚刚试了一下放进命令方块里面咋就没用了,只有控制台输入有效,这是什么情况。。
dmz121 发表于 2020-1-28 20:56
刚刚试了一下放进命令方块里面咋就没用了,只有控制台输入有效,这是什么情况。。 ...
是运行这个命令
/execute as @e[type=arrow,nbt={pickup:0b}] run data merge entity @s {pickup:1b}
不应该的。。还是那句话,创造模式射出的箭矢的 pickup 是 2
xmdhs 发表于 2020-1-28 22:34
是运行这个命令
/execute as @e[type=arrow,nbt={pickup:0b}] run data merge entity @s {pickup:1b}
我已经弄好啦 应该是命令方块有什么小bug 我折腾一会就好了 谢谢啦