首页 男生 游戏竞技 Minecraft指令手册

第八十九章 ride-骑乘

Minecraft指令手册 你好MC 5203 2024-07-09 15:29

  (该章节已于2022年7月25日重写,原章节为『战利品表(战利品表下)(/loot 下)』)

  我们知道,在Minecraft中,玩家可以骑上马,骷髅可以骑上蜘蛛,僵尸可以骑上鸡......但不管怎样,我们都很难使用指令来控制实体的骑乘状态。在Java版这尚且可以通过NBT做到,但在基岩版呢?基岩版可用不了NBT。

  好消息是,基岩版虽然用不了NBT,但Mojang却给了我们一条指令:

  /ride

  作用:控制实体骑乘

  存在版本:基岩版1.16.100-今

  需要权限等级:基岩版-1

  需要作弊:是

  格式:

  /ride <骑手实体>...

  ... start_riding <坐骑实体>[传送模式][骑乘建立要求]

  \\使得指定的骑手骑在指定的坐骑上\\

  ... stobr /_riding

  \\使得指定的骑手停止骑乘\\

  ... summon_ride <实体ID>[召唤要求][生成事件][实体名称]

  \\给骑手召唤一个坐骑,让骑手骑上去\\

  /ride <坐骑实体>...

  ... evict_riders

  \\使得指定的坐骑逐出它们的骑手\\

  ... summon_rider <实体ID>[生成事件][实体名称]

  \\给坐骑召唤一个骑手,让召唤出来的骑手骑在坐骑上\\

  通过/ride指令,你可以指定实体骑或被骑在某些实体身上。让我们来试一试:

  /ride @s start_riding @r[tybr /e=horse]

  这条指令将会使你随机骑在某一匹马的身上。等等,@r不是用来随机选择玩家的吗,怎么能够拿来随机选择马?

  @r确实是用来随机选择玩家的,但在除了Java1.13及以上版本之外,其他版本的@r都可以通过指定tybr /e参数来具体随机指定种类的实体。在上面的例子中,由于我们指定了tybr /e参数为马,所以@r[tybr /e=horse]在这边就是随机选择一匹马。

  运行上述指令后,你虽然骑在了马身上,但同时也被传送了,毕竟游戏总不可能让你隔空骑马吧?但有时候可能你并不想被传走,而是想让那匹马自己过来,这时候该怎么办?

  指定『传送模式』参数。这个参数可以填写两个值:

  telebr /ort_ride——将坐骑传送至骑手

  telebr /ort_rider——将骑手传送至坐骑(默认)

  举个例子:

  /ride @s start_riding @r[tybr /e=horse] telebr /ort_ride

  这条指令将会随机一匹马传送到你下面,然后让你骑在它的身上。

  『骑乘建立要求』这个参数适用于当你指定多个骑手时的情况,它可以填写两个值:

  if_groubr /_fits——当所有骑手都满足骑乘要求时才会建立骑乘关系

  until_full——给每一个满足骑乘要求的骑手建立骑乘关系(默认)

  举个例子:

  /ride @e start_riding @r[tybr /e=chicken] telebr /ort_rider if_groubr /_fits

  /ride @e start_riding @r[tybr /e=chicken] telebr /ort_rider until_full

  假设现在有三个实体:你自己、一只成年僵尸、一只鸡。运行第一条指令,将不会发生什么,因为你不可能骑在鸡上面,鸡也不能骑在自己上面,@e选中的三个骑手中有两个不满足要求,自然僵尸也不会骑上去。运行第二条指令,僵尸就会骑到鸡的上面,因为虽然你和鸡都不满足要求,但僵尸满足了要求,自然就和鸡建立起了骑乘关系。(你干嘛~哎哟)

  这个僵尸还有用,让我们把它从鸡上弄下来:

  /ride @e[tybr /e=zombie] stobr /_riding

  summon_ride子命令可以直接生成一个实体作为坐骑,当然,如果骑手不符合被生成实体的骑乘要求,那么实体即使被召唤出来也不会被骑乘,仅仅只会单纯生成出来。还是以刚才的条件,举个例子:

  /ride @e[tybr /e=zombie] summon_ride minecraft:boat

  这将会给那位僵尸生成一艘船,然后让它坐进去。

  『召唤要求』参数可以填写三个值:

  skibr /_riders ——仅仅为没有坐骑的骑手召唤坐骑

  no_ride_change ——仅仅为没有坐骑且也没有被骑乘的骑手召唤坐骑

  reassign_rides——为所有骑手召唤坐骑(默认)

  举些例子:

  /ride @e summon_ride minecraft:boat skibr /_riders

  /ride @e summon_ride minecraft:boat no_ride_change

  /ride @e summon_ride minecraft:boat reassign_rides

  还是以上面的情况为条件。如果我们运行了第一条指令,游戏将会尝试给玩家(你自己)、鸡和船召唤坐骑,僵尸由于已经有一个船作为坐骑所以不会尝试召唤。

  如果我们运行第二条指令,游戏将会仅给玩家和鸡召唤船作为坐骑。僵尸由于已经有坐骑、船由于被僵尸骑乘,所以两者都不会尝试召唤坐骑。

  如果我们运行第三条指令,游戏将会给所有实体都尝试召唤坐骑。

  当然,不管你运行的是上面哪条指令,最终结果都是你和鸡会坐上船,僵尸和僵尸的船不会发生变化。因为僵尸已经有一个船作为坐骑,再召唤的话,僵尸的新坐骑必定会插入到僵尸和船之间,骑着船也被僵尸骑,也就是得满足两个实体的骑乘要求。而船肯定不会被船骑乘,也不会骑着一个船,所以僵尸和船都不会发生变化。

  evict_riders子命令可以使坐骑赶走自己的骑手:

  /ride @e evict_riders

  这将会使得所有实体赶走自己的骑手,也就是让你、鸡和僵尸都从船上下来。然后你就可以把船回收一下。

  summon_rider子命令可以为一个坐骑生成骑手,举个例子:

  /ride @e[tybr /e=zombie] summon_rider minecraft:zombie

  仍然以上面的情况为条件,这条指令将会给那只僵尸生成一只新的僵尸,然后让新的僵尸骑在老的僵尸上面。

  值得注意的是,由于成年僵尸也可以像幼年僵尸一样骑在成年僵尸上,这就给了我们一条途径在基岩版弄叠罗汉:

  /ride @e[tybr /e =zombie] summon_rider zombie minecraft:as_adult

  这将会给让所有僵尸尝试生成一个新的成年僵尸作为自己的骑手,然后.......你重复运行下试试?

  这就是/ride指令的基本用法,也就是本章的全部内容。

  附表:/ride历史

  基岩版

  1.16.100——加入了/ride

  ......

  ......

  ......

  ......

  ......

  ......

  ......

  ......

  ......

  自然生成的僵尸,有5%的概率生成出一只幼年僵尸。幼年僵尸不可被成年僵尸骑乘,因此当指令『/ride @e[tybr /e=zombie] summon_ride zombie』在目标选择器『@e[tybr /e=zombie]』只选择到一个僵尸的情况下生成出一只幼年僵尸时,指令将执行失败,返回的成功次数为0。

  也就是说,上述指令有5%的概率执行失败。我们可以造一个命令模块验证一下这5%的概率:

  (指令版本:基岩版1.19,未开启实验性功能)

  A→B→C→D→E→F→G→

  A[重][无][红]······ride @e[tybr /e=zombie,name=a] summon_ride zombie reassign_rides minecraft:entity_sbr /awned

  B[链][限][始]······scoreboard br /layers add count test 1

  C[链][无][始]······ride @e[tybr /e=zombie,name=a] stobr /_riding

  D[链][无][始]······execute @e[tybr /e=zombie,name=a]~~~ kill @e[tybr /e=zombie,r=6,name=!a]

  E[链][无][始]·······execute @e[tybr /e=zombie,name=a]~~~ kill @e[tybr /e=item]

  F[链][无][始]·······scoreboard br /layers add times test 1

  G[链][无][始]······tbr / @e[tybr /e=zombie,name=a]-16 -60 0

  \\图例\\

  [重]重复;[无]无条件;[红]需要红石;[脉]脉冲;[限]有条件的;[始]始终活动;[链]连锁

  \\使用到的计分项\\

  test

  \\使用到的变量\\

  count(指令成功次数)、times(指令执行次数)

  上面的模块会不断重复执行『ride @e[tybr /e=zombie,name=a] summon_ride zombie reassign_rides minecraft:entity_sbr /awned』这条指令,并计算出指令的成功次数和执行次数。经过运行,加上一点儿人工计算,就可以得到以下数据:

  执行1784次,成功1699次,差值85,失败概率约4.76%

  执行10000次,成功9488次,差值512,失败概率约5.12%

  可见,概率差不多就是5%。

  为什么我要提这东西呢?

  /ride作为一个使得玩家能够控制实体骑乘的指令,竟然能够因为这个特性而用于概率计算中,挺令人惊讶的是不是?但其实,不管是对于指令还是隔壁红石来说,能够巧妙运用游戏本身的特性,就是进阶玩家的基本要求。/ride只是一个例子,像这样的例子还有很多。特别是在基岩版,由于指令自由度没有Java版高,这迫使得许多基岩版的指令玩家大显神通,通过许多看起来十分取巧的方法实现许多看似不可能实现的功能,这边举几个例子:

  ①通过玩家攻击隐形盔甲架来实现点击牌子、点击村民NPC的效果

  ②通过tell指令能够使用目标选择器的特性,在tell指令中塞入大量的@e目标选择器并发送给指定玩家,来使得指定玩家游戏卡死以实现封禁的效果

  ③在Java1.13版本前,由于没有能够读取NBT数据的指令,因此当时普遍的方法是通过选取具有特定NBT标签值的实体并给予指定标签或分数,并使用穷举的方法来实现读取NBT数据的功能

  ④通过testforblocks指令比较命令方块,来实现检测物品和玩家名是否一致

  所以,有时候当你想实现一个功能时却不知道怎么实现,不妨放开脑洞,想一想一些指令的特性,或许你就有了思路!

  本章到此完全为止。

目录
设置
手机
书架
书页
评论