(参考了Minecraft_Wiki:沙盒/基岩版rawtext重写/教程,Java版内容也不是很完备。主要更改:除去过时和不必要的信息;更详细地介绍内容,特别是扩充了translate。同样也需要更有能力的用户审查) |
IcyPhantom(讨论 | 贡献) 小无编辑摘要 |
||
第5行: | 第5行: | ||
本文章将介绍原始JSON文本的格式,阅读本教程时应该要对JSON的语法和用法有一定的了解。 |
本文章将介绍原始JSON文本的格式,阅读本教程时应该要对JSON的语法和用法有一定的了解。 |
||
− | |||
− | 从数据类型上讲,一个原始JSON文本在JSON中的数据类型一般是字符串(String)、对象(Object,也叫组合)或列表(List,也叫数组)。 |
||
== 用途 == |
== 用途 == |
||
第122行: | 第120行: | ||
|- |
|- |
||
|} |
|} |
||
− | |||
⚫ | |||
下面的实例会将“Welcome to Minecraft!”渲染为深红色: |
下面的实例会将“Welcome to Minecraft!”渲染为深红色: |
||
第144行: | 第140行: | ||
效果同上。 |
效果同上。 |
||
+ | |||
⚫ | |||
下面的实例会将“Welcome to Minecraft!”渲染为颜色代码为<code>#1BFF00</code>的绿色: |
下面的实例会将“Welcome to Minecraft!”渲染为颜色代码为<code>#1BFF00</code>的绿色: |
||
第217行: | 第215行: | ||
<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体;">苦力怕</span> |
<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体;">苦力怕</span> |
||
− | 如果选择到了多个实体,那么它默认将会以“实体A, 实体B, 实体 |
+ | 如果选择到了多个实体,那么它默认将会以“实体A, 实体B, 实体C, …”的形式列举,但可以通过[[#为文本指定分隔符:separator|{{nbt|compound|separator}}]]修改。 |
使用这种方法输出的文本可以通过{{key|shift}}+左键获取对应实体的UUID。 |
使用这种方法输出的文本可以通过{{key|shift}}+左键获取对应实体的UUID。 |
||
第298行: | 第296行: | ||
=== 翻译标识符:translate === |
=== 翻译标识符:translate === |
||
{{nbt|string|translate}}大体上有两种用途: |
{{nbt|string|translate}}大体上有两种用途: |
||
− | * |
+ | * 在不同的[[语言]]下显示不同文本,其值为一个翻译标识符。 |
− | * |
+ | * 建立一个文本模板,再将合适的值替换进去。 |
下面的对象使用了[[石头]]的翻译标识符,将会显示石头的名称: |
下面的对象使用了[[石头]]的翻译标识符,将会显示石头的名称: |
||
第376行: | 第374行: | ||
效果: |
效果: |
||
<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体; ">第一个物品是草方块,第二个物品是沙子</span> |
<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体; ">第一个物品是草方块,第二个物品是沙子</span> |
||
− | |||
− | 当然,上面的例子与下面的写法完全等价: |
||
− | <source lang=json> |
||
− | [ |
||
− | "第一个物品是", |
||
− | { |
||
− | "translate": "block.minecraft.grass_block" |
||
− | }, |
||
− | ",第二个物品是", |
||
− | { |
||
− | "translate": "block.minecraft.sand" |
||
− | } |
||
− | ] |
||
− | </source> |
||
− | |||
− | 显然,第二种写法用的是四个独立的对象,而第一种只使用了一个对象,通过参数的赋值传递完成输出。这在输出一大段重复或结构性强的文字时非常有用,比如下面: |
||
− | <source lang=json> |
||
− | { |
||
− | "translate": "%4$s\n%s\n%s\n%s\n%s", |
||
− | "with": [ |
||
− | "\u00A73第一行", |
||
− | "\u00A75第二行", |
||
− | "\u00A7a第三行", |
||
− | "===================" |
||
− | ] |
||
− | } |
||
− | </source> |
||
− | 效果: |
||
− | <span style="font-family:Minecraft, Unifont-subset, 宋体;">===================<br><span style="color:#00AAAA;">第一行</span><br><span style="color:#AA00AA;">第二行</span><br><span style="color:#55FF55;">第三行</span><br>===================</span> |
||
=== NBT标签的值:nbt === |
=== NBT标签的值:nbt === |
||
第476行: | 第445行: | ||
{{nbt|string|text}} > {{nbt|string|translate}} > {{nbt|compound|score}} > {{nbt|string|selector}} > {{nbt|string|keybind}} > {{nbt|string|nbt}} |
{{nbt|string|text}} > {{nbt|string|translate}} > {{nbt|compound|score}} > {{nbt|string|selector}} > {{nbt|string|keybind}} > {{nbt|string|nbt}} |
||
− | 如果一个对象里使用了多个相同的元素,那么只有最 |
+ | 如果一个对象里使用了多个相同的元素,那么只有优先级最高的元素会生效。 |
=== 与文本产生互动 === |
=== 与文本产生互动 === |
||
第556行: | 第525行: | ||
效果: |
效果: |
||
-{}-<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体">标记、标记、标记、...</span> |
-{}-<span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体">标记、标记、标记、...</span> |
||
− | |||
− | 示例3:结合{{nbt|string|translate}}和{{nbt|string|nbt}}。 |
||
− | <source lang=json highlight=7-9> |
||
− | { |
||
− | "translate": "所有苦力怕的生命值:%s", |
||
− | "with": [ |
||
− | { |
||
− | "nbt": "Health", |
||
− | "entity": "@e[type=creeper]", |
||
− | "separator": { |
||
− | "text":"、" |
||
− | } |
||
− | } |
||
− | ] |
||
− | } |
||
− | </source> |
||
− | 效果: |
||
− | <span style="font-size:12pt; font-family:Minecraft, Unifont-subset, 宋体; ">所有苦力怕的生命值:20.0f、20.0f、20.0f、20.0f、20.0f</span> |
||
== 原始JSON文本对象间的关系 == |
== 原始JSON文本对象间的关系 == |
2022年3月20日 (日) 04:24的版本
原始JSON文本(Raw JSON text)是指在Minecraft中使用JSON语言表示的文本。
本文章将介绍原始JSON文本的格式,阅读本教程时应该要对JSON的语法和用法有一定的了解。
用途
Minecraft的几乎各处都使用了原始JSON文本。
你在告示牌、书与笔中书写一些文字,这些文字一般都是纯文本。但是从技术上讲,这些文字实际上是原始JSON文本,对其数据稍加修改就可以让文字不再是简单的纯文本。
通过铁砧给物品或者实体命名,这个名字实际上也是原始JSON文本,修改其数据即可使物品或实体的名字带有格式。
进度的名称和描述也使用了原始JSON文本,它使用了翻译标识符。如果修改你的游戏语言,进度的名称和描述也将随之改变,这是由于它是由原始JSON文本定义了翻译标识符,然后对应到游戏资源文件相应语言的相应内容。通过修改原始JSON文本,我们也可以让告示牌、物品或实体的名称、书的内容也能够随游戏语言而变化。
可见,原始JSON文本在游戏内非常普遍。要用命令修改实体的名称、告示牌或书的内容,或者设置记分项或boss栏的名称,你可以直接输入字符串。但如果你想让其拥有更多样式的话,便必须要有一点关于原始JSON文本的知识。
使用字符串
将文本内容两段加上双引号(注意是英文的半角双引号),即可形成一个字符串:
"Welcome to Minecraft!"
它就是一个单独的 字符串。这个原始JSON文本的效果如下:
Welcome to Minecraft!
一般地,如果你只是为了自定义文本且没有其他需求,你可以直接写成字符串的形式。
原始JSON文本元素介绍
为了使原始JSON文本具有多样性,你可以将其写成一个对象,并在里面使用元素。
纯文本通常是最简单的,但有时候我们希望它有更丰富的内容,这时候我们可以使用别的文本显示元素。它们最终会输出为文本,输出的内容视元素及输入的值决定。一个对象内必须要含有一个文本显示元素。
以下介绍了所有可用的原始JSON文本元素。
纯文本:text
纯文本是最简单、最基础的原始JSON文本元素。
在对象中,可以使用 text来显示特定的文本:
{
"text": "Welcome to Minecraft!"
}
效果:
Welcome to Minecraft!
如果只有 text元素,那么其和字符串的效果是等价的。
值得注意的是,如果文本里出现了“"”或“\”,那么便需要在这些字符的前面加上反斜杠“\”来对其进行转义。其他转义字符在原始JSON文本里也是可用的。
{
"text": "\\u00A7会被转义成\"分节符\""
}
效果:
\u00A7会被转义成"分节符"
对文本进行装饰
有时候我们要将文本渲染成特定的颜色,或者应用特定的格式。这时候以下元素便可以帮助我们渲染文本。
为文本添加颜色:color
color用于指定对象内文本的颜色,其值可以为颜色名称或十六进制颜色代码。
以下为所有可用的文本值:
代码 | 值 | 名称 | 前景色 | 背景色 | ||||||
---|---|---|---|---|---|---|---|---|---|---|
R | G | B | Hex | R | G | B | Hex | |||
§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 |
下面的实例会将“Welcome to Minecraft!”渲染为深红色:
{
"text": "Welcome to Minecraft!",
"color": "dark_red"
}
效果:
Welcome to Minecraft!
如果不使用 color,使用格式化代码也是可以的,但是必须使用\u00A7
来代替§
。
{
"text": "\u00A74Welcome to Minecraft!"
}
效果同上。
此外,你还可以用十六进制颜色代码来添加颜色。十六进制颜色代码使用"#<hex>"
的格式输入,字母的大小写不受限制。相比于文字值,十六进制代码可以指定绝大部分颜色,可以用于自定义颜色。
下面的实例会将“Welcome to Minecraft!”渲染为颜色代码为#1BFF00
的绿色:
{
"text": "Welcome to Minecraft!",
"color": "#1BFF00"
}
效果:
Welcome to Minecraft!
为文本添加格式:bold、italic、underlined、strikethrough和obfuscated
bold(粗体)、 italic(斜体)、 underlined(下划线)、 strikethrough(删除线,中划线)和 obfuscated(随机字符)可以将文本设置为特定的格式。这些元素都是布尔值。
这五个元素分别对应了格式化代码§l
、§o
、§n
、§m
和§k
,并可以对应互相替代。
这些元素可以放在一起使用,这样这些格式将会叠加在一起。
下面的对象将会为文字设置加粗和倾斜效果:
{
"text": "The text with bold and italic",
"bold": true,
"italic": true
}
效果:
The text with bold and italic
obfuscated本质上和其他添加格式的元素相同,但它将会把文本变为会一直变化的随机字符。游戏只会选择与原文本等宽的字符作为其随机字符。
如果这些元素的值被设为“false”,那么它将不会应用该格式。
为文本指定字体:font
font用于指定对象内文本的字体,使用的字体需要在assets/<namespace>/font
内进行定义。若输入字体内不存在的字符,它将会显示为一个方框。字体可以通过资源包添加。
游戏内存在的字体有:
minecraft:default
:预设字体。注意,若开启“强制使用Unicode字体”,其中的字符依旧会变为Unicode字体。minecraft:uniform
:Unicode字体。开启“强制使用Unicode字体”后显示的字体。minecraft:alt
:标准银河字母。在附魔台上会使用此字体。minecraft:illageralt
:Minecraft Dungeons中使用的符文字体。
记分项分数:score
score可以用于显示指定实体的记分项的分数。该元素是一个复合标签,值应该用花括号括起。
花括号内必须要有参数 name和 objective。 name是要显示分数的实体,其值可以为玩家名、目标选择器或*
(选择阅读这段原始JSON文本的实体)。使用目标选择器时,不允许选择多个实体。 objective是对应的记分项名。
{
"score": {
"name": "Jim",
"objective": "dummy"
}
}
这会显示Jim在记分项dummy上的分数。Jim并不一定需要在线,甚至不一定需要存在。如果Jim在dummy上没有分数,那么将什么都不会显示。
实体选择器:selector
selector会显示所有被选中的实体的名称。其值为一个目标选择器。
下面的对象将会显示所有苦力怕的名称:
{
"selector": "@e[type=creeper]"
}
效果:(假设已加载区块中只有一只苦力怕)
苦力怕
如果选择到了多个实体,那么它默认将会以“实体A, 实体B, 实体C, …”的形式列举,但可以通过 separator修改。
使用这种方法输出的文本可以通过⇧ Shift+左键获取对应实体的UUID。
按键键位:keybind
keybind用于显示对应功能的按键,其可以因玩家的设定偏好而改变。
下面的对象将会显示代表打开物品栏的键位:
{
"keybind": "key.inventory"
}
效果:
e
但如果更改了键位,那么它会显示为改变后的打开物品栏的键位。
游戏内分类 | 值 | 游戏内描述 | 默认键位 |
---|---|---|---|
移动 | key.forward | 向前移动 | W |
key.left | 向左移动 | A | |
key.right | 向右移动 | D | |
key.back | 向后移动 | S | |
key.sneak | 潜行 | 左⇧ Shift | |
key.sprint | 疾跑 | 左ctrl | |
key.jump | 跳跃 | space | |
游戏内容 | key.use | 使用物品/放置方块 | 鼠标右键 |
key.attack | 攻击/摧毁 | 鼠标左键 | |
key.pickItem | 选取方块 | 鼠标中键 | |
物品栏 | key.drop | 丢弃所选物品 | Q |
key.swapHands | 交换手中的物品 | F | |
key.inventory | 开启/关闭物品栏 | E | |
key.hotbar.[1-9] | 快捷栏[1-9] | 1 - 9 | |
创造模式 | key.saveToolbarActivator | 保存物品工具栏 | C |
key.loadToolbarActivator | 加载物品工具栏 | X | |
多人游戏 | key.chat | 打开聊天栏 | T |
key.playerlist | 玩家列表 | Tab ↹ | |
key.command | 输入命令 | / | |
杂项 | key.fullscreen | 全屏显示切换 | F11 |
key.smoothCamera | 切换电影视角 | ||
key.togglePerspective | 切换视角 | F5 | |
key.screenshot | 截图 | F2 | |
key.advancements | 进度 | L | |
key.spectatorOutlines | 高亮玩家(旁观者) |
翻译标识符:translate
translate大体上有两种用途:
- 在不同的语言下显示不同文本,其值为一个翻译标识符。
- 建立一个文本模板,再将合适的值替换进去。
下面的对象使用了石头的翻译标识符,将会显示石头的名称:
{
"translate": "block.minecraft.stone"
}
在中文里,它会显示为石头
,但如果将游戏语言切换为英语,这个对象又会显示为Stone
。游戏里除闪烁标语外的所有需要显示文本的地方都使用了翻译标识符。
如果翻译标识符在所选语言里没有对应值,它将使用en_us.json里该翻译标识符的值。如果该翻译标识符无法在任何语言文件里被找到,游戏会直接输出翻译标识符。如果要添加翻译标识符,则需要使用资源包。
下面我们再来看带有参数的翻译标识符。multiplayer.player.joined
就是一个例子,它在中英文语言文件里的值分别为%s加入了游戏
和%s joined the game
。其中%s
是一个参数。当有玩家加入游戏时,游戏会自动输出这个标识符,并将玩家名称填入%s
的位置。
现在,我们来尝试输出这个标识符:
{
"translate": "multiplayer.player.joined",
"color": "yellow"
}
- 游戏语言为中文时:
加入了游戏
- 游戏语言为英语时:
joined the game
显然,%s
没有输出任何内容,这是因为我们还没有向参数赋值。这时,就必须用到 with。
为标识符中的参数赋值:with
有些翻译标识符会使用像“%s”和“%n$s”这样的参数来表示变量。直接使用 translate时,这些参数会被忽略。想要让参数也显示为特定的文本,就需要使用元素 with。
with是一个列表,列表中的每一个元素都应该是原始JSON文本对象。列表内的元素将会这样分配给每个参数:
- 对于“%s”而言,第一个“%s”会使用列表中的第一个元素,而下一个“%s”将会接着使用第二个元素,依次类推,直至不再出现“%s”。
- 对于“%n$s”而言,其将会直接使用列表中的第n个元素。
我们用一个例子来说明这一切。
translation.test.complex
是用于测试的翻译标识符,其在zh_cn.json里的原始值如下:
前缀,%s%2$s 然后是 %s 和 %1$s 最后是 %s 还有 %1$s!
如果只使用 translate元素,它看起来是这样的:
前缀, 然后是 和 最后是 还有 !
现在,我们用 with来给这些参数赋值:
{
"translate": "translation.test.complex",
"with": [
"a",
{ "text": "b" },
{ "text": "c", "color": "dark_red" }
]
}
它看起来是这个样子的:
前缀,ab 然后是 b 和 a 最后是 c 还有 a!
原始值中的“%1$s”和“%2$s”都分别对应了第一个元素"a"
和第二个元素{"text":"b"}
,而其中的“%s”按照从前往后的顺序分别被赋予了"a"
、{"text":"b"}
和{"text":"c","color":"dark_red"}
。
自定义输出文本
我们不仅可以利用语言文件中的翻译标识符,还可以自定义一个翻译标识符。
简单来说,在 translate中填写一个含有参数的字符串,再在 with中填入需要传递的值,就可以了。
{
"translate": "第一个物品是%s,第二个物品是%s",
"with": [
{ "translate": "block.minecraft.grass_block" },
{ "translate": "block.minecraft.sand" }
]
}
效果:
第一个物品是草方块,第二个物品是沙子
NBT标签的值:nbt
nbt用于获取方块、实体或命令存储的NBT标签的值,其以NBT路径的形式书写。
block、 entity和 storage用于指定要获取标签的方块、实体或命令存储。
block的值是一组方块坐标,以“<x> <y> <z>”的形式书写。其可以使用相对坐标,这时以生成文本的位置为基准点。
下面的对象将会显示执行者下面的方块的“Items”标签的值:
{
"nbt": "Items",
"block": "~ ~-1 ~"
}
entity的值是目标选择器。如果选择到了多个实体,那么获取的值将会依次列举。默认以,
分隔,但可以用 separator修改。
下面的对象将会显示最近玩家的“Health”标签的值:
{
"nbt": "Health",
"entity": "@p"
}
storage的值是命名空间ID。
下面的对象将会显示存储test:a
中“a”标签的值:
{
"nbt": "a",
"storage": "test:a"
}
block、 entity和 storage只能使用其中的一个。若存在多个,则按以下优先级选择最终要使用的元素:
block > entity > storage
将获取的值解析为原始JSON文本:interpret
interpret是一个布尔值。当其为“true”时,由 nbt获取的值将会解析为原始JSON文本并显示。
假设在147 78 48处有一个白桦木告示牌,其“Text1”的值如下:
'{"italic":true,"color":"dark_red","text":"I am a happy sign XD"}'
如果直接使用 nbt获取标签的值,结果会直接输出为字符串,不会进行任何解析:
{"italic":true,"color":"dark_red","text":"I am a happy sign XD"}
但如果加入 interpret元素并将其设为“true”:
{
"nbt": "Text1",
"block": "147 78 48",
"interpret": true
}
这会将获取到的值继续以原始JSON文本解析,效果:
I am a happy sign XD
文本显示元素的优先级
一个对象里必须要有一个文本显示元素,但如果存在多个文本显示元素,其将会按照优先级决定最终要使用的文本显示元素。
文本显示元素的优先级如下:
text > translate > score > selector > keybind > nbt
如果一个对象里使用了多个相同的元素,那么只有优先级最高的元素会生效。
与文本产生互动
将特定文字填入聊天栏:insertion
insertion元素可以让玩家按住⇧ Shift点击文字时,将特定的一串文字输入进玩家的聊天栏中。输入的文本不会替换聊天栏里原有的文本。该元素只有在使用/tellraw
显示时才生效。
{
"text": "155652",
"insertion": "155652"
}
如果按住⇧ Shift点击文本,在玩家的聊天栏内将会输入“155652”。
点击文字时产生事件:clickEvent
clickEvent可以用于指定在点击文本时产生的事件。该元素是一个复合标签,值应该用大括号括起。
大括号内必须要有参数 action和 value。 action是点击文本后执行的事件。 value是要执行的事件的值。
action接受以下值:
action的值 | 描述 | value的值 | 可用性 |
---|---|---|---|
open_url |
打开网页 | 网页地址(http://example.com) | 聊天、成书 |
run_command |
发送命令 | 字符串 | 聊天、成书、告示牌 |
change_page |
切换页码 | 正整数 | 成书 |
suggest_command |
输入命令 | 字符串 | 聊天 |
copy_to_clipboard |
复制内容至剪贴板 | 字符串 | 聊天、成书 |
悬浮在文字之上时显示说明提示:hoverEvent
hoverEvent可以用于指定悬浮在文字上时产生的提示文本。该元素是一个复合标签,值应该用大括号括起。
大括号内必须要有参数 action,并且 value和 contents必须有其一。 action是提示文本的类型。 value或 contents是提示文本的内容。
action接受以下值:
action的值 | 描述 | value或 contents的值 | 备注 |
---|---|---|---|
show_text |
显示文字 | 原始JSON文本 | value或 contents可以是字符串、复合标签或列表。 |
show_item |
显示物品 | "{id:\"<命名空间ID>\",Count:<数量>,tag:{<NBT标签>}}" |
value或 contents为字符串,里面的内容需要转义。 |
show_entity |
显示实体 | "{type:\"<实体类型ID>\",id:\"<UUID>\",name:<实体显示名称>}" |
value或 contents为字符串,里面的内容需要转义,其中 name为另一原始JSON文本。 |
分隔文本中的多个项目
为文本指定分隔符:separator
separator用于指定当文本选中多个元素的字符串或原始JSON文本,如 selector或其他键时,使用的分隔符。
也就是说,若一个元素有多个显示,我们可以指定用特殊符号将其分隔开来。若不设定的话,预设为,
。
示例1:不指定分隔符。
{
"selector": "@e[type=marker]"
}
效果:
标记, 标记, 标记, ...
示例2:使用、
作为分隔符。
{
"selector": "@e[type=marker]",
"separator": {
"text": "、"
}
}
效果:
标记、标记、标记、...
原始JSON文本对象间的关系
你可以使用列表,并将多个原始JSON文本对象放入列表中。列表中的每个元素将会依次显示。
下面这个例子拥有2个对象:
[
{
"text": "Welcome to ",
"color": "dark_red"
},
{
"text": "Minecraft!",
"color": "blue"
}
]
效果:
Welcome to Minecraft!
父对象与子对象
在原始JSON文本对象列表中,第一个对象的样式将会影响所有后续的对象。因此,我们可以说第一个对象便是父对象,其余的对象都是子对象。
下面这个例子中,因为子对象继承了父对象的样式,所以整个文本都会采用深红色+下划线的样式:
[
{
"text": "Welcome to ",
"color": "dark_red",
"underlined": true
},
{
"text": "Minecraft"
},
"!"
]
效果:
Welcome to Minecraft!
我们可以让第一个元素为空值,这样父对象就会没有样式,因此也不会有任何样式影响后续的文本:
[
"",
{
"text": "Welcome to ",
"color": "dark_red",
"underlined": true
},
{
"text": "Minecraft"
},
"!"
]
效果:
Welcome to Minecraft!
继承对象的属性:extra
extra内的原始JSON文本将会继承该元素的所有属性。
{
"text": "Welcome to ",
"color": "dark_red",
"underlined": true,
"hoverEvent": {
"action": "show_text",
"value": {
"text": "Minecraft!"
}
},
"extra": [
{
"text": "Minecraft!"
}
]
}
效果:
Welcome to Minecraft!
可以看到, extra内的{"text":"Minecraft!"}
继承了原对象的 color、 underlined和 hoverEvent元素。
参见
|