dmz121
今天想在服务器里面通过命令方块使得掉在地上的箭都可以拾取。我一开始的思路是:判断箭的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。但是因为是用命令方块循环执行,聊天窗口总是会一直刷(第一种方法是一有箭就一直刷,第二种是在离箭的某个距离内时一直刷),我又不想要关掉命令方块执行提醒,所以就没辙了

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

xmdhs
execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}


dmz121
xmdhs 发表于 2020-1-28 20:08
execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}

惊了,难道是这个b卡了我一天????我去试一下。

dmz121
xmdhs 发表于 2020-1-28 20:08
execute as @e[type=arrow,nbt={pickup:0b}] run data merge @s {pickup:1b}

刚刚试了一下,和我那种没加b的结果是一样的,没用欸。。。

xmdhs
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
本帖最后由 dmz121 于 2020-1-28 20:34 编辑
xmdhs 发表于 2020-1-28 20:15
你先看看到底箭矢的 pickup 是几
/execute as @e[type=minecraft:arrow] run data get entity @s pickup
...

老哥我用你的第一个代码查了发现,我自己射出去的可捡起的箭代码是2b。然后用你的第二个语句把1b改成2b就真的可以捡起小白的箭了。我都不知道为什么我今天下午改的那种代码为1的为什么也可以捡的起来了,人都傻了。总之谢谢了

xmdhs
dmz121 发表于 2020-1-28 20:32
老哥我用你的第一个代码查了发现,我自己射出去的可捡起的箭代码是2b。然后用你的第二个语句就真的可以捡 ...

点下右下角的最佳。

创造模式射出的箭当然是 2b

然后选择器里最好把这个类型带上

dmz121
xmdhs 发表于 2020-1-28 20:33
点下右下角的最佳。

创造模式射出的箭当然是 2b

刚刚试了一下放进命令方块里面咋就没用了,只有控制台输入有效,这是什么情况。。

xmdhs
dmz121 发表于 2020-1-28 20:56
刚刚试了一下放进命令方块里面咋就没用了,只有控制台输入有效,这是什么情况。。 ...

是运行这个命令
/execute as @e[type=arrow,nbt={pickup:0b}] run data merge entity @s {pickup:1b}

不应该的。。还是那句话,创造模式射出的箭矢的 pickup 是 2

dmz121
xmdhs 发表于 2020-1-28 22:34
是运行这个命令
/execute as @e[type=arrow,nbt={pickup:0b}] run data merge entity @s {pickup:1b}

我已经弄好啦 应该是命令方块有什么小bug 我折腾一会就好了 谢谢啦

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