开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

 楼主|  发表于 2025-11-30 14:59:02|显示全部楼层 IP:福建省
第二卷 常用基础指令

这些指令都是必懂的,想不知道都难。


第八章 /give的用法

2020年1月4日 15:04 1532字

  现在我们来学习第一个指令:/give
  /give 指令可以说是极其基础的指令,很多 Minecraft 玩家都用过它,因为通过 /give 指令可以获取到一些创造模式中无法获取的方块物品,比如大名鼎鼎的命令方块。
  下面来介绍一下:
  /give
  作用
:可以给予一名或多名玩家物品。
  需要权限等级:Java-2,基岩-1
  需要作弊:是
  格式
Java1.13 以下

  1. /give <玩家:目标选择器> <物品id:字符串> [<物品数量:整数>] [<物品数据值:整数>] [NBT标签]
复制代码


JAVA1.13 及1.13 以上

  1. /give <玩家:目标选择器> <物品英文id:字符串> [<物品数量:整数>]
复制代码


基岩版


  1. /give <玩家:目标选择器> <物品id:字符串> [物品数量:整数] [物品数据值:整数] [附加标签:json]
复制代码


  好的,现在来逐一介绍一下。
  玩家——也就是一个选择玩家作为目标的目标选择器。
  物品id——什么是物品ID呢?ID(Identity document),中文翻译“身份标识号”,相当于物品的“身份证”(专业说法是“命名空间ID”)。每个物品都有自己独一无二的ID。
  ID 有数字形式(数字ID)和字符串形式(英文ID)。在 Java1.8 版本以前,Minecraft 中的大多数事物都采用数字 id,其中就包括物品和方块。Java1.8 版本更新后,虽然数字 ID 仍然存在,但很多地方都被更加先进也更好记的英文 ID 替换掉。比如钻石在 Java 版的数字 ID 是 264,很不好记,更新后的英文 ID 是 “minecraft:diamond”,其中的 “diamond” 就是钻石的英文,对于会英文的玩家来说就极其方便了(特别是由于添加了命名空间前缀,大大降低了模组物品 ID 重名的可能性)。
  在基岩版,数字 ID 和英文 ID 两者在大多数指令中都是通用的。比如后面会讲到 /effect(状态效果),其中的状态效果ID就可以使用数字 ID 或和英文 ID。但需注意,物品 ID 和方块 ID 仍然只认英文 ID。也就是说,这里的 “物品ID” 参数,除非你在使用 Java1.8 之前的版本,你就必须得填入物品的英文 ID。
  Java1.13 更新后的 Java 版本,完全抛弃了“数字 ID”,全面使用英文 ID。因此,你现在在 Minecraft Wiki 上只能找到基岩版的数字 ID,而不能找到 Java 版的。要找到 Java 版的,就需要打开页面历史记录,找到 1.13 版本尚未更新时的页面,才能找到 Java 版的数字 ID。
  物品数量——这个不用说了吧,哪个中国人不会看中文的?
  物品数据值——这个就有意思了,MOJANG 为了“偷懒”,将同类物品集合到数据值中,比如说羊毛,不输入或输入 -1 默认是白色,即相当于输入 0,如果要获得其他颜色就需要输入其他值。
  数据值为 -1 相当于数据值为 0,因为数据值默认就是 0,而 -1 的意思是“不考虑数据值”,所以数据值填 -1 同等于不填。注:这段话表述有误,在某些情况下,数据值 -1 和 0 是有差别的,前者代表“不考虑数据值”,后者代表“数据值为 0 的物品/方块”。但在这里的确相当于填 0,因为你不可能获取到一个数据值为 -1 的物品。后面就会遇到作用有差异的情况。
  在 Java 版 1.13 版本更新中,数据值被删除(但没有完全被删除,讲 NBT 时会讲到),每个物品也就有了自己对应的英文 ID。比如红色羊毛在 1.13 版本之前其ID是:wool 14。之后就变成了 red_wool。
  附加标签——这东西类似于 NBT 标签(实际上是 JSON),以后会讲到。
  OK,说了这么多,来举个栗子:

  1. /give @a diamond_block 1
复制代码


  这个的指令意思是给予所有玩家一个钻石块(diamond_block)。
  现在来献上一些不能在创造模式的背包中获取的物品吧!
  • command_block——命令方块(脉冲型)
  • barrier——屏障方块,又称空气墙
  • air——空气方块,也没啥用,就算输入成功也获得不了(空气嘛,你能抓住吗?)
    (本书的QQ群入群问题就是 /give @s air 有什么用,因为 air 获取不了,所以这条指令啥用也没有)
  • structure_blocks——结构方块,一个神秘的方块,以后会有几个章节专门讲这个东西。
  • structure_void——结构空位,基岩版新版本有了,结构方块的配套方块。



/give的历史

Java版(Alpha)


版本
更新内容
v1.0.15
加入了 /give。但只能使用数字 ID,且只能获得单个物品。格式(可能):
  1. /give <玩家名> <物品>
复制代码
?
加入了数量参数。格式(可能):
  1. /give <玩家名> <物品> [数量]
复制代码


Java版


版本
快照
更新内容
1.0.0
Beta 1.9-pre4
加入了损害值(数据值)参数
1.3.1
12w16a
能在单人游戏中使用了。
1.7.2
13w36a
加入了 NBT 标签参数。
1.7.2
13w37a
现在可以使用物品英文 ID 了。
1.8
14w03b
现在不支持物品数字 ID 了。
1.8
14w32b
现在无法突破物品堆叠上限。
1.12
   当目标选择器是玩家自己时,实际上会使用 @s 选择器。
1.13
17w45a
移除了数据值和 NBT 标签参数。
1.17
21w10a
加入了数量限制。


携带版(Alpha)


版本
快照
更新内容
0.16.0
build 1
加入了 /give。

11#2025-11-30 14:59:02回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-1 22:40:43|显示全部楼层 IP:福建省
第九章 tp-传送指令

2020年1月4日 17:15 2073字
(此章最后一次大修改于2022年7月9日)


  我相信在看这本书的你一定去玩过私人服务器,里面最经常使用的指令就是 tp(传送)。
  Minecraft固有的传送指令是 /tp,其全称实际上是 teleport。由于这条指令深究起来很复杂,加上目前还是学习初期,我们就先了解个皮毛就好。
  /tp
  作用
:将一个实体传送到另一个实体或者是坐标。
  需要权限等级:Java-2,基岩-1
  需要作弊:是
  格式

  1. /tp [传送目标:目标选择器] <目的地实体:目标选择器>
复制代码

  这可以将选定的目标传送到另一个实体的位置,比如把张三传送到李四的位置。注意,目的地实体不能为多个,即你并不能将张三传送到李四和王五的位置(就算张三不止一个也不能这样干)。如果将传送目标省略,那么将会传送执行者自己(一般是你自己)。

  1. /tp [传送目标:目标选择器] <一个地点:坐标> [<水平旋转角度> <垂直旋转角度>]
