第二章小结
好啦!到这里我们总算“费劲巴力”地把整个命令体系都给学习了一遍,相信你已经对命令能做到什么有了一个大体的印象。祝贺你!
我们这一章学习了非常非常多的命令,其中受限于没有对附加包的了解,所以我们在这一章也同样跳过了很多东西,但这并不妨碍你制作一张优秀的地图,或一个优秀的服务器的命令系统。
那么,学习了这么多的命令,你可能会想:我前脚刚学完,后脚就把语法给忘了,怎么办?
我跟你讲,语法从来就不是限制你开发的最大阻碍,不知道工具如何使用以及不知道如何写出一个完整的逻辑才是关键问题之所在。
整个第二章,我们只做了一件事——了解命令系统能做到什么。只有先有了一个基础了解,你才能不卡壳,不绕远路。在下一章,我们就要解决另一大难题——如何写出一个完整可靠的系统。
那么,现在我们来对这一整章的知识点进行回顾。
全部命令的语法
虽然说语法本身并不重要,但是在关键时刻能查到语法的能力却很重要。在前面经历了大大小小的练习的摧残之后,你现在是一定能看懂命令基础的语法的,比如参数描述、参数类型等等,知道什么地方应该填什么值。
我们为你准备了一个专业文档——全部命令汇总,其中我们详细地给出了极大多数的基岩版可用的命令,包括你已经学过的、没学过的,都在这里面,并且附带了详细的语法含义、教程位置、Wiki 链接等信息。如果你使用电脑,你可以使用 Ctrl+F 快捷键快速查找你所需要的命令。
欢迎收藏这个网站哦 UwU
命令上下文
相关知识点位于 2.3.1 和 2.10。见命令上下文 - 中文 Minecraft Wiki 了解更多。
执行者
代表执行命令的对象。迄今为止我们学习的都是玩家作为原执行者。使用/execute as
可以更改执行者为特定的实体。应注意as
不会改变其他上下文。
执行环境参数
包括执行位置、执行朝向、执行维度。
执行位置是命令执行的位置,会影响~~~
和^^^
的判定方法,会影响诸多位置: x y z
类型的参数的默认值,会影响目标选择器x
、y
、z
的判定方法。使用/execute
的as
、positioned
、align
、anchored
子命令都会改变执行位置。在很多情况下,执行者和执行位置要放在一起更改。
执行朝向是命令执行的朝向,会影响^^^
的判定方法,会影响涉及到朝向的命令。使用/execute
的as
、rotated
、facing
子命令都会改变执行朝向。应注意这些子命令不会改变执行者的朝向,必须使用/tp
等命令更改。
执行维度是命令执行的维度,会影响执行位置的判定方法。使用/execute
的as
、in
子命令会改变执行维度。应注意执行维度通常都要配合对应的位置参数使用。
执行权限等级
决定命令是否能被特定的执行者执行。每条命令都有权限等级需求,只有执行者的权限等级大于等于该命令的需求时才能执行命令。绝大多数的命令的权限等级需求均为1
,且要求开启作弊。
执行输出反馈
我们暂时还没有讲过这个,等到讲了命令方块之后你就能看到它的用途。不过目前,你只需要知道我们执行的绝大部分命令都会给你一个文本反馈,那也是输出反馈的一部分。
物品、方块和实体的状态表达
物品数据值
相关知识点位于 2.2。
物品数据值(Item Aux Data)表达物品的不同状态。类型为int
。
- 对于工具、盔甲等具有耐久值的物品来说,数据值等同于这个工具的损坏值。
- 对于一些具有历史遗留性的物品 ID,它们甚至可能会表达不同 ID 该物品。
- 这是因为,后来这些物品的 ID 被拆分。
- 例如桶
minecraft:bucket
,不同的数据值可能表达水桶、熔岩桶等。
- 其他普通的物品也可以拥有不同的数据值,只是不同数据值下的该物品表现为不可堆叠和可被检测之外,没有任何其他功能上的差别。
- 例如钻石
minecraft:diamond
,不同数据值下的该物品仅仅表现为不可堆叠。
- 例如钻石
在各项命令中,物品数据值都要写入类似于数据值: int
的参数中。
-1
表达一切状态下的该物品。但是,这种写法仅限检测时可用。
常见的可用物品数据值的命令包括:/give
、/clear
、/replaceitem
。
常见的可用物品数据值的目标选择器包括:hasitem
的data
参数。
方块状态
相关知识点位于 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
。
常见的可用物品数据值的目标选择器包括rx
、ry
、rxm
、rym
。
两种 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":[...]}
普通文本组件为text
,用于原样输出文本。
{"text":"(文本)"}
选择器组件为selector
,用于输出符合特定条件实体的名字。
{"selector":"(选择器)"}
分数组件为score
,用于输出特定的分数。
{"score":{"objective":"(记分项)","name":"(玩家)"}}
翻译组件为translate
,用于输出语言文件的键名或格式化的文本。
- 其中,
"with":["(值1)","(值2)",...]
的用法不会解析其中特殊值(例如@s
等选择器)的含义,可将其视为"with":{"rawtext":[{"text":"(值1)"},{"text":"(值2)"},...]}
- 文本中会查找
%%s
或%%(索引)
格式,并将with
里面在特定索引下的值代入 %%
代表一个%
,例如要输出100%
,应写为100%%
{"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/。