跳到主要内容

第二章小结

好啦!到这里我们总算“费劲巴力”地把整个命令体系都给学习了一遍,相信你已经对命令能做到什么有了一个大体的印象。祝贺你!

我们这一章学习了非常非常多的命令,其中受限于没有对附加包的了解,所以我们在这一章也同样跳过了很多东西,但这并不妨碍你制作一张优秀的地图,或一个优秀的服务器的命令系统。

那么,学习了这么多的命令,你可能会想:我前脚刚学完,后脚就把语法给忘了,怎么办?

我跟你讲,语法从来就不是限制你开发的最大阻碍,不知道工具如何使用以及不知道如何写出一个完整的逻辑才是关键问题之所在。

整个第二章,我们只做了一件事——了解命令系统能做到什么。只有先有了一个基础了解,你才能不卡壳,不绕远路。在下一章,我们就要解决另一大难题——如何写出一个完整可靠的系统。

那么,现在我们来对这一整章的知识点进行回顾。

全部命令的语法

虽然说语法本身并不重要,但是在关键时刻能查到语法的能力却很重要。在前面经历了大大小小的练习的摧残之后,你现在是一定能看懂命令基础的语法的,比如参数描述、参数类型等等,知道什么地方应该填什么值。

我们为你准备了一个专业文档——全部命令汇总,其中我们详细地给出了极大多数的基岩版可用的命令,包括你已经学过的、没学过的,都在这里面,并且附带了详细的语法含义、教程位置、Wiki 链接等信息。如果你使用电脑,你可以使用 Ctrl+F 快捷键快速查找你所需要的命令。

欢迎收藏这个网站哦 UwU

命令上下文

教程链接

相关知识点位于 2.3.12.10。见命令上下文 - 中文 Minecraft Wiki 了解更多。

执行者

代表执行命令的对象。迄今为止我们学习的都是玩家作为原执行者。使用/execute as可以更改执行者为特定的实体。应注意as不会改变其他上下文

执行环境参数

包括执行位置、执行朝向、执行维度。

执行位置是命令执行的位置,会影响~~~^^^的判定方法,会影响诸多位置: x y z类型的参数的默认值,会影响目标选择器xyz的判定方法。使用/executeaspositionedalignanchored子命令都会改变执行位置。在很多情况下,执行者和执行位置要放在一起更改。

执行朝向是命令执行的朝向,会影响^^^的判定方法,会影响涉及到朝向的命令。使用/executeasrotatedfacing子命令都会改变执行朝向。应注意这些子命令不会改变执行者的朝向,必须使用/tp等命令更改

执行维度是命令执行的维度,会影响执行位置的判定方法。使用/executeasin子命令会改变执行维度。应注意执行维度通常都要配合对应的位置参数使用

执行权限等级

决定命令是否能被特定的执行者执行。每条命令都有权限等级需求,只有执行者的权限等级大于等于该命令的需求时才能执行命令。绝大多数的命令的权限等级需求均为1,且要求开启作弊。

执行输出反馈

我们暂时还没有讲过这个,等到讲了命令方块之后你就能看到它的用途。不过目前,你只需要知道我们执行的绝大部分命令都会给你一个文本反馈,那也是输出反馈的一部分。

物品、方块和实体的状态表达

物品数据值

教程链接

相关知识点位于 2.2

物品数据值(Item Aux Data)表达物品的不同状态。类型为int

  • 对于工具、盔甲等具有耐久值的物品来说,数据值等同于这个工具的损坏值。
  • 对于一些具有历史遗留性的物品 ID,它们甚至可能会表达不同 ID 该物品。
    • 这是因为,后来这些物品的 ID 被拆分。
    • 例如桶minecraft:bucket,不同的数据值可能表达水桶、熔岩桶等。
  • 其他普通的物品也可以拥有不同的数据值,只是不同数据值下的该物品表现为不可堆叠和可被检测之外,没有任何其他功能上的差别。
    • 例如钻石minecraft:diamond,不同数据值下的该物品仅仅表现为不可堆叠。

在各项命令中,物品数据值都要写入类似于数据值: int的参数中。

-1表达一切状态下的该物品。但是,这种写法仅限检测时可用。

常见的可用物品数据值的命令包括:/give/clear/replaceitem

常见的可用物品数据值的目标选择器包括:hasitemdata参数。

方块状态

教程链接

相关知识点位于 2.8

方块状态(Block States)用于进一步定义方块的外观和行为,部分方块需要方块状态才能完全定义。在 Wiki 的特定的方块条目来查询方块状态允许的值,也可以使用 Minecraft 自带的自动补全。

方块状态需要以中括号包括,不同的方块状态需要以逗号分隔。每一个方块状态需要以状态=值的方法来表达,需要注意值的类型,为布尔值或数字时不能带上引号。即:[<状态1>=<值1>,<状态2>=<值2>,...]的写法。

方块状态往往不是必须的,通常可以不指定方块状态(无论这个参数在命令的什么位置),这时候游戏将选择一个默认值。例如,<方块> <方块状态>参数同时出现时,往往还有一个另一个语法可以只指定<方块>,所以事实上地来看,方块状态通常是一个可选参数。

目标选择器