复制代码

  这可以将选定的目标传送到一个指定的地点。

  那什么是水平旋转角度和垂直旋转角度呢?
  水平旋转角度(yRot),又叫做 Y 轴旋转角度,指的是实体以 Y 轴为中心,俯视时顺时针的角度。听不懂?没关系,你只需要打开你手机,然后找到一个应用叫做指南针(一般手机有自带)。没有?也没关系,百度地图高德地图之类的总该有吧?或者你现场下一个指南针,甚至自己用磁铁做一个,只要有标上角度就行。
  打开指南针,你就会发现在这个指南针的外侧有一圈度数,以正北(0°)开始,顺时针绕一圈 360° 再回到正北。
  这个度数叫做什么呢?叫做真北方位角。相应的,以正南(0°)开始,也是顺时针绕一圈 360° 再回到正南的,就是真南方位角
  由于我们位于北半球,所以常见的是以正北为 0°,也就是采用真北方位角的指南针。但这又和我们水平旋转角度有何关系?
  其实,我们的水平旋转角度就是 Minecraft 版的真南方位角——以实体为中心,以正南(z 轴正方向)为 0°,顺时针下来,实体朝向和正南方向的夹角(也或者说实体在真南方位角体系中朝向的角度),就是该实体的水平旋转角度。
  比如你看向正北,你的朝向按照真南方位角来看,就是朝向 180°,你的水平旋转角度就是 180°;朝向东北,就是朝向 225°,你的水平旋转角度就是 225°;朝向西南,就是朝向 45°,你的水平旋转角度就是 45°.......
  懂了吧?如果还没懂......网上随便去找一个以正南为 0° 的指南针的图片,把 Minecraft 的坐标怼上去就清楚了(以后再考虑为这个教程弄点图片)。
  另外的垂直旋转角度(xRot),又叫做 X 轴旋转角度,指的是实体与水平面之间的倾斜角。这个可比水平旋转角度好理解多了,相信你应该能够看懂上面的这句话。只不过需要注意一点,对于有头或有眼睛的实体来说(比如玩家),这东西指的是头的朝向(也就是目光的朝向)与水平面之间的夹角,而不是整个身体(这就是为什么你能够看到一个头倾斜着的玩家,但你绝不可能看到一个身子倾斜着的玩家)
  (有没有一种可能,其实 Minecraft 中的玩家朝正下方或正上方看的时候,实际上是平行与地面的,只是 Mojang 懒得做出这样的效果而已)
  (唉,这样子就能解释为什么在游戏中,第一人称的玩家看不到自己的下半身了!)

  需要注意的是,这个垂直旋转角度虽然以水平面朝向为 0°,但和上面的水平旋转角度不一样的是,这东西引入了负值:朝上为负,朝下为正。比如你头朝上 45° 看天空,那么你的垂直旋转角度就是 -45°;你头朝下 45° 看地板,那么你的垂直旋转角度就是 45°。而且,垂直旋转角度肯定不能超过 +90° 或低于 -90°。
  懂了吧?在 tp 中引入垂直旋转角度和水平旋转角度,就可以指定传送目标在传送完成后的朝向(如果未指定,将会不改变朝向,虽然可能没多大作用,但在一些 RPG 地图或服务器,能够让玩家一传过来就看到重要的告示牌或其他的一些东西,那岂不美哉?)
  比如下面的指令:
  1. /tp @p ~ ~ ~ 90 0
复制代码

  这将会使最近的玩家朝向正西而不改变其位置。
  很简单吧?对了,既然坐标有『绝对坐标』和『相对坐标』,那么旋转角度有没有『绝对旋转角度』和『相对旋转角度』呢?
  答案是肯定的。
  和相对坐标一样,相对旋转角度也是使用符号~代表传送实体本身的朝向,以正数和负数代表角度的增加和减少。比如下面这条指令:
  1. /tp @p ~ ~ ~ ~-30 ~1
复制代码

  假设这 @p 选中的还是上面那位被迫朝向正西的玩家,那么这条指令将会使他朝向南偏西 60°,头微微朝下 1°。
  简单吧?本章也就到这里了,对于初学者来说这些内容就已经足够了。
  上面所述的 tp 指令适用于基岩版和 Java 版。在 Java 版 1.13 版本更新之前,tp 的指令用法就这么多。而关于 1.13 版本到底对 tp 进行了怎样的更新,这些内容以及一些更加复杂的东西会在第六十四章具体讲到。


/tp历史

Java版

Classic Server

版本
更新内容
1.7
加入 /tp


Indev

版本
更新内容
0.31
移除了所有命令


Alpha

版本
更新内容
v1.0.16_01
重新加入了 /tp。


正式版

版本
更新内容
1.3.1
现在允许玩家传送到指定坐标
1.8
加入了朝向参数。
1.9.3
/tp 不能在能将玩家传送到 Y=-512 到 512 以外的地方。
1.10
Y 轴限制现在增加到 -4096 到 4096。
1.13
将 /tp 和 /teleport 同化,/tp 也正式成为 /teleport 的别称(缩写)。

携带版(Alpha)

版本
更新内容
0.16.0
加入了 /tp。

12#2025-12-1 22:40:43回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-2 22:38:31|显示全部楼层 IP:福建省
第十章 kill-熊孩子最喜欢的指令

2020年1月4日 17:45 670字

  我的世界网易服务器,最不缺的是什么?是石头?是泥土?是空气?答案是熊孩子!
  一进入网易的生存私人服务器,宛如进入了中国版 2B2T 一样,地图遍地狼藉,房子七零八落,偶尔还能看到流淌的岩浆。
  幸亏熊孩子们还只会用 TNT,如果它们知道了指令,那么或许这将会是它们最喜欢的指令:
  /kill
  (额,其实就算知道了也没权限)
  相信大家对这个指令都不陌生。就算你不知道,这种死亡信息你总见过吧:

XXX 掉出了这个世界(基岩版为 XXX 失败了)


  今天,我们就来看看这个指令,也就是/kill。
  /kill
  作用
:清除一个或多个实体。
  权限等级:Java-2,基岩-1
  格式
  1. /kill [实体:目标选择器]
复制代码


  好的,现在来解读一下。
  如果你不写要 kill 的实体,就执行 /kill,会发生啥?
  很明显,你死了。
  执行 /kill 不填目标选择器 = 自杀,也就是默认选择执行者自己作为指令执行的目标。很多指令都有这样的特征,不写目标相当于选取执行者自己作为执行目标。
  什么?你并没有死?
  哦,那你一定玩的是基岩版的新版本,因为基岩版中处于创造模式的玩家被 /kill 是死不了的。
  但是加上目标选择器就不一样了,你想杀谁就杀谁。
  但事实上在 Minecraft 中,/kill 本意是“清除某个实体”,所以使用 /kill 后,你会发现其消息栏中有一个“已清除 XXX”,并不是死亡。


/kill历史

Java 版(Alpha)

版本
更新内容
v1.2.6
加入了 /kill 命令。


Java 版

版本
更新内容
1.6.1
/kill 命令对实体造成的伤害从 1000 增加至 3.4×10 的 38 次方。
1.8
为 /kill 命令加入了玩家和实体参数,同时能被命令方块执行了。
1.8
为修复编号为 MC-44371 的 BUG,/kill 命令现在直接清除非生物实体,不再对其造成 3.4×10 的 38 次方虚空伤害。
1.13
目标选择器参数不再是可选。
1.15
目标选择器参数再次可供选择。


携带版(Alpha)

版本
更新内容
0.16.0
加入了 /kill 命令。
13#2025-12-2 22:38:31回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-4 22:48:08|显示全部楼层 IP:福建省
第十一章 gamemode-更改游戏模式

2020年1月4日 18:17 1004字

  我相信玩过 Minecraft 的 Java 版的玩家,一定很熟悉这个指令,它就是 /gamemode
  /gamemode,单词是 gamemode,由 game 和 mode 两个单词组成。game 意思是“游戏”,mode 意思是“模式”,拼起来就是游戏模式(gamemode)
  /gamemode
  作用
:更改单个或多个玩家的游戏模式
  需要权限等级:Java-2,基岩-1
  需要作弊:是
  格式
高于 Java1.12.2 版本

  1. /gamemode <游戏模式ID:字符串> [玩家:目标选择器]
