连续的执行者转移当一个实体在同一个命令中被多次execute时,按照执行解析的顺序来决定最后它会拥有怎么样的结果。例如,现在场上有两个tag为test的实体,在聊天框里执行此命令:
execute @e[tag=test] ~ ~ ~ execute @e[tag=test,c=-1] ~ ~ ~ testfor @e[tag=test]
首先被执行到的是execute @e[tag=test] ~ ~ ~这一层。你在这一层收获了2的SuccessCount和2的AffectEntity,执行者转移到两个带有tag的实体身上;
第二步被执行的是execute @e[tag=test,c=-1] ~ ~ ~这一层。这两个实体在这一层收获了……且慢。
mc对execute的执行规则很有意思。如果你看过pca那个execute*4炸电脑的帖子,应该理解难度会小上很多。
为了方便描述,我们给这两个实体分别起个名字:按照选择到的顺序分别叫它们a和b。
这条命令的实际执行逻辑是这样的:
你选择了a和b;a选择了b;b执行了testfor;b选择了a;a执行了testfor。
它就像一棵树,会在每一条链执行结束的时候退回到上一个分支点,然后跟着这一条分支继续执行,直到所有的分支尽数走完为止。
这里附上pca那个帖子
http://www.mcbbs.net/thread-630291-1-1.html,可以作为对execute和执行者转移带来影响的深一层思考。
当execute链中任意一环选择不到目标的时候,这一条execute链就会中断。依旧是举例:
execute @e[tag=a] ~ ~ ~ execute @e[tag=b,c=1,r=0] ~ ~ ~ ...
一个在检测同一个实体多tag的时候常用到的小手段,实用性还是挺高的。这时候可能被加载的区块里面有不止一个拥有a这个tag的实体,但是由于第二个选择器的目标转移(c=1,r=0一般在不考虑tp的情况下仅会选择到自己),只有当自身拥有tag b的时候,后续的命令才会被执行;如果没有,那么基于这个拥有tag a的实体的execute就中断了,后续命令也就不会发生。但是这并不影响到其它拥有tag a的实体——试想前文树的比喻,你砍断了一根分支,其余的分支依旧健全。