这是上面例子的简化版,功能还是一样的。
值得注意的是,在基岩版中,『两点法』可以使用!来反选。比如:
/execute if score @s death matches !10..15
这将会测试执行者自己在death计分板上的分数,如果分数不在10~15(含)的范围内就会测试通过。同样的,基岩版在其他能用到这种『两点法』的地方基本上也能够用『!』来反选,比如目标选择器。
最后,我们来看看前一章节就已经碰到过的predicate子命令:
... if|unless predicate <谓词条件ID>...
什么是谓词?我在上一章已经解释过了:
『在我们讲数据包之前(也有可能永远不会讲到),你可以将这东西当作是一个打包好的『判断函数』,在这个『判断函数』里面写了一些东西,可以判断当前游戏的情况是否符合指定的条件,如果符合则通过判断,如果不符合则不通过判断。比如里面写了一个『当前游戏正在下雨』的条件,当这个条件被调用时就会看看现在游戏是否在下雨,如果下雨就会通过判断,你的指令也就能够运行,反之就不会运行。』
举个简单的例子,假设有一位大佬做了一个数据包,其命名空间为『the_dark_forest』,里面有一个叫做『isRaining.json』的谓词条件。这个条件会判断当前世界是否在下雨,如果下的是普通的雨,就随机50%的几率使条件成立,如果下的是暴雨,这个几率会提升到80%。
我们可以通过如下命令来调用这个谓词条件:
/execute ... if predicate the_dark_forest:isRaining ...
如果你调用这个谓词条件时,游戏里正在下普通的雨,那么你的指令就有50%的几率能够运行。如果下的是雷暴雨,那么就有80%的几率会运行。如果是晴天,那么不可能会运行。
当然,你也可以将if改为unless来反转条件:
/execute ... unless predicate the_dark_forest:isRaining ...
这条指令和上面指令的运行条件完全是反着来的:如果是晴天,那么必定会运行;如果是普通的雨天,有50%的几率会运行;如果是雷暴雨,只剩下20%的几率会运行。
现在你懂了吧?让我们来做几道题目,巩固一下知识。
第一题:请写出下列execute指令成功运行的条件
本小章还未完,请点击下一页继续阅读后面精彩内容!
①/execute as @e[type=item] at @s if block ~~-1 ~ minecraft:grass_block run kill @s
②/execute positioned 1.0 1.0 1.0 if block ~~~ minecraft:air if entity @e[distance=..2,limit=1,sort=nearest]
③/execute unless blocks ~1 ~1 ~1 ~-1 ~1 ~-1 0 0 0 all
第二题:请写出下列execute指令最大的成功运行次数
①/execute as @e[limit=10] rotated as @a[limit=10] run tp 1 1 1
②/execute if predicate the_dark_forest:isRaining
③/execute if score @e = score @e run say hello!
所以这就是我们本章的全部内容,下一章我们将会来初步了解一下存储子命令。
......
......
......
......
......
......
参考答案
第一题:
①所有维度的已加载区块内必须要有掉落物类型的实体,且至少有一个掉落物的下方方块是草方块
②坐标(1.0,1.0,1.0)处的方块必须是一个空气方块,且范围2米内必须要有一个实体存在。
③执行地点上方3×3的范围与范围(0,0,0)-(3,0,3)完全一致,且执行地点上方3×3的范围没有超出世界边界
第二题:
①100(as的参数指定了10个实体,rotated的参数也指定了10个实体)
②1(跟if子命令没关系)
③0(在Java版中,score子命令的两个目标选择器参数都不能指定多个实体)或1(在基岩版中,只要@e实际只选择到了1个实体就行)