本章学习的目标选择器参数主要为:

目标选择器参数(参数=值取自于意义分类依据备注
m=<游戏模式: int|GameMode>Mode筛选游戏模式的玩家玩家数据
rx=<x旋转最大值: float>x Rotation筛选 x 旋转值小于rx的玩家实体数据永远不会到达90
ry=<y旋转最大值: float>y Rotation筛选 y 旋转值小于ry的玩家实体数据
rxm=<x旋转最小值: float>Minimum x Rotation筛选 x 旋转值大于rxm的玩家实体数据永远不会到达-90
rym=<x旋转最小值: float>Minimum y Rotation筛选 y 旋转值大于rym的玩家实体数据
hasitem={...}hasitem=[{...},{...},...]Has Item筛选满足{...}要求的物品的实体实体数据{...}的含义见表格末尾
tag=<标签: string>Tag筛选拥有标签的实体记分板参数允许反选
scores={<记分项: string>=<值: integer range>,...}Scores筛选在记分项上的分数满足的要求的实体记分板参数
haspermission={<权限: permission>=<状态: disabled|enabled>,...}Has Permission筛选权限状态的玩家玩家数据
l=<最大经验等级: int>Level筛选经验等级小于等于最大经验等级的玩家玩家数据
lm=<最小经验等级: int>Minimum Level筛选经验等级大于等于最小经验等级的玩家玩家数据

其中,{...}接受 5 个参数:

  • item必选Item类型,指代检测的物品。
  • quantity:可选,integer range类型,指代检测的物品数目。
  • location:可选,EntityEquipmentSlot类型,指代检测的物品所在的槽位。
  • slot:可选,integer range类型,必须搭配location使用,指代检测的物品所在的槽位的位置。
  • data:可选,int类型,指代检测的物品的数据值。

旋转角度

教程链接

相关知识点位于 2.2

用两组数值y旋转x旋转可以确定一个实体的朝向信息,称为旋转角度。

y旋转代表在实体朝向的水平分量按顺时针顺序和南方组成的夹角。例如,北方为 180°,西方为 90°,东方为 -90°或270°。

x旋转代表在实体朝向的水平分量按顺时针顺序和南方组成的夹角。例如:完全抬头为 -90°,平视为 0°,完全低头为 90°(实际上不可能做到完全抬头或低头)。

常见的可用y旋转x旋转的命令包括:/execute rotated/tp/summon/camera set

常见的可用物品数据值的目标选择器包括rxryrxmrym

两种 JSON 组件

物品组件

教程链接

相关知识点位于 2.7

物品组件(Item Component)是用于进一步定义物品行为的组件。物品可以拥有(冒险模式)可破坏、(冒险模式)可放置、物品锁定、死亡保留,一共 4 种物品组件。各个物品组件写在花括号{}内,并由逗号分隔。

它们的类型为json,格式是固定的,分别为:

可破坏组件
"can_destroy":{"blocks":["方块ID1","方块ID2",...]}
可放置组件
"can_place_on":{"blocks":["方块ID1","方块ID2",...]}
物品锁定组件:锁定在物品栏
"item_lock":{"mode":"lock_in_inventory"}
物品锁定组件:锁定在槽位
"item_lock":{"mode":"lock_in_slot"}
死亡保留组件
"keep_on_death":{}

文本组件

教程链接

相关知识点位于 2.9

文本组件(Text Component)(或原始 JSON 文本,Raw JSON Text)是一种用来表达特定文本的组件,使用 JSON 格式。使用文本组件能够打印特定文本、实体名称、分值、或者使用格式化的文本。

一切的文本组件都要以rawtext格式开头,如下所示,其中...为不同组件的集合组件1,组件2,...

rawtext文本组件
{"rawtext":[...]}

普通文本组件为text,用于原样输出文本。

text组件
{"text":"(文本)"}

选择器组件为selector,用于输出符合特定条件实体的名字。

selector组件
{"selector":"(选择器)"}

分数组件为score,用于输出特定的分数。

score组件
{"score":{"objective":"(记分项)","name":"(玩家)"}}

翻译组件为translate,用于输出语言文件的键名或格式化的文本。

  • 其中,"with":["(值1)","(值2)",...]的用法不会解析其中特殊值(例如@s等选择器)的含义,可将其视为"with":{"rawtext":[{"text":"(值1)"},{"text":"(值2)"},...]}
  • 文本中会查找%%s%%(索引)格式,并将with里面在特定索引下的值代入
  • %%代表一个%,例如要输出100%,应写为100%%
translate组件
{"translate":"(键名或文本)"}
{"translate":"(键名或文本)","with":["(值1)","(值2)",...]}
{"translate":"(键名或文本)","with":{"rawtext":[...]}}

游戏内时间的表达

Minecraft 中的一天,对应现实是 20 分钟,也就是 1200 秒,24000 游戏刻。

每 1000 游戏刻对应现实世界的 1 小时,并且 0 游戏刻对应 6:00。例如,游戏中的 12:00 对应为 6000 游戏刻。

ID 查询工具

本章还介绍了一种由 ProjectXero 开发的 MCBEID 查询网站,开发者可以在这里快速地查询自己想要的 ID。地址为https://idlist.projectxero.top/