Minecraft最新最全指令教学17 /execute 2(PC1.15.2)
MJ_Hamster
编辑于 2020年03月24日 09:09
收录于文集
共22篇

耗子的指令课堂(17)

引导

在接下来的所有指令教学中,我会使用不同颜色的字强调不同种类的内容,方便大家阅读与查看。凡例:

深蓝色  标题

橙色      技术类文字

深绿色  专有名词

红色      强调

粉色      区分数字内容

紫色      范例

第二章  指令介绍

2.5  最强大的指令系统/execute

2.5.2  条件类子指令(1)

        从1.13开始,/testfor/testforblock这两条指令暴毙之后,所有条件类指令全部整合在了/execute中。条件类子指令有两种模式:if(如果)和unless(除非)。

        if代表如果符合条件检测成功,不符合检测失败;unlessif恰恰相反,不符合条件检测成功,符合则检测失败。当条件类子指令后面不写任何内容时,会在聊天栏或指令方块结果栏中显示结果。

(1)方块类

        a){if|unless} block {x y z} {方块}(方块状态)

        知识点:方块状态

        对于一些有方向等多种状态的方块,为了记录它的具体数据,我们使用方块状态对它们进行区别。方块状态的格式:

[状态名称=值]

        至于这个方块是否含有方块状态或者有哪些方块状态,可以按下F3进入技术界面,使用指针对准某个方块时,屏幕右侧“Targeted Block”(目标方块)会显示它的ID、属于的方块标签和方块状态与值。如图:

方块状态

        检测(x,y,z)位置的方块是否为你输入的方块或属于你输入的方块标签中的一个

        举例:检测(0,50,-15)的位置是否为南北朝向任意一种原木如果是,检测这个指令方块的比较器会输出讯号

        因为选择是会输出讯号,所以使用if语段。

        想要检测到任意一种原木,使用方块标签#logs代表任意一种原木。

        想要检测南北朝向,使用方块状态限制实体方块:[axis=z]。其中axis代表与原木朝向平行的坐标轴,南北方向当然是z轴

        把上面的内容拼在一起,可以得到:

        /execute if block 0 50 -15 #logs[axis=z]

        b){if|unless} blocks {x1 y1 z1} {x2 y2 z2} {x3 y3 z3} (all|masked)

        已知A(x1,y1,z1),B(x2,y2,z2),检测AB为体对角线的长方体空间内所有方块C(x3,y3,z3)为西北方向下方的顶点,尺寸与选定长方体相同的区域内所有方块是否相同。

        是不是比较难以理解?我们回到讲解/clone的部分,其中讲到了复制区域目标区域,这条指令的内容就是检测复制区域与目标区域空间内方块是否完全相同。不过我们不这么说,在这里把这两个区域称为“源区域”和“对照区域”。

        其中all表示源区域内所有方块都会检测,masked会无视源区域内的空气方块。不写默认为all,但后面还有内容时不可以省略。

        举例:已知两个大小相同的长方体区域:A(x=5..7,y=65..68,z=-12..-8)B(x=9..11,y=44..47,z=5..9)(这里使用了区间表示方式表示长方体空间)。如果A区域和B区域内的所有方块没有完全相同,那么会对离(0,60,0)最近的玩家劈下一道闪电

        首先,检测AB区域是否完全相同,不相同则执行成功:unless blocks 5 65 -12 7 68 -8 9 44 5 all

        然后执行在离(0,60,0)最近的玩家处生成一道闪电的指令,可以使用刚讲完的/execute相关内容。

        改变执行位置,选定最近的玩家处:at @p[x=0,y=60,z=0]

        执行生成闪电的指令:run summon lightning_bolt ~ ~ ~

        融合:run execute at @p[x=0,y=60,z=0] run summon lightning_bolt ~ ~ ~

        再融合:/execute unless blocks 5 65 -12 7 68 -8 9 44 5 all run execute at @p[x=0,y=60,z=0] run summon lightning_bolt ~ ~ ~

(2)实体类

        {if|unless} entity {实体}

        检测是否存在符合条件的实体。检测成功会返回符合条件实体的数量

        举例:一张地图的机关内容如下:当检测到有人完成进度“为什么会变成这样”将所有人传送到(15,35,-156)。循环型指令方块输入的指令是:

        首先,检测是否有完成进度“为什么会变成这样”的玩家,如果有执行指令:if entity @a[advancements={minecraft:nether/all_effects=true}]

        执行传送指令:run tp @a 15 35 -156

        将上面的内容拼在一起,可以得到:

        /execute if entity @a[advancements={minecraft:nether/all_effects=true}] run tp @a 15 35 -156

(3)NBT类

        此部分内容与NBT标签NBT路径有关。如果你忘记了,请进入传送门复习:

        a){if|unless} data block {x y z} {NBT标签或NBT路径}

        检测方块是否有特定的NBT标签或NBT路径。

        b){if|unless} data entity {实体} {NBT标签或NBT路径}

        检测实体NBT标签是否符合或是否存在特定的NBT路径

        NBT标签格式:{Invulnerable:1}

        NBT路径格式:Items[0].tag.Enchantments[2].lvl

        举例:设计机关:当玩家在位于(0,56,0),拥有自定义标签“Rename”,名字为“请命名填写答案”的猪上命名时,将最近玩家在记分板“Completed”的分数设为1

        原理:当生物被再次命名时,CustomName标签的值会改变。所以我们只要检测这只猪CustomName标签的值是否还是'{&#​34;text":&#​34;请命名填写答案"}&#​39;就可以判断它是否被命名过。

        首先,检测这只猪是否还是原来的名字,如果不是执行指令:unless data entity @e[x=0,y=56,z=0,type=pig,tag=Rename,limit=1] {CustomName: '{&#​34;text":&#​34;请命名填写答案"}&#​39;}(需要注意的是,这里必须限制数量1,否则会执行失败,因为这条指令的目标只能是1个

       改变执行指令的位置:猪的位置 (positioned) as @e[x=0,y=56,z=0,type=pig,tag=Rename,limit=1]

        执行记分指令:run scoreboard players set @p Completed 1

        将上面内容拼在一起,在红石控制循环型指令方块中执行:

        /execute unless data entity @e[x=0,y=56,z=0,type=pig,tag=Rename,limit=1] {CustomName: '{&#​34;text":&#​34;请命名填写答案"}&#​39;} (positioned) as @e[x=0,y=56,z=0,type=pig,tag=Rename,limit=1] run scoreboard players set @p Completed 1

        同时在受制约的连锁指令方块输入将给循环方块充能的红石块替换成空气的指令,确保机关触发之后立刻停止机关。

下一篇:第二章 指令介绍 2.5 最强大的指令系统/execute(第三部分)