看起来很复杂的样子,但我们只需要使用『流水线思维』,拆开来逐个分析即可。
假设我们使用一个位于主世界(1,25,1)处的命令方块运行此指令(聊天框装不下这么长的指令):
At First
→无、(1,25,1)、主世界、(0°,0°)、feet
as @e[limit=13,sort=nearest]
→距离命令方块最近的实体、(1,25,1)、主世界、(0°,0°)、feet
→距离命令方块第二近的实体、(1,25,1)、主世界、(0°,0°)、feet
→距离命令方块第三近的实体、(1,25,1)、主世界、(0°,0°)、feet
......
→距离命令方块第13近的实体、(1,25,1)、主世界、(0°,0°)、feet
at @s
→距离命令方块最近的实体、距离命令方块最近的实体的位置、主世界、距离命令方块最近的实体的旋转角度、feet
......
rotated 360 -45
→距离命令方块最近的实体、距离命令方块最近的实体的位置、主世界、(0°,-45°)、feet
......
注:大多数情况下,当水平旋转角度为360°的倍数时,游戏会将其转化为0°。
anchored eyes
→距离命令方块最近的实体、距离命令方块最近的实体的位置、主世界、(0°,-45°)、eyes
......
facing entity @e[limit=1,sort=nearest,distance=0.1..] feet
→距离命令方块最近的实体、距离命令方块最近的实体的位置、主世界、距离命令方块最近的实体用眼睛看向距离它最近实体的脚的朝向、eyes
......
align yzx
→距离命令方块最近的实体、距离命令方块最近的实体的xyz轴向下取整的值(整数会保留)、主世界、距离命令方块最近的实体用眼睛看向距离它最近实体的脚的朝向、eyes
......
in minecraft:the_end
→距离命令方块最近的实体、距离命令方块最近的实体的xyz轴向下取整的值(整数会保留)、末地、距离命令方块最近的实体用眼睛看向距离它最近实体的脚的朝向、eyes
......
positioned 1 24 1.0
→距离命令方块最近的实体、(1.5,24.0,1.0)、末地、距离命令方块最近的实体用眼睛看向距离它最近实体的脚的朝向、eyes
本小章还未完,请点击下一页继续阅读后面精彩内容!
......
if predicate snow_king:0.3
解释如下:如果谓词条件『snow_king:0.3』通过,即运行指令
其中,谓词条件『snow_king:0.3』是数据包雪王(Snow King)中的一个谓词条件(没错,就是那个『蜜雪冰城甜蜜蜜』的那个数据包),这个条件会随机一个0到1的浮点数(类似于小数),如果随机的数小于0.3就算条件通过,即运行这条指令有30%的概率。
什么是谓词条件呢?在我们讲数据包之前(也有可能永远不会讲到),你可以将这东西当作是一个打包好的『判断函数』,在这个『判断函数』里面写了一些东西,可以判断当前游戏的情况是否符合指定的条件,如果符合则通过判断,如果不符合则不通过判断。比如里面写了一个『当前游戏正在下雨』的条件,当这个条件被调用时就会看看现在游戏是否在下雨,如果下雨就会通过判断,你的指令也就能够运行,反之就不会运行。
当然,你只需要在目标选择器或execute指令中通过这个谓词的命名空间ID来调用即可使用这个谓词了。只不过可惜的是,原版并没有任何的谓词条件,这谓词是专门给数据包用的东西。
run tp @s ^^^
最多运行13次指令,分别以距离命令方块最近的实体、距离命令方块第二近的实体、第三近的实体......为执行者,(1.5,24.0,1.0)为执行坐标,末地为执行维度,执行者用眼睛看向距离它最近实体的脚的朝向作为执行朝向,eyes作为朝向基准部位。将执行者传送至(1.5,24.0,1.0),并将其旋转角度更改为执行朝向的旋转角度。
这样分析下来,是不是就清楚了许多?所以说不要慌张,这种东西仅仅只是纸老虎而已。
如果你已经是一个对NBT和方块状态较为了解的人,或许你还可以看看第三条:
(实际上这有两条指令)
/execute as @e[type=arrow,nbt={inGround:1b},tag=!used] at @s align xyz run summon falling_block ~~6 ~{Time:1,BlockState:{Name:“redstone_block“},Passengers:[{id:“falling_block“,Time:1,BlockState:{Name:“activator_rail“},Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~~1 ~ mand_block[facing=east]{Command:\“/execute positioned ~~-2 ~ at @e[type=item,distance=..5] run setblock ~~-1 ~ diamond_block\“,auto:1}“,Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~1 ~1 ~ chain_mand_block[facing=east]{Command:\“/execute positioned ~-1 ~-2 ~ as @e[type=item,distance=..5] run kill @s\“,auto:1}“,Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~2 ~1 ~ chain_mand_block[facing=east]{Command:\“/execute positioned ~-2 ~-2 ~ as @e[type=arrow,distance=..5] run kill @s\“,auto:1}“,Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~3 ~1 ~ chain_mand_block[facing=east]{Command:\“/execute positioned ~-3 ~-1 ~ run kill @e[type=mand_block_minecart,distance=..2]\“,auto:1}“,Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~4 ~1 ~ chain_mand_block[facing=east]{Command:\“/fill ~-4 ~~~-4 ~-2 ~ minecraft:air\“,auto:1}“,Passengers:[{id:“mand_block_minecart“,Command:“/setblock ~5 ~1 ~ chain_mand_block[facing=east]{Command:\“/fill ~~~~-5 ~~ minecraft:air\“,auto:1}“}]}]}]}]}]}]}]}
/tag @e[type=arrow,nbt={inGround:1b},tag=!used] add used
这是一个作者自己写的十分典型的OOC指令,关于什么是OOC我们已经在第六十二章讲命令方块矿车时遇到过了,即『仅有一条指令』。虽然我们在那一章已经讲过了OOC的原理,但这是我们第一次在本书中遇到真正的OOC指令。很长是不是?但其实它是由多个指令,通过实体NBT的形式套娃而成的,其中用到了大量的execute指令。
如果你对此感兴趣,可以尝试拆分一下这一大串指令,猜一猜这是干什么的。我们会在之后具体讲到OOC时讲解这一大串指令。
那么本章就到此结束了。