JSON文本是指在Minecraft通过JSON代码来表示的文本,它可以是纯文本,也可以具有格式,还能够具有交互效果,或者显示翻译、分数、实体名称、数据。JSON广泛地应用于命令和数据包中。
本文章将介绍JSON文本的格式以及在命令中的用法,阅读本教程时应该要对JSON的语法和用法有一定的了解,参见命令#JSON文本和教程/NBT与JSON。
从数据类型上讲,一个JSON文本一般是字符串、对象(object,也叫组合)和列表。但是,布尔值和数值作为JSON文本也是有效的。
用途
Minecraft的几乎各处都使用了JSON文本。
你在告示牌、书与笔中书写一些文字,这些文字一般都是纯文本,但是从技术上讲,这些文字实际上也是JSON文本,对其数据稍加修改就可以让文字不再是简单的纯文本(和样式代码有一定的相似性)。
你通过铁砧给物品或者实体(命名牌)命名,这个名字实际上也是JSON文本,修改其数据即可使物品或实体的名字带有格式。
进度的名称和描述也是使用了JSON文本,它使用了可翻译元件。如果修改你的游戏语言,进度的名称和描述也将随之改变,这就是由于它是由JSON文本定义了可翻译元件,然后对应到游戏资源文件相应语言的相应内容。通过修改JSON文本,我们也可以让告示牌、物品或实体的名称、书的内容也能够随游戏语言而变化。
可见,JSON文本在游戏内非常普遍。要用命令修改实体的名称、告示牌或书的内容,或者设置记分板项或boss栏的名称,必须要有一点JSON文本的知识。
那么怎么修改一个物品或实体的JSON,或者显示一个JSON文本呢?你将从下面的内容中得到答案。
简单的实例
纯文本
纯文本字符串可以说是最简单、最基础的JSON文本了。将文本内容两段加上双引号(注意是英文的半角双引号),即可形成一个字符串:
"欢迎加入Minecraft"
它就是单个的一个字符串。
对象是最基础的带有格式的文本,几乎所有的格式、交互等都是在这个JSON文本对象中设置的:
{
"text": "欢迎加入Minecraft"
}
上面两个实例的效果都是如下:
欢迎加入Minecraft
一般地,如果你在告示牌输入文字,或者给物品、实体命名,那么这些文字一般都会是纯文本,从JSON的角度讲,它是一个字符串,或一个简单的对象。
所有的卫道士都命名为了Johnny,它们将四处杀戮。
我们知道,在Minecraft内,所有被命名为Johnny的卫道士都会变成“杀人狂魔”,这是一个彩蛋。通常,我们都会通过铁砧将命名牌命名为Johnny,然后再用命名牌将卫道士命名为Johnny,这样它就可以开始癫狂了;或者,在创造模式,可以通过铁砧将卫道士刷怪蛋命名为Johnny,它生成的所有卫道士将会都是被命名为Johnny的。
如何通过命令将所有的卫道士都命名为Johnny呢?可以使用如下命令:/execute as @e[type=vindicator] run data merge entity @s {CustomName:"\"Johnny\""},注意仅限不低于1.13的版本。
此外,从1.14开始,还有更简洁的写法,我们会在后面进行深入讨论。
关于如何通过命令来修改JSON文本,我们在后面会有详细的介绍。
文字的颜色
使用/tellraw命令显示此JSON文本的效果。
你可以通过一个对象对一段文字渲染格式。在这个对象中,"text"的值为文字的内容,而"color"的值为颜色名称。比如下面的实例会将“欢迎加入Minecraft”渲染为深红色:
{
"text": "欢迎加入Minecraft",
"color": "dark_red"
}
效果:
欢迎加入Minecraft
你可以通过/tellraw命令来展示这段红色的文字:
/tellraw @a {"text":"欢迎加入Minecraft","color":"dark_red"}
可用的颜色名称
下表摘录于样式代码#颜色代码。在JSON文本中,作为"color"的值的颜色名称是下表中的“技术性名称”。前景色就是文字显示的颜色,背景色则是文字阴影的颜色(一般只有在聊天框内或者显示为标题内容时才会显示文字阴影)。表中的R、G、B和十二进制表示法,如果看不懂的话可以不用了解。
上面那个图片截取的部分。观察此文字的前景色和背景色。
| 样式代码 | 颜色中文名 | 技术性名称 | 前景色 | 背景色 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| R | G | B | 十二进制表示法 | R | G | B | 十二进制表示法 | |||
| §0 | 黑色 | black | 0 | 0 | 0 | 000000 | 0 | 0 | 0 | 000000 |
| §1 | 深蓝色 | dark_blue | 0 | 0 | 170 | 0000AA | 0 | 0 | 42 | 00002A |
| §2 | 深绿色 | dark_green | 0 | 170 | 0 | 00AA00 | 0 | 42 | 0 | 002A00 |
| §3 | 湖蓝色 | dark_aqua | 0 | 170 | 170 | 00AAAA | 0 | 42 | 42 | 002A2A |
| §4 | 深红色 | dark_red | 170 | 0 | 0 | AA0000 | 42 | 0 | 0 | 2A0000 |
| §5 | 紫色 | dark_purple | 170 | 0 | 170 | AA00AA | 42 | 0 | 42 | 2A002A |
| §6 | 金色 | gold | 255 | 170 | 0 | FFAA00 | 42 | 42 | 0 | 2A2A00 |
| §7 | 灰色 | gray | 170 | 170 | 170 | AAAAAA | 42 | 42 | 42 | 2A2A2A |
| §8 | 深灰色 | dark_gray | 85 | 85 | 85 | 555555 | 21 | 21 | 21 | 151515 |
| §9 | 蓝色 | blue | 85 | 85 | 255 | 5555FF | 21 | 21 | 63 | 15153F |
| §a | 绿色 | green | 85 | 255 | 85 | 55FF55 | 21 | 63 | 21 | 153F15 |
| §b | 天蓝色 | aqua | 85 | 255 | 255 | 55FFFF | 21 | 63 | 63 | 153F3F |
| §c | 红色 | red | 255 | 85 | 85 | FF5555 | 63 | 21 | 21 | 3F1515 |
| §d | 粉红色 | light_purple | 255 | 85 | 255 | FF55FF | 63 | 21 | 63 | 3F153F |
| §e | 黄色 | yellow | 255 | 255 | 85 | FFFF55 | 63 | 63 | 21 | 3F3F15 |
| §f | 白色 | white | 255 | 255 | 255 | FFFFFF | 63 | 63 | 63 | 3F3F3F |
加粗、倾斜、下划线、删除线
你也可以给文字设置加粗效果:
{
"text": "加粗的文字",
"bold": true
}
列表:不同的文字不同的格式
我们已经介绍了字符串和对象,对象可以设置文本的格式,但它会将所有的文本设置为同一个格式。如何将不同的文本设置为不同的格式呢?
可以列表,来实现对不同的文字设置不同的格式。列表中的每个元素实际上也是一个JSON文本(可以说是递归),也就是说可以是字符串、组合或者一个列表。
[
{
"text": "欢迎你加入",
"color": "dark_red"
},
{
"text": "Minecraft",
"color": "blue"
}
]
效果:
欢迎加入Minecraft
(本教程未写完,后续会继续完善)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||