那么到底是个怎么个逻辑法呢?其实在Java1.13前,execute并不会在运行前先存好各种数据,而是运行一遍解析一遍。以上面那个嵌套了3层execute的指令为例子,我们来解析一下。
条件:初始两个实体A(1,2,1)和B(2,2,2),A比B离执行地点更近。
execute---A----------B
------------↓
----------1·2·1
游戏先解析第一个『execute @e ~~~』,得到了上面的结果。后面我们将会忽略执行地点,因为这边不需要考虑执行地点的影响。
execute---A----------B
------------↓
---------A——B
游戏按照顺序,先以A为执行者运行指令,并解析了第二个『execute @e ~~~』,得到了上面的结果。
execute---A----------B
------------↓
---------A——B
---------↓
------A——B
游戏按照顺序,再次以A为执行者运行指令,并解析了第三个『execute @e ~~~』,得到了上面的结果。
execute---A----------B
------------↓
---------A——B
---------↓
------A——B
------↓-----↓
------C-----D
第三个execute运行指令,产生了新的盔甲架C和D。
execute------A----------B
---------------↓
---------A————B
---------↓---------↓
--------+2---B—A—C—D
游戏回到第二层execute,以目标选择器顺序选取B为执行者,由于之前已经生成了C和D,所以B运行第三层execute指令时,会选取到4个实体来运行指令,最终实体数量+4(现在为8=2+2+4)。
execute---A-----------------B
------------↓-----------------↓
----------+6----B—A—C—D—E—F—G—H
游戏回到第一层execute,以目标选择器顺序选取B为执行者。由于已经有了八个实体,因此这一次第二层execute会选取到八个实体来运行第三层execute。
execute---A-------------------------B
------------↓-------------------------↓
----------+6----B——A——C——D———E———F———G———H
-----------------↓-----↓-----↓-----↓-------↓-------↓-------↓-------↓
--增加实体数---+8--+16--+32-+64--+128--+256---+512--+1024
--增加后数量----16---32---64---128----256---512----1024---2048
随后,游戏按照顺序依次以这八个实体运行指令,实体数量在此过程中快速增长,最终变为2048。
不难发现,每一次第三层的execute指令被运行,都会将当前实体数量×2,而上面一共运行了10次第三层的execute,相当于2被乘以了10次2,也就是2×2×2×2×2×2×2×2×2×2×2,即2的11次方,结果为2048,即2048个实体。
实在是太令人惊讶了是不是?在Java1.13以下的execute指令中,execute仅仅会在被选取的执行者开始执行指令时才会进行下一步的解析动作,而且不会一下子就将所有执行者运行指令的情况全部解析出来再运行指令。
所以,Java1.13对execute的改动不仅仅是格式上的,还有运行流程上的改动。
如果你并不能很好理解上面为什么会由2个实体产生出2048个实体,别担心,我们继续以刚才两个盔甲架互相传送为例子,看看类似的指令在Java1.13以下的版本有何不同的效果。
还是设有盔甲架A和B,分别位于主世界的(40,60,29)和(42,60,29)。盔甲架A的比盔甲架B更靠近执行地点,已加载区块中没有其他盔甲架。在盔甲架A、B旁运行如下指令:
本小章还未完,请点击下一页继续阅读后面精彩内容!
喜欢Minecraft指令手册请大家收藏:(m.2yq.org)Minecraft指令手册爱言情更新速度全网最快。