SDchao
如何探测所有未落地的箭?

Deing
testfor @e[type=Arrow] {inGround:0b}
这个放到指令方块里接比较器即可

SDchao
Deing 发表于 2016-1-4 22:31
testfor @e[type=Arrow] {inGround:0b}
这个放到指令方块里接比较器即可

如果用execute呢?

Deing

由于execute不能接数据值(就是{inGround:0b}这个),所以用execute不能探测落地的箭。必须用testfor。
并且一般的探测用testfor和execute区别不是很大,实在想让某实体来探测的话可以用execute @p ~ ~ ~ testfor……

SDchao
Deing 发表于 2016-1-4 22:37
由于execute不能接数据值(就是{inGround:0b}这个),所以用execute不能探测落地的箭。必须用testfor。
...

我主要想在所有飞行的箭上生成粒子效果,怎么办?

Deing
我chao爱MC 发表于 2016-1-4 23:49
我主要想在所有飞行的箭上生成粒子效果,怎么办?

你怎么不早说。。。
那样就用execute @e[type=Arrow] ~ ~ ~ detect ~ ~-1 ~ air 0 particle ....
这样可以探测箭的下方一格是否是空气,不是空气就肯定不在空中。
虽然说这样一来,如果箭是射到了墙上,也会判定下方一格是空气,所以这时候你就需要再做几个高频指令,把detect后边改成 ~ ~ ~1 air 0这样的。这五个指令同时进行探测,然后都接比较器到一个5与门,只有它们都探测成功的时候,才执行execute @e[type=Arrow] ~ ~ ~ detect ~ ~-1 ~ air 0 particle ....给那个箭粒子效果。。。。。似乎说的有点乱,不造你懂了没有。总之如果你能确定箭不会射到墙上,就会方便很多
还有如果你能确定箭要通过的区域也可以直接execute @e[x,y,z,r,type=Arrow] ....,但这样可能不够格精确

hqqaazz
不用那么麻烦。
  1. /scoreboard objectives add arrow dummy
复制代码

首先设定一个计分板,然后以下三条指令都需要高频:
  1. /scoreboard players set @e[type=Arrow] arrow 1 {inGround:0b}
复制代码
  1. /execute @e[type=Arrow,score_arrow_min=1] ~ ~ ~ /particle witchMagic ~ ~ ~ 0.1 0.2 0.1 0.5 5
复制代码
  1. /scoreboard players set @e[type=Arrow] arrow 0 {inGround:1b}
复制代码


没有射到墙上还有特效的问题。

机器人WBW
好吧,我尽量给简单的方法
其实6楼的是比较简单的方法了,讲的很详细,这里简化
  1. execute @e[type=Arrow] ~ ~ ~ detect ~ ~-1 ~ air 0 /particle witchMagic ~ ~ ~ 0.1 0.2 0.1 0.5 5
复制代码

高频此指令
这条指令就是让箭当下面方块是空气时就可以放粒子效果
缺点就是当下面是别的透明方块就会失效

更复杂的是运用计分板可以标记指定nbt实体
1.8的方法差不多就是7楼的了
1.9因为新来的tag,可以更简单
[code]

机器人WBW
林扬骐 发表于 2016-1-5 20:00
好吧,我尽量给简单的方法
其实6楼的是比较简单的方法了,讲的很详细,这里简化

不好意思居然不小心发了
1.9版本的tag会更简单
/scoreboard players tag <player> <add|remove|list> <tagName> [dataTag]

于是乎可以这样的高频循环做到
1.给所有在地上的箭加fly的tag标签(因为落到地上后一般不会再飞起,可以省掉去掉tag的部分)
  1. /scoreboard players tag @e[type=Arrow] add fly {inGround:1b}
复制代码

2.
  1. /execute @e[type=Arrow,tag=!fly] ~ ~ ~ /particle witchMagic ~ ~ ~ 0.1 0.2 0.1 0.5 5
复制代码

两条即可

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