复制代码


低于 Java1.13 版本和基岩版

  1. /gamemode <游戏模式ID:字符串|字符|值> [玩家:目标选择器]
复制代码

  要注意的一点是,Java 版从 1.13 版本快照 17w45a 开始就不支持英文缩写以及数字 id 了。
  游戏模式大致分为四种,其中一种为 Java 版独有。这四种分别是生存(survival)、创造(creative)、冒险(adventure)以及旁观者(spectator)注:基岩版 1.19.50.20 更新后,正式加入了旁观者模式。
  • 生存模式,英文:survival,缩写:s,数字 id 为:0。
  • 创造模式,英文:creative,缩写:c,数字 id 为:1。
  • 冒险模式,英文:adventure,缩写:a,数字 id 为:2。
  • 旁观者模式,英文:spectator,数字 id 为:3。

  在新版本的基岩版中,还有一个特殊的模式:
  • 世界默认游戏模式,英文:default,缩写:d,数字id为:5

  旁观者模式——它不等于基岩版的游客类型玩家,这种模式的玩家可以穿过障碍,不受伤害,没有实体,可以像创造一样飞,并且可以附身于各种生物身上。但处于这种模式玩家是无法进行交互的。
  生存模式——不用讲了吧。
  创造模式——也不用讲了吧。
  冒险模式——在 Java 版中,需要使用特定的工具才能破坏方块(如剪刀剪树叶)。而在基岩版中,什么都无法破坏,这点也被用于基岩版的“服务器保护”中。
  如果写的时候不填目标选择器时,会发生啥?
  答案是你修改了自己的游戏模式。
  没错,就是这么简单。
  下面举个栗子:
  1. /gamemode adventure @a
复制代码

  什么意思呢?意思是将所有玩家的游戏模式都切换成冒险模式。


/gamemode 历史

Java版(Beta)

版本
更新内容
1.8
加入了
  1. /gamemode <玩家:目标选择器> <模式>
复制代码


Java版

版本
更新内容
1.3.1
/gamemode 现在能在单人游戏中使用,同时语法更改为
  1. /gamemode <模式> [玩家:目标选择器]
复制代码
,模式可以是数字和 survival、creative、s 或 c。/gamemode 3 更改为 /gamemode 0(生存模式)
1.8
加入了 spectator(旁观者模式)。
1.9
现在 /gamemode 会在聊天栏中显示玩家更改为的游戏模式。
1.13
现在 /gamemode 不再支持简写。


携带版(Alpha)

版本
更新内容
0.16.0
加入了 /gamemode 命令,但只能使用创造和生存模式。


携带版/基岩版

版本
更新内容
1.1.0
加入了冒险模式。
1.17.30
现在能够切换到世界默认模式了
1.18.30
为旁观者模式加入了数字ID:6注:1.19.30.20 版本后,该数字 ID 被删除。
1.18.31
为旁观者模式加入了 spectator 全称

14#2025-12-4 22:48:08回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-5 22:53:14|显示全部楼层 IP:福建省
第十二章 gamerule-自定游戏规则

2020年1月5日 12:19 2391字
搬运注:根据
中文 Minecraft Wiki ,在即将到来(本章搬运至 苦力怕论坛 时间为 2025年12月5日)的 Java 1.21.11 群骑纷争正式版中,所有游戏规则的命名均从驼峰式(tuoFengShi)改为下划线式(xia_hua_xian_shi),例如 keepInventory 变成了 keep_inventory,并且部分规则已被进一步重命名。

Mojang:我们进行了一项大更新!重命名了所有游戏规则!
玩家:??!
开发者:%$!*@^%@*%!%


  每个游戏都有游戏规则,Minecraft 也不例外。
  在基岩版,管理员可以在“设置”界面更改游戏规则,但那些游戏规则显然是不够的。
  所以,如果真的要更改游戏规则,那还得用一条专门的指令。
  这条指令就是:/gamerule
  /gamerule,和上一章讲过的 /gamemode 是差不多的,都是由两个英文单词组成的指令。game 是游戏的意思,rule 是规则的意思,合并就是游戏规则(gamerule)
  /gamerule
  作用
:更改游戏规则
  需要权限等级:Java-2,基岩-1
  格式
  
  1. /gamerule <游戏规则ID:字符串> [布尔值]
复制代码

  
  1. /gamerule <游戏规则ID:字符串> [值]
复制代码


  游戏规则有很多个,在章尾我会列出来所有游戏规则以及默认是开启还是关闭。
  布尔值知道吧?不知道的话我在这里科普一下。布尔值指的是“真”、“假”,常用于代码中。在 Minecraft 中有的地方使用的是英文,即是 true(真)false(假),也可以使用二进制的 1(真)0(假)。在 /gamerule 和大多数指令中,使用的都是英文。
  大部分游戏规则都是布尔值类型的,即 true 开启,false 关闭。但也有些游戏规则是一个数值。
  布尔值和数值参数省略的话,即只填游戏规则,就可以获取该游戏规则当前的状态,比如:

  1. /gamerule commandBlockOutput
复制代码


  返回就是:游戏规则 commandBlockOutput 目前为:true
  现在我列出一些常用的游戏规则:

(布尔值游戏规则)

  • commandBlocksEnabled(默认:true)——命令方块在游戏中是否启用(基岩版设置界面为“启用命令方块”)[仅基岩版]
  • commandBlockOutput(默认:true)——命令方块是否在聊天框中向管理员显示执行的结果
  • disableElytraMovementCheck(默认true)——是否禁止服务器检查玩家使用鞘翅的移动速度[仅Java]
  • doDaylightCycle(默认:true)——是否开启时间的流动(基岩版设置界面有,为“开启昼夜更替”)
  • doEntityDrops(默认:true)——不是生物的实体是否会掉落物品(基岩版设置界面有,为“实体掉落战利品”)
  • doFireTick(默认:true)——火是否会蔓延和自然熄灭(基岩版设置界面有,为“火焰蔓延”)
  • doInsomnia(默认:true)——幻翼是否自然生成
  • doImmediateRespawn(默认:false)——玩家死亡时是否直接跳过死亡界面(基岩版为immediateRespawn)(基岩版设置界面为“立即重生”)
  • doMobLoot(默认:true)——生物死亡是否掉落(基岩版设置界面有,为“生物战利品”)
  • doMobSpawning(默认:true)——生物是否自然生成(不影响刷怪笼)(基岩版设置界面为“生物生成”)
  • doTileDrops(默认:true)——方块破坏是否掉落物品(基岩版设置界面为“区块掉落”)
  • doWeatherCycle(默认:true)——天气是否变化(基岩版设置界面为“天气更替”)
  • keepInventory(默认:false)——玩家死亡时是否保留数据(死亡不掉落)(基岩版设置界面有,为“保留物品栏”)
  • logAdminCommands(默认:true)——是否在服务器日志中记录管理员使用过的命令,适合服务器被捣乱时查看[仅Java]
  • mobGriefing——生物是否可以破坏、放置、修改方块、捡起掉落物以及(唤魔者是否可以)把蓝色的羊变为红色。该规则不影响非生物实体,不能阻止TNT和末影水晶的爆炸。(基岩版设置界面为“生物破坏”)
  • naturalRegeneration(默认:true)——玩家在饥饿值足够的情况下是否可以自然回血(基岩版设置界面为“自然生命恢复”)
  • pvp(默认:true)——玩家之间是否能造成伤害[仅基岩版](基岩版设置界面有,为“玩家间伤害”)
  • respawnblocksexplode(默认:true)——玩家在非主世界维度使用床和在非下界维度使用重生锚时是否爆炸[仅基岩版][BE 1.17.20 更新,现在还在测试]
  • sendCommandFeedback(默认true)——玩家执行命令的返回消息是否显示在聊天栏
  • showcoordinates(默认:true)——是否在聊天框区域持续显示玩家所在的坐标[仅基岩版](基岩版设置界面有,为“显示坐标”)
  • tntexplodes(默认:true)——TNT是否爆炸。注意,这并不会影响到 TNT 矿车和末影水晶。[仅基岩版](基岩版设置界面有,为“TNT爆炸”)

