/execute if blocks ~-1 ~-1 ~-1 ~1 ~-1 ~1 ~-1 ~2 ~-1 all
这个1.13+版本的指令和上面的testforblocks例子的效果是完全一样的,唯一需要注意的是比较模式参数从可选变成了必选,并且由于testforblocks默认就是all比较模式,所以转化后要在最后加上个『all』。
你可能会疑惑:run呢?run子命令呢?我那么大一个run呢?
其实,当一个execute指令中含有条件子命令时,就不一定要含有run子命令了。因为条件子命令也可以看做是一个具有功能的,能够返回东西的指令(毕竟原来就是由几条单独指令结合在一起的嘛)。
例子三:
/execute as @a at @s if block ~~-1 ~ redstone_block run camerashake add @s
这条指令并不适用于Java版,而是适用于基岩版。
没错,这个例子是使用目前基岩版还在测试中的新版execute指令写成的,不难发现基岩版的新版execute和Java版的几乎没差别。
这条指令的作用是:
将所有玩家分别作为执行者,将执行者的位置作为执行位置,将执行者的旋转角度作为执行朝向,如果执行位置下方一格方块(玩家脚底下的方块)是红石块,就摇晃玩家的镜头(站久就变鬼畜了)。
其中,指令camerashake是基岩版目前较为冷门的一个指令,因为是新添加的所以还有许多人不太了解。其实基岩版在1.16版本时添加了许多有用的指令,以后可能会专门抽出来几章讲一讲。
既然说到了基岩版的新版execute,那就不妨来看看基岩版的条件子命令格式和Java版有何不同:
... if|unless block <坐标><方块ID>[方块数据值|方块状态]...
看看,基岩版做得多么人性化,不一定要填写的参数就不一定要填写,一定要填写的参数就一定要填写,在这一方面Java版的if blocks就做得不好,为什么一定要填写『比较模式』呢?
现在,block、blocks和entity三条子命令我们都会用了,接下来我们来看看score:
<比较模式>...
matches <范围>...
虽然score是用来替代scoreboard players test的,但这个格式第一眼给人的感觉却像是另外一个东西:scoreboard players operation
但这两个东西有很大的区别——前者(score)仅仅是对比分数,并不会修改两个分数;后者(scoreboard players operation)虽然也可以对比,但更多的作用是修改分数。
而且,score可比scoreboard players operation要简单多了,因为你并不需要考虑A新A旧,以及有多个比较目标的情况,其中的目标选择器都只能选取一个目标(看来Mojang还是很人性化的对不对?)。
让我们来仔细看看上面的格式,可以发现相比scoreboard players test,新的score不仅仅可以用来测试单个分数,还可以比较两个分数。
其中,前面部分的『A目标』『a计分项』两个参数,以及后面的『B目标』『b计分项』两个参数,就不需要我多说了吧?前者是用于指定『式子』的左侧分数x,后者是用于指定『式子』的右侧分数y。
中间部分的『比较模式』参数,也就是填写在数学上大名鼎鼎的五个符号:
本小章还未完,请点击下一页继续阅读后面精彩内容!
>——如果分数x大于分数y,则为真
>=——如果分数x大于等于分数y,则为真
=——如果分数x等于分数y,则为真
<=——如果分数x小于等于分数y,则为真
<——如果分数x小于分数y,则为真
举个例子:
/scoreboard objectives add death deathCount “死亡榜“
/scoreboard objectives add duibi dummy “分数对比专用“
/scoreboard players set many_dead_times duibi 50
/execute as @a if score @s death >= many_dead_times duibi run tellraw @s [{“text“:“兄弟,你已经死了“},{“score“:{“name“:“@s“,“objective“:“death“},“color“:“red“},{“text“:“次了!“,“color“:“reset“}]
前面的三条指令就不多讲了,你应该知道是干什么的。最后一条execute指令,将会让所有玩家分别作为执行者,如果其死亡次数(death计分项中的分数)大于等于50(也就是many_dead_times这个假玩家在duibi计分项中的值),玩家自己就会收到一条消息:
兄弟,你已经死了x次了!
其中,x指的是这名玩家在计分板death上的分数,也就是他死亡的次数。
除去这个tellraw内的JSON文本有一部分我们没学过以外,其他部分还是很容易理解的。
至于matches模式的比较就更简单了,这就是原本players test子命令的功能。其中的『范围』也就是采用和目标选择器一样的『两点法』。举个例子:
/execute as @a if score @s death matches 50.. run 同上