跳转到内容

第七章 指令的格式与指令执行的三要素

2020年1月4日 14:38 2098字
(本章的指令并不是原版真实存在的指令,而是作者瞎编的。)
  在学习指令之前,你还得了解一下指令格式的语法,不然到时候看不懂格式别怪我。
  Minecraft 官方的指令格式有六种术语、三种括号(基岩版是两种)。一种是 <>(安卓客户端会乱码,建议用网页版或IOS客户端,不然接下来你怎么看指令格式啊?),另一种是 [],还有一种是 ()。注:这是唯独阅文集团旗下应用,如起点读书、QQ 阅读等会出现的问题,在 MineBBS 上阅读本书不会遇到该问题。
  具体的内容如下:
  • 纯文本-照着写即可(如 /server info 中的 info 参数)
  • <参数描述> - 必填,根据括号内对参数的描述填写(如 /name <玩家>中的“玩家”参数)
  • <参数描述|参数描述> - 必填,选择括号内其中一项填写,符号“|”在这里表示“或”的意思(如 /drop <物品ID|方块ID>中的“物品ID或方块ID”参数)
  • (第一项|第二项) - 必填,选择括号内其中一项参数填写(如 /learn (math|physics)中的“math或physics”参数)
  • [参数描述] - 选填,根据括号内对参数的描述填写(如 /set [坐标]中的“坐标”参数)
  • [第一项|第二项] - 选填,选择括号内其中一项填写(如 /find [item|entity]中的“item或entity”参数)
  在基岩版中,并没有“(第一项|第二项)”这样的指令格式,而是“<第一项|第二项>”。并且,基岩版的参数描述也有特定的格式:“描述内容:值类型”。如“方块坐标:Int”,在这边Int就是参数填的是整数数值的意思(实际上 Int 这个值类型并不完全是这样的,具体的内容会在以后NBT的教学中讲到)
  需要注意:本书中文指令格式较为混乱,且并没有完全按照 Minecraft 本身的指令格式,因此建议真的要查指令格式还是到 Minecraft Wiki。至于为什么不完全按照 Minecraft 本身的指令格式,因为刚开始写本书的时候没怎么注意:hua_嘿嘿:。
  目前我已经在改善本书的指令格式,现在的情况已经好很多了。
  本书采用的指令格式大体是这样的:
  • 纯文本-同官方
  • <参数描述> - 同官方,但部分旧章节会采用一些奇奇怪怪的括号,如“《》”和“〈〉”。
  • (第一项|第二项) - 大部分章节还是采用类似基岩版的尖括号包裹。
  • <参数描述|参数描述> - 同官方
  • [参数描述] - 同官方
  • [第一项|第二项] - 同官方
  • [参数描述|参数描述] - 选填,根据括号内其中一项对参数的描述填写。
  • [<参数描述|参数描述>] - 同『[参数描述|参数描述]』
  • [<第一项|第二项>] - 同『[第一项|第二项]』
  • 参数描述- Java 版和基岩版混用
  除了指令格式的语法外,你还得了解一下指令执行时的三要素:执行位置、执行者、参数。
  • 执行位置——简单来说就是指令执行的位置,你可以通过一个问句来理解它:这条指令在哪里运行?
  • 执行者——就是执行指令的东西,你也可以通过一个问句来理解它:执行这条指令的人是谁?
  • 参数——就是你给指令提供的参数,你还是可以通过一个问句来理解它:执行这条指令的人要对什么东西干什么事情?
  (注:指令本质上并无对这三个东西有三要素之称,这里只是为了方便大家理解给它们套了个头衔)
  这三要素有什么用呢?
  如果你用过 MCreator 这个软件来创建指令,你会发现创建指令后 MCreator 要求你写一个指令运行时的流程(也就是游戏解析并运行指令的过程),同时游戏将给这个流程提供以下信息:
  • Entity - 执行指令的实体(对应“执行者”)
  • xyz - 执行指令的 X、Y、Z 坐标(对应“执行位置”)
  • World - 执行指令的维度(还是对应“执行位置”)
  • Cmdparams - 提供的参数(对应“参数”)
  也就是说,一条指令执行的时候,肯定会被提供以上信息。
  其中『参数』我们得稍微讲一下。
  我们在序言中讲解参数时是通过举例的方式,并没有给其下一个明确的定义,所以其实我们还是不知道参数究竟是什么。
  所以参数究竟是什么呢?
  参数(Parameter),又称元素(Elements),是指一条指令中除指令开头的单词和前缀外,提供的其他信息。
  比如在指令 /tp @s ~ ~ ~ ~20 0 true 中,前缀『/』和指令单词 tp(有些指令教程也叫做指令头,反正怎么叫都可以,没有一个固定称谓)之外的『@s』目标选择器,相对坐标『~ ~ ~』,旋转角度『~20 0』和安全检查模式『true』均为参数。
  参数按照其作用,可以笼统地分为六类:
  • 子命令——有些指令,比如 scoreboard 会有很多的作用,此时就需要子命令来将不同的作用区分开来。(为什么不叫子指令呢?)
  • 位置(坐标)——指令执行的地点,也就是上面的三要素之一,一般是一个坐标
  • 目标——指令所操作的对象。如果对象是实体,一般用的是 UUID、玩家名或目标选择器;如果对象是方块,一般用的是坐标;如果对象是其他的一些东西,一般就会用一些特殊的 ID。
    (注:本书中,默认将 UUID、玩家名和目标选择器合并起来。所以后面如果你看到一个参数可以填写目标选择器,那就大概率也能填写玩家名和 UUID)

  • 值——这东西无法很好的定义,因为在不同的指令中,值类型的参数的作用不一致,但大多数情况下的作用都是具体化对目标的操作。比如在『将玩家传送至一个地点』的指令中,这个地点的坐标就是一个值类型的参数。当然你其实并不需要现在就将它理解得十分透彻,后面学习的过程中你慢慢就会懂了。
  • 模式——对目标进行操作时,所采取的模式。比如传送玩家的时候,你可以选择是默认模式,还是开启安全传送模式。
  • NBT、JSON——一般位于指令的末尾,对目标进行更具体的选择或进行一些更高级的操作。
  一条指令大多数情况下可以填写多个参数。参数与指令开头的单词还有其他参数之间在大多数情况下要有一个空格予以区分。例外情况是基岩版的相对坐标和目标选择器,参数内一般不会包含空格。
  所以空格在指令中十分重要,千万要记住了!
  这就是本章的全部内容。接下来我们将会步入正式的指令学习阶段。