(数字游戏规则)

  • randomTickSpeed(默认值:1 [基岩] 或 3 [JAVA])——每二十分之一秒(一游戏刻)每个区块中发生的方块事件的频率,简单来说就是值越大,方块变化速率越快。(基岩版设置界面有,为“随机刻速度”)
      下面我说一下,随机刻的最高值是 4096,也就是 2 的 12 次方。随机刻不要改太高,不然——你会被卡得够呛的。但如果你的设备撑得住,那么你将会看到万物疯狂生长、生机勃勃的景象。
  • spawnRadius(默认值:10 [Java]或 5 [基岩])——新进入服务器玩家和没有自己重生点玩家重生时距离世界出生点的最大距离,调成0可以让玩家准确生成在世界出生点

  还有一点,我说一下一个小知识,Minecraft Java 版对于大小写的要求十分严格,而基岩版较为宽松。


/gamerule历史


Java版

版本
更新内容
1.4.2[12w32a]
加入了 /gamerule,同时加入了 doFireTick(火焰蔓延)、mobGriefing(生物破坏)、keepInventory(保留物品栏)、doMobSpawning(生物生成)、doMobLoot(生物掉落)、 doTileDrops(方块掉落)、commandBlockOutput(命令方块输出)规则。
1.6.1
加入了 naturalRegeneration(生命恢复)、doDaylightCycle(时间流逝)规则。
1.8
加入了 logAdminCommands(记录指令日志文件)、showDeathMessages(显示死亡信息)、randomTickSpeed(随机刻)、sendCommandFeedback(保存命令方块输出)规则。加入了创建虚拟规则的能力。
1.8.1
加入了 doEntityDrops(实体掉落)规则,同时,doTileDrops 不再影响实体。
1.9
加入了 spectatorsGenerateChunks(旁观者区块加载)、spawnRadius(重生半径)、disableElytraMovementCheck(检查鞘翅飞行)、doWeatherCycle(天气变化)和 maxEntityCramming(实体推动伤害)规则。
1.12
加入了 doLimitedCrafting(配方解锁)、maxCommandChainLength(命令链链上限)、announceAdvancements(显示进度)、gameLoopFunction(高频执行函数)规则。
1.13
不再接受未知值(自定义游戏规则)。现在会对值进行类型检查。移除了 gameLoopFunction 规则。
1.14.3
加入了 disableRaids(玩家攻击)、reducedDebugInfo(简化调试界面)规则。
1.15
加入了 doInsomnia(幻翼生成)、doImmediateRespawn(立即重生)、drowningDamage(窒息伤害)、fallDamage(跌落伤害)和 fireDamage(火焰伤害)规则。
1.15.2
加入了 doPatrolSpawning(控制灾厄巡逻队生成)和 doTraderSpawning 规则(控制流浪商人生成)。
1.16
现在创造世界时可以编辑游戏规则。加入了 forgiveDeadPlayers(激怒的中立生物的目标玩家死亡时,该生物是否恢复中立状态)和 universalAnger(激怒中立生物是否攻击任何玩家)规则。
1.17
加入了 freezeDamage(是否承受冰冻伤害)、playersSleepingPercentage(跳过夜晚所需玩家睡觉百分比)规则。


携带版

版本
更新内容
1.0.5
加入了 /gamerule。同时加入了 drowningDamagefallDamagefireDamagepvp(玩家间攻击)规则。
1.1.0
加入了 doDaylightCycledoEntityDropsdoFireTickdoMobSpawningdoMobLootdoTileDropsdoWeatherCyclekeepInventorymobGriefing 规则。


基岩版

版本
更新内容
1.6.0
加入了 doInsomnia 规则。
1.7.0
加入了 commandBlocksEnabled 规则。
1.8.0
加入了 randomTickSpeed 规则。
1.9.0
加入了 showDeathMessages immediateRespawn 规则。
1.12.0
加入了 spawnRadiussendCommandBlockFeedbackcommandBlockOutputmaxCommandChainLengthnaturalRegenerationsendCommandFeedbackshowCoordinates(显示坐标)和 tntExplodes(TNT爆炸)。
1.14.0
加入了 showtags(展示物品可破坏、放置方块列表)规则。不再接受自定游戏规则。
1.16.210
加入了 freezeDamage 规则。
1.17.20
加入了 respawnblocksexplode(床、重生锚是否爆炸)规则。
15#2025-12-5 22:53:14回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-6 22:06:44|显示全部楼层 IP:福建省
第十三章 clear-清除物品的指令

2020年1月5日 13:09 1917字
(该章节最后大修于2025年11月22日)

  我们第一个学习的指令是 /give,作用是给予玩家一样物品。有正必有负,Minecraft 还有一条指令,和 /give完全相反,这条指令就是 /clear
  clear 在英文中有三种意思,分别是:
  • 清楚地;明白的。
  • 清除;不再受阻。
  • 离开;不靠近。

  显然,在上面的意思中,只有“清除”是“获取”的反义词。所以,/clear 的作用是:清除玩家的物品。
  /clear
  作用:清除玩家的单个或所有物品。
  需要权限等级:Java-2,基岩-1
  格式
Java1.12.2 之后

  
  1. /clear [目标选择器:玩家] [物品ID:字符串] [清除的最大数量:Int整数]
复制代码


基岩版和 Java1.13 之前

  
  1. /clear [目标选择器:玩家] [物品ID:字符串] [要清除物品的数据值:Int整数] [清除的最大数量:Int整数]
复制代码

  目标选择器——这个必须填玩家。不填默认为命令执行者,即清除命令执行者(自己)的所有物品。
  物品名——可以填需要清除的指定物品其 ID,不填默认清除指定玩家的所有物品。
  要清除物品的数据值——这个如果不填,即同时不填数量(接下来这个参数)和这个参数,或只填写-1,将会只清除所有指定玩家具有指定物品ID的物品,而不会检查其数据值。
  清除的最大数量——默认是全部清除(相当于填 -1),填的话可以指定一次清除最大清除多少物品。注意是最大!也就是说,就算背包里的指定物品没有达到最大数量,还是一样会被清除。
  在之前的 /give,我们遇到的数据值参数填 -1 和 0 并没有区别。但在这里,若数据值填写 -1 和 0 就有区别了!
  例如(以下故事和人物纯属虚构,如有雷同,可能不是巧合),玩基岩版或 Java1.12.2 的你,此时假设你现在在背包中拥有一些橡木和云杉木。你花了整整 1 个小时的时间采集了这些木头,以扩张你的农庄。但是,此时一位邪恶的腐竹盯上了你,由于你砍伐了大量的树木而没有践行可持续发展的理念,这位腐竹决定给你一点教训。
  跨过山和大海,穿过人山人海,你终于到达了你的农庄。而此时,这位腐竹已经通过插件看透了你的背包,并准备了以下指令:

  1. /clear @a[name="lbwnb"] log 0
复制代码

  激动万分的时刻到了!你颤抖地打开了工作台,开启农庄扩建的第一步。但就在你正要将橡木放进工作台的时候,突然之间,全部橡木消失了!

  <[生存 1 区]lbwnb>?
  <[生存 1 区]lbwnb>为啥我一大堆橡木突然不见了?(
  <[生存 2 区]YYT>???
  <[生存 1 区]lbwnb>但云杉木还在啊?

  也许是这个土豆服务器刚好吃掉了你的橡木。运气问题?这么想着,你又花了亿点时间收集了足够多的橡木。以防万一,过程中每过几分钟你都会检查一遍背包里,然而一切正常。但是在暗处,有一个隐形的人一直在背后跟踪着你,ta 已经准备好了第二条指令:
  1. /clear @a[name="lbwnb"] log -1
复制代码

  <[生存 1 区]lbwnb>xdm我要打开工作台了,祝天下再无土豆服务器!
  <[生存 2 区]YYT>awa
  <[生存 1 区]lbwnb>???
  <[生存 1 区]lbwnb>好了,这下所有原木都不见了(

  你刚想抨击一下这个土豆服务器,突然之间,一道金光闪瞎了你的 24K 钛合金狗眼!

  <工作台之神>年轻的 lbwnb 哟!刚才服务器吞掉的是这些金块还是这些钻石块?
  
  你一脸懵逼,回答说:“不是,是一堆木头(”
  
  <工作台之神>诚实的好孩子,这是你的木头。为了奖励你的诚实,既然你这么需要木头,那么老夫再送你一些树苗~

  你还来不及感到失望,然后就见到了混杂在一堆树苗中的点券......
  注意到了吗?第一个指令中,腐竹使用了 0 作为数据值,清除了你的全部橡木。而第二条指令使用了 -1 作为数据值,却清除了你的全部原木!这是为什么?
  如果你在 Minecraft Wiki 上做一番调查,就会发现橡木和云杉木其实共用了同一个物品(方块) ID,也就是 minecraft:log。为了区分这两种木头,橡木使用了 0 作为数据值,而云杉木和其他木头使用了更大的值作为数据值。因此,当指定数据值为 0 时,其实就相当于指定了需要清除的木头种类,即橡木原木。但数据值一定是一个非负整数,而 -1 是一个负数,这意味着 -1 不可能代表一个特定的木头种类。那么 -1 代表什么呢?
  匹配当前物品 ID 下的所有物品种类!

  下面举个栗子:

  1. /clear @a diamond 0 1
复制代码

  这个是以基岩版的格式为基础的,Java 版 1.12.2 之后版本需去掉那个 0。意思是清除所有玩家物品栏里的数据值是 0 的钻石,并且只清除 1 颗。
  需要注意,clear这条指令及其特殊,它的数据值参数是在数量参数前面的,而不是填完数量参数再填数据值参数!
  清除的最大数量可以填0。但是填0又有什么用呢,这又不会清除任何物品?
  实际上,这个操作及其有用,因为我们可以通过填0来探测一个玩家背包里是否有指定物品!比如:

  1. /clear @p minecraft:diamond_sword -1 0 {display:{Name:"天空之脊"}}
复制代码

  就可以在 Java1.13 以下版本中检测该玩家是否持有一把叫做“天空之脊”的钻石剑。若要在Java1.13及以上版本使用,则需要改为:

  1. /clear @p minecraft:diamond_sword{display:{Name:""天空之脊""}} 0
复制代码

  (没错,后面那串就是 NBT,这串自定义名字的具体操作会在第一百零四章:物品的显示属性讲到)
  如果该玩家并没有持有天空之脊,那么将会返回:

  无法清除 XXX 的物品栏,没有可清除的物品

  如果该玩家持有一把,那么将会返回:

  XXX 有1个符合条件的物品

  可惜的是,到底有多少物品只会显示,却不会通过红石比较器转换为红石信号。
16#2025-12-6 22:06:44回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-8 09:34:22|显示全部楼层 IP:福建省
本帖最后由 QiguaiAAAA 于 2025-12-8 10:29 编辑

第十四章 fill-填充指令

2020年1月5日 16:38 1449字

  相信用过电脑画图的都知道,画图软件都有一个功能,它就是:颜色填充。
  Minecraft 也有填充功能,但是它要用到一个指令,就是 /fill
  /fill,在英文里意为“填满;充满;装满;注满......”反正都是满。所以,/fill 的用处是:填满指定范围的空间。
  /fill
  用处
:用特定的方块填充或替换一个区域内的方块。
  需要权限等级:Java-2,基岩-1
  是否可使用命令方块执行:是
  格式
Java1.12.2之后


  1. /fill <起点方块坐标> <终点方块坐标> <填充方块:字符串> [<填充模式:destroy|hollow|keep|outline|replace>]
复制代码

\\使用replace填充模式时\\
  1. /fill ...... replace [被填充方块:字符串]
复制代码

Java1.13之前和基岩版


  1. /fill <起点方块坐标> <终点方块坐标> <填充方块:字符串> [<方块数据值:Int整数>|<方块状态>] [<填充模式:destroy|hollow|keep|outline|replace>]
复制代码

\\使用replace填充模式时\\
  1. /fill ...... replace [被填充方块:字符串] [被填充方块数据值:Int整数]
复制代码


  由于 /fill 这个指令比较复杂,导致我们必须要用比较长的篇幅介绍完。
  首先,/fill 的填充范围是一个长方体,起点方块坐标和终点方块坐标是两个点,从这两个点衍伸出来的 X、Y、Z 轴会形成一个长方体,这个长方体就是填充的范围。填充的范围包括的方块量不能超过 32767 块,不然无法执行。
  需要指定填充的方块,填充模式默认是 replace。比如一个最基本的:
  1. /fill ~1 ~-1 ~1 ~-1 ~-1 ~-1 diamond_block
复制代码

  这将会在命令执行者(一般是你自己)脚下生成一个3×3×3的钻石块平台。
  填充模式一共有五种——destroy、hollow、keep、outline、replace。

一、destroy


  destroy 中文意思是“破坏”。所以它的作用跟破坏比较相似,是什么破坏呢?
  你玩过生存模式吧,在这个模式,你每破坏一个方块,一般都会获得一些东西。比如破坏木头获得木头;破坏树叶有几率获得树苗;破坏石头会获得圆石......
  没错,destroy 的作用是用指定方块替换填充区域内的所有方块,而被替换的所有方块都被视为被无魔咒的钻石锹或镐采掘而掉落成对应的实体形式,但是只能被剪刀采集的方块,如藤蔓就不会掉落,流体方块更不可能掉落,你见过拿着水方块的玩家吗?如果你玩过1.8之前的版本,可以无视上一句话。

二、hollow


  hollow 的中文意思是“中空的;空心的;凹陷的”,其作用是仅替换填充区域外层的方块,内部方块被替换为空气。所以用这个可以快速的建造出一个中空的地方,非常适合用于建筑党和创作地图党。

三、keep


  keep,中文意思是“保持”。所以它的作用也是类似于“保持”的。但它保持的是什么?
  填充区域内的所有非空气方块。
  keep 的作用是仅用指定方块替换填充区域内的空气方块,如果全都是空气方块当然是全都替换啦。这个非常适合于坑坑洼洼的地方填充东西而不破坏地形。

四、outline


  outline 的中文意思是“概述;略述;显示…的轮廓;勾勒…的外形”。这么多意思,到底是啥呢?很明显,肯定不是“概述”,所以前面两个,去掉。
  所以,这里的 outline 的意思是“显示…的轮廓;勾勒…的外形”。有轮廓、勾勒两个词,你想到什么?
  这说明它的效果跟 hollow 是很像的,但是有一点不一样,就是——它不是中空的。
  outline 的作用是仅用指定方块替换填充区域外层的方块,内部方块不受影响。这个非常适用于将地图的一部分包起来而不破坏地形。

五、replace


  replace 是默认的填充方式,中文意思是“代替”。
  replace 有更多的参数,所以上面特别列出了一个“使用replace填充模式时”的格式。
  replace 多余出来的参数可以指定要替换的方块,保证其他方块不受影响。这个功能很好用,特别是配上 execute 指令,但那也是后话了。
  下面来举个例子,当然是 replace 的栗子:
  1. /fill 0 45 0 55 70 55 diamond_ore 0 replace stone 0
复制代码

  什么意思呢?这条指令的意思是:
  将在 (0,45,0) 到 (55,70,55) 的所有石头(stone)替换成数据值为 0 的钻石矿(diamond_ore)。


/fill历史

Java

版本
更新内容
1.8
加入了/fill。
1.11
加入了对方块状态的支持。


携带版Alpha

版本
更新内容
0.16.0
加入了/fill。


17#2025-12-8 09:34:22回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-9 16:52:56|显示全部楼层 IP:福建省
第十五章 发送消息

2020年1月5日 19:54 1032字

  在 Minecraft,如何与玩家交流,那肯定是在聊天框打字了。
  但是如果得像服务器里“自动化”,那么命令方块肯定就派上用场了。
  之前说过命令方块有三种文本输出形式。第一种是聊天栏显示运行结果;第二种是命令方块界面显示运行结果;第三种是给命令方块取名。
  但前两种都是只能管理员查看,第三种又太短,且不美观。这时候我们就需要可以发送消息的指令。在 Minecraft 中,可以发送消息的指令有很多种,但功能都差不多,接下来就来一一讲一下,这里先全部列出来:
  • /say <消息>
  • /tell
  • /tellraw
  • /w
  • /me
  • /msg
  • /teammsg
  • /tm(?)

  首先第一个是 /say。say 可以发送广播消息。发送消息的格式长这样:
  1. [XXX]XXXXXXXX
复制代码

  我们再来拿用聊天栏发出的信息的话来对比一下:
  1. <XXX>XXXXXXX
复制代码

  可以发现,除了名字的显示形式是不一样之外,其他都一样。
  /say
  作用
:广播
  需要权限等级:Java-2,基岩-1
  格式
  1. /say <消息内容>
复制代码

  显示信息格式
  1. [发出人的昵称]“内容”
复制代码


  /say 这个指令很简单,但又有些那么不简单。
  /say 的消息内容不止可以写消息,还可以包括目标选择器和玩家名!
  比如:
  1. /say @p
复制代码

  就可以广播最靠近命令执行地点的玩家。
  这功能的适用性非常广,你可以在你的 RPG 地图里使用 /say 目标选择器来让 NPC 说出玩家名,也可以在服务器中检测持有违禁品的玩家并将其用户名广播。
  普通玩家无法使用 /say,但这些玩家干嘛要用 /say,好好的在聊天栏内发送消息不好吗?
  但 Mojang 就这么神奇,也向普通玩家添加了一条广播指令,它就是 /me。
  /me
  作用
:广播(实际上 Mojang 官方本意是显示一条关于自己正在做什么的信息)
  需要权限等级:0
  格式
  1. /me [消息内容(动作)]
复制代码

  显示信息格式
  1. * 玩家名 消息内容
复制代码


  和 say 一样,me 也可以在消息中参杂目标选择器和玩家名,只不过这功能暂且只有基岩版有,Java 版还未添加。me 如果不填消息只会限速玩家昵称。
  广播的指令暂且只有这么多。但一个游戏只有世界聊天室那肯定是不行的,所以 Mojang 还添加了一堆用于私信的指令:
  • /tell
  • /w
  • /msg

  作用:告诉一个或多个玩家消息。
  需要权限等级:0(目标选择器只能使用 @s 和玩家名,其他类型选择器需要 2 级 [Java] 或 1 级[基岩]权限)
  格式
    1. /tell <收信者:目标选择器> <内容>
    复制代码

    1. /w <收信者:目标选择器> <内容>
    复制代码

    1. /msg <收信者:目标选择器> <内容>
    复制代码


  这些指令都很简单,也没有什么好讲的,只是需要注意权限等级不够目标选择器不能使用除 @s 以外选择器。
  /msg 有个变种,这个变种是在 Java1.14 版本加入的,仅 Java 版有:/teammsg
  /teammsg 即在队伍频道发送消息,可以简写为/tm(?)、
  /teammsg、/tm
  作用
:队伍频道发送消息
  需要权限等级:0
  格式
  • /teammsg <消息>
  • /tm <消息>

  显示信息格式
  1. ->[队伍名]<玩家名>消息内容
复制代码

  关于队伍是个什么东西,讲记分板时会讲到。
18#2025-12-9 16:52:56回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-9 17:05:56|显示全部楼层 IP:福建省
第十六章 title-屏幕标题

2020年1月6日 17:35 1661字

  /title 指令正如标题所言。可以在屏幕上显示标题,就像是 PPT 的那个大字一样。这个命令相对于之前我们学过的命令比较复杂。
  /title
  用处
:在单个或多个玩家的游戏屏幕上显示标题
  需要权限等级:Java-2,基岩-1
  格式

  1. /title <玩家:目标选择器> clear
复制代码

\\可以清除指定玩家正在显示的标题\\

  1. /title <玩家:目标选择器> reset
复制代码

\\可以复原对指定玩家屏幕标题的渐入、保持、淡出时间的设置\\

  1. /title <玩家:目标选择器> title <主标题内容:JSON 文本[Java] | 字符串[基岩]>
复制代码

\\在指定玩家屏幕正中心显示主标题,如果此时已有主标题正在显示将会覆盖该标题\\

  1. /title <玩家:目标选择器> subtitle <副标题内容:JSON 文本[Java] | 字符串[基岩]>
复制代码

\\在指定玩家屏幕正中心显示主标题时显示副标题,如果此时已有副标题将会覆盖该标题。如果执行指令时并没有主标题正在显示,将会在下次主标题显示时配套出现\\

  1. /title <玩家:目标选择器> actionbar <附加文字内容:JSON 文本[Java] | 字符串[基岩]>
复制代码

\\在指定玩家物品栏上方显示一些文字,如果此时已有文字正在显示将会覆盖这些文字\\

  1. /title <玩家:目标选择器> times <文字渐入时间:游戏刻> <文字保持时间:游戏刻> <文字淡出时间:游戏刻>
复制代码

\\可以对指定玩家屏幕标题文本显示时的渐入、保持、淡出时长进行设置,单位是游戏刻\\

  相信大多数人看了上面六种格式的说明,已经大致会用这条指令了。不难发现,使用 /title 指令可以在屏幕上的三个地方显示文本,一个是屏幕正中心的“主标题”,一个是主标题下方的“副标题”,一个是物品栏上方的“附加文字”。这就有点像什么?没错,PPT。
  让我们打开 PowerPoint 或 WPS Office,新建一个文档,什么排版格式都不要选,然后就是:

单击此处添加标题
单击此处添加副标题


  没错,在 Minecraft 使用 /title 指令时显示的主标题和副标题就是这个样。
  而物品栏上方的附加文字,我们只需要插入一个横排文本框,将其拖到 PPT 页面的“单击此处添加副标题”正下方,注意要对齐中间,然后输入一点文字,再将文字大小改到差不多 12 左右。没错,就是这么个感觉。
  我们也可以在 Minecraft 中使用 /title 做出 PPT 的感觉,只需要这样子摆好命令方块:

A→B→C→


  在 Java 版中这样设置:
  • A:循环,保持开启,不受制约——
    1. title @a title {"text":"单击此处添加标题"}
    复制代码

  • B:连锁,保持开启,不受制约——
    1. title @a subtitle {"text":"单击此处添加副标题"}
    复制代码

  • C:连锁,保持开启,不受制约——
    1. title @a actionbar {"text":"单击此处添加文本"}
    复制代码


  在基岩版中这样设置:
  • A:循环,始终活动,无条件——
    1. title @a title 单击此处添加标题
    复制代码

  • B:连锁,始终活动,无条件——
    1. title @a subtitle 单击此处添加副标题
    复制代码

  • C:连锁,始终活动,无条件——
    1. title @a actionbar 单击此处添加文本
    复制代码


  然后......
  然后你就会看到屏幕上出现了不断闪烁的主标题和副标题,只有物品栏上方的“单击此处添加文本”没有闪。
  这是怎么回事?
  因为标题有渐入保持淡出的时长
  默认这三者的时长是 10 游戏刻(0.5s)、70 游戏刻(3.5s)和 20 游戏刻(1s),可以通过 times 来改变。因为我们要让它一直显示,我们就可以:

  1. /title @p times 0 10000 0
复制代码

  这样子我们也就不需要循环并保持开启了,直接改为脉冲、红石控制就可以了。
  但是这显示的时间也太长了。如果要清除,我们此时就可以使用clear来清除标题:

  1. /title @a clear
复制代码

  同时建议使用 reset 复原刚才对 times 三个值的更改:

  1. /title @a reset
复制代码

  现在,我们算是把 /title 六个格式都用了一遍,基本上掌握了 /title 的使用方法。但我们仍然要注意一些东西。
  首先副标题不会单独显示,而是需要和主标题配套显示。如果在主标题还未显示时指定了副标题,这个副标题将会在下一次主标题显示时配套出现(注意,主标题淡出后也会清除副标题)。
  其次,物品栏上方的文本并不会受到 times、reset 和 clear 的影响,就像刚才作者更改了渐入、保持、淡出三者的时间,只是标题受到了影响,物品栏上方的文本仍然还是按照默认值来。而且,物品栏上方的文本重复显示时并不会闪,而是好端端的正常显示。这两点需要注意。
  最后需要注意的是,Java 版的 title 其文本使用的是 JSON 文本,所以刚才的指令中,Java 版和基岩版的指令不太一样。基岩版也有使用 JSON 文本的 title 指令,它是 /titleraw。上一章讲过的 /tell 指令也有一个 JSON 变种:/tellraw。关于 /tellraw 和 /titleraw 会在下一章以及之后的内容提到。


历史

Java

版本
更新内容
1.8
加入了 /title
1.11
加入了可以在快捷栏(物品栏)上方显示文本的能力


携带版和基岩版

版本
更新内容
1.0.5
加入了 /title
1.9.0
加入了 /titleraw
19#2025-12-9 17:05:56回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 楼主|  发表于 2025-12-9 17:36:03|显示全部楼层 IP:福建省
第十七章 Java版JSON文本初识

2020年1月6日 17:57 3920字

  在上一章提到了 JSON 文本。JSON 文本在学习指令前期估计只有 /title 和 /tellraw 会用到,所以我们这边也就先认识一下如何使用 JSON 文本显示文本内容。
  JSON /ˈdʒeɪsən/,全称 JavaScript Object Notation,是一种轻量级资料交换格式。而我们今天所要了解的,叫做 JSON 文本(JSON Text)。更确切的来说,是原始 JSON 文本(Raw JSON Text)
  需要注意,JSON ≠ JSON 文本 ≠ 原始 JSON 文本。JSON 有很多用途,不仅仅是拿来给你发消息用的。JSON 文本严格来说指的是原始 JSON 文本经过识别所转化成我们人能够看得懂的文本,没有带 JSON 语法的那种,也就是最终的输出形式。原始 JSON 文本既然带有『原始』二字,那就是指还未经过识别的 JSON 文本,也就是还处于原始形态并带有 JSON 语法的 JSON 文本。
  在 Minecraft 中,Java 版和基岩版的 JSON 文本略有差别,但大体都相同。本章主要讲的是 Java 版的原始 JSON 文本的使用,因为在基岩版,原始 JSON 文本在指令中使用程度并不高。我们会在第六十章讲到基岩版的 JSON 文本。
  如果你还没搞懂,也没关系,看下去就完事了。
  原始 JSON 文本听起来很高级,让人望而生畏,给人一种『作者似乎想要尝试教会你们』的样子,但其实它并不高级,相反还很简单。
  简单到什么程度呢?看:

  1. ""
复制代码

  这是一串没有任何内容的简写 JSON 文本,如果将其识别,转化为正式的输出文本格式,那将会是一串空空如也的文本。
  我们可以尝试向里面加入一些东西,比如:

  1. "Hello Minecraft"
复制代码

  这串 JSON 文本被识别后,也就是运行『/tellraw @a "Hello Minecraft"』,将会输出如下内容:

Hello Minecraft

  (注意,JSON 文本的所有括号均为英文半角括号,但阅文平台会自动将英文半角括号改为中文全角括号,所以会有些奇怪)
  是不是很简单?但你有没有注意到,上面我提到『这是一串没有任何内容的简写 JSON 文本』,注意『简写』两字。
  所以它的真正形态是什么呢?如下:

  1. {"text":"Hello Minecraft"}
复制代码

  别害怕,这仍然很简单。
  上面这就是刚才那个『"Hello Minecraft"』的真正形态。我们对这个完全体进行解剖,可以得到如下内容:
  • { —— 一个花括号,这个花括号告诉游戏『嘿,这里是 JSON 文本的开始!』。游戏也根据它的形态,判断出接下来将是一个 JSON 对象
  • " —— 一个英文半角括号,这个括号告诉游戏『这里是一个字符串的开始!』
  • text —— 一串英文。游戏暂且不知道这串英文的意思,于是它继续看下去。
  • " —— 又是一个英文半角括号,这个括号告诉游戏『这里是这个字符串的结束!』
  • : —— 一个英文半角冒号,这个冒号告诉游戏『这里是这个组件 (key-value pairs) 的名称与值的界限!』。游戏根据以往的经验,确认刚刚遇见的『"text"』是这个组件的名称(key),这个组件是一个 text 纯文本内容组件
  • " —— 还是一个英文半角括号,这个括号告诉游戏『这里是又一个字符串的开始!』
  • Hello Minecraft —— 一串内容,游戏根据前面得到的消息,确认这是这个组件的值(value)。游戏因此得知,这个 text 纯文本内容组件将会显示出『Hello Minecraft』。
  • " —— 最后一个英文半角括号,这个括号告诉游戏『这里是这个字符串的结束!』
  • } —— 又一个花括号,这个花括号告诉游戏『这里是 JSON 文本的结束!』

  然后游戏根据以上信息,确认这个原始 JSON 文本的意思是:显示出一串文本(text),内容为『Hello Minecraft』
  我们也可以根据以上信息,了解了这个 JSON 文本:
  • 这个 JSON 文本被一对花括号({})包围,这对花括号标志着这个 JSON 文本的开始和结束
  • 这个 JSON 文本内有两个内容,text 和 Hello Minecraft。这两个内容都是字符串,因此均被英文半角括号("")所包裹着。一对英文半角括号标志着一个字符串的开始和结束。
  • 『"text"』是组件的名称(key),由于是字符串需要加上括号,所以其中的 text 才是具体的名称,意思为『文本』,标志着这个组件的值是一串要被显示出来的文本,也标志着这个组件是一个纯文本内容组件
  • 『"Hello Minecraft"』是这个组件的值(value),由于它是一个字符串,因此要被括号包裹着,所以 Hello Minecraft 才是值的内容。这标志着这个纯文本内容组件将会显示出『Hello Minecraft』。
  • 『:』英文半角冒号是一对『组件名称』与『组件值』的分界线,其左边是名称,右边是值。
  • 『"text":"Hello Minecraft"』像这样的由一对『名称』和『值』组成的东西,叫做『组件』(key-value pairs)
  • 一个组件的名称规定了该组件是个什么东西,干什么用的。值则规定了该组件具体要干什么,怎么干。
  • 如果值或组件名是一个字符串(组件名肯定是),那就得使用括号将其包裹起来。
  • 外面被花括号所包裹着的,里面有一个或多个组件的东西,就像『{"text":"Hello Minecraft"}』这样的,是一个 JSON对象 (Object)

  (注:上面提到的什么『组件』之类的,是本书内才有的叫法,仅为了方便大家理解,官方并无此叫法。『组件』的正式叫法是『键-值对』,又叫做『属性-值对』、『栏位-值对』、『名称-值对』。其中,『键-值对』的英文是『key-value pairs』)
  这就是 JSON 的基础语法,如果你能看懂上面的内容,那就恭喜你,接下来的内容对你来说将会相当简单。
  现在我们已经知道名称叫做 text 的组件,是纯文本内容组件。这个组件所输出的内容是一串平平无奇的文字,没有颜色,也没有什么特效。
  如果我们想要给这串文字添加更多的特效,就要了解更多的组件及其使用方法。
  在 Minecraft Java 的 JSON 文本中,可用的组件可以分为两类:内容组件修饰组件。内容组件用于规定每个 JSON 文本对象能够表现出什么样的内容,一个 JSON 文本对象最多只能有一个内容组件;修饰组件用于修饰内容组件,一个 JSON 文本对象可以拥有多个修饰组件来对输出的内容进行修饰。
  内容组件最基础的是『text』,即上面接触过的纯文本内容组件。
  使用纯文本内容组件,可以显示一串最简单的 JSON 文本,就像上面的那个 JSON 文本:

  1. {"text":"Hello Minecraft"}
复制代码

  需要注意,JSON 文本是对大小写敏感的,因此你不能写成如下的样子:

  1. {"TEXT":"Hello Minecraft"}
复制代码

  那样子会报错。
  上面显示出来的 Hello Minecraft 是最基础的白色。如果要更改文字颜色,那么就需要使用 color 组件(在 Java 版,JSON 文本很难使用分节符)。
  color 的值是字符串,也就是说需要被引号包裹着。值支持 17 种颜色 ID:
  black(黑)、dark_blue(深蓝色)、dark_green(深绿色)、dark_aqua(深湖蓝色)、dark_red(深红)、dark_purple(深紫)、gold(金色)、gray(灰色)、dark_gray(深灰色)、blue(蓝色)、green(绿色)、aqua(湖蓝色)、red(红色)、light_purple(亮紫色)、yellow(黄色)、white(白色)和 reset(取消颜色效果使用默认颜色,一般使用于子 JSON 对象中)
  比如:

{"text":"Hello Minecraft","color":"light_purple"}

  就可以显示一个浅紫色的“Hello Minecraft”。其中,color 颜色组件修饰了 text 纯文本内容组件的颜色为浅紫色。不难发现,如果有多个组件,就得使用英文半角逗号将它们分开。
  如果你认为这些颜色还不够,你甚至可以使用 HTML 的十六进制颜色格式来搞到更多的颜色。比如红色的十六位颜色编码就是:#ff0000,用到 JSON 文本里就是:

{"text":"Hello Minecraft","color":"#ff0000"}

  关于 HTML 十六位颜色编码的具体内容自己上百度或谷歌搜,这儿就不多讲了。
  我们知道分节符 § 不仅可以更改文本颜色,还可以为文本添加更多的格式。那么在 JSON 中,我们该如何为一串 JSON 文本添加格式呢?
  § 能添加五种文本格式,对应到 JSON 中即是:
  • §k 乱码 对应 obfuscated 模糊文本
  • §l 加粗 对应 bold 粗体
  • §m 删除线 对应 strikethrough 删除线
  • §n 下划线 对应 underlined 下划线
  • §o 斜体 对应 italic 斜体

  上面的五个组件其值类型均为布尔值,也就是 true(开启)和 false(关闭)。
  在 JSON 文本中,布尔值和 gamerule 一样,是使用 true 和 false,并且并不需要添加括号,因为不是字符串。
  比如要为 Hallo Minecraft 添加斜体,你就需要这样子:

{"text":"Hello Minecraft","italic":true}

  其中,italic 斜体修饰组件修饰了 text 内容组件为斜体。你可以尝试将 italic 改为其他组件,比如 underlined、bold 之类的。
  现在我们已经了解了 Java 版 JSON 文本的基本使用方法,基本上日常使用是没有什么问题了。
  不对,还有一个问题!如果要在一串 JSON 文本里前面使用一种颜色或文本格式,后面使用另一种颜色或文本格式,那该怎么办?
  确实,使用花括号包裹的 JSON 文本,也就是 JSON 文本对象,就算修饰组件能够含有多个,具体下来其实每个组件也只能包含一个,还没有什么先后顺序。
  那怎么办呢?能不能一次性就使用多个 JSON 文本对象呢?
  答案是可以的。
  我们可以将多个 JSON 文本对象排成一个阵列,组成一个 JSON 文本对象列表
  什么是列表?顾名思义,就是将各种东西列在一起的表格。在 JSON 中,列表内的内容一般都是相同类型,比如都是小数,都是整数,都是字符串,内容与内容之间用英文半角逗号分开,外侧用中括号包裹起来,这样子就形成了一个 JSON 列表。
  比如下面就是一个全都是整数的 JSON 列表:

  1. [1,2,3,4,5,6]
复制代码

  那既然列表内可以放数字,那能不能放字符串、布尔值,甚至是 JSON 对象呢?
  答案也是可以的。
  比如下面这样子:

[{"text":"Hello","color":"blue"},{"text":"Minecraft","color":"black"},"Launcher"]


  JSON 文本在解析的时候,会按照我们正常人所认为的顺序,即从左到右解析。这样子就可以实现 Hello 是蓝色,Minecraft 是黑色,Launcher 是蓝色。
  等等,为什么 Launcher 是蓝色而不是白色?
  因为在一个 JSON 列表中,列表前面的 JSON 对象定义了文本颜色,这个颜色就会传递下去,就算中途有其他对象使用了 color 改变了其他颜色,也只是作用在这个对象内,下一个对象还是使用这个颜色。文本格式也是一样的道理。
  现在就没什么问题了吧?
  需要注意一下,Java1.9 版本之前的 JSON,组件名不需要额外加括号,也就是说在 Minecraft Java1.8 版本,你可以直接这样子:

  1. {text:"Hello Minecraft"}
复制代码




Java JSON历史

版本
更新内容
1.7.2
加入了 /tellraw,第一次有指令支持了 JSON
1.8
加入了使用 JSON 的 /title。告示牌和成书也开始使用 JSON 文本。
1.13
自定义名称使用了 JSON 文本。加入了 name 参数使用 JSON 的 /bossbar 指令。
1.14
物品描述标签支持 JSON文本。
1.16
color 可以使用 HTML 十六位颜色码来更改文本颜色(需要注意这个功能是这时候才添加的)。



20#2025-12-9 17:36:03回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

| 由 木韩网络 提供支持 | GMT+8, 2026-6-13 21:50

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4