分项与数组

extra-分项 以及 JSON array-JSON数组 提供了让多个不同的文本对象同时存在的可能性
例如想让一条tellraw命令中使用多个不同样式的文本对象,或者是组合多个JSON结构时使用

同时它们在告示牌成书之中也有重要的角色
并且继承的特性有时能让一些样式上的设定变得方便

基础

extra-分项是一个附加在JSON文本中的数组对象
其格式为

extra:[{<JSON文本1>},{<JSON文本2>},......]

JSON文本1、JSON文本2...等等的文本对象会被放在当前对象之后。


而JSON array则是由[]包围的JSON文本,在需求JSON文本的命令/NBT中,可以直接使用[]输入一个JSON数组,取代使用{}来输入单一对象

使用一个简单的例子:

tellraw @a {"text":"Hello World"}

1

最基础的一条tellraw命令也可以分别以extraarray的形式重写
array:

tellraw @a [{"text":"Hello"},{"text":" World"}]

或者

tellraw @a ["Hello"," World"]

(在array中,可以用双引号直接取代简单的text对象,可以和完整的JSON文本混合使用)

1

extra:

tellraw @a {"text":"Hello","extra":[{"text":" World"}]}

1

三者效果是完全一样的


extra内也可以添加多个JSON文本

例如:

tellraw @a {"text":"Hello","extra":[{"text":" Minecraft"},{"text":" World"}]}

41


不过由于extraarray的效果和特性基本一致,出于arrayextra使用上方便一点,以及格式上比较方便阅读和美观,个人推荐尽量使用array

然而在进度里,文件只能够使用Compound,因此只能使用extra。

应用

extra及array最大的应用,就是可以分别设置每一个JSON文本的属性
例如:
array:

tellraw @a [{"text":"Hello","color":"red"},{"text":" Minecraft","color":"green"},{"text":" World","color":"blue"}]

extra:

tellraw @a {"text":"Hello","color":"red","extra":[{"text":" Minecraft","color":"green"},{"text":" World","color":"blue"}]}

42

不仅仅是颜色之类的样式代码,还可以是CE(clickEvent)和HE(hoverEvent)

例如:
array:

tellraw @a [{"text":"Hello","color":"red"},{"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}},{"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}]

extra:

tellraw @a {"text":"Hello","color":"red","extra":[{"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}},{"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}]}

由于命令比较长,下面将会把命令分解出来说明

这条/tellraw命令分别有3个JSON文本:

  • 第一个JSON文本(array内首个对象,或者是带有extra列表的那个对象),我们可称之为主项:

    {"text":"Hello","color":red}
    

    其设定为红色的"Hello"

  • 第二个对象:

    {"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}}
    

    其设定为绿色的" Minecraft",点击执行/say Minecraft

  • 第三个对象:

    {"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}
    

    其设定为蓝色的" World",悬浮时显示"World"

效果就会是:
43


不仅如此,它们还可以设置不同结构的JSON(例如组合text,score和selector)

例如:
array:

tellraw @a [{"text":"Nearest Player:"},{"selector":"@p"}]

extra:

tellraw @a {"text":"Nearest Player:","extra":[{"selector":"@p"}]}

这里有两个对象:

  • 主项的文本:"Nearest Player:"

  • 和第二项的@p选择符

效果就是:
44

继承

extraarray都拥有继承的特性
所有分项(array里面首个之后的对象/extra列表里面的所有对象)都会继承到主项(array里面首个对象/带有extra列表的那个对象)的设定

举个例子帮助理解:
array:

tellraw @a [{"text":"Hello","bold":true},{"text":" World"}]

extra:

tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" World"}]}

45

在本例中,只有主项设置了bold属性,但是由于继承的特性,分项也同时拥有了粗体的样式

但是反之,分项的设定并不会影响主项,例如:
array:

tellraw @a [{"text":"Hello"},{"text":" World","bold":true}]

extra:

tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" World","bold":true}]}

46

同时,分项之间并不会互相影响,并且继承而来的属性可以被覆盖
例如:
array:

tellraw @a [{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","bold":false}]

extra:

tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" Minecraft","color":"green"},{"text":" World","bold":false}]}

47

详细分析一下以上的命令,以上的/tellraw拥有三个对象

  • 主项为"Hello",拥有bold属性

  • 第二项" Minecraft",继承了bold属性,并且设定了颜色为绿色

  • 第三项" World",虽然应该继承主项的bold属性,但是bold:false设定覆盖了继承而来的属性,同时也不受第二项的颜色属性影响

虽然本节没有使用CE/HE作为例子,但它们也是可以如同样式代码一样被继承的,规则相同。但如果子对象也有设置CE/HE,继承下来的事件会被取代。


如果有时需要设定一段格式差异较大的JSON文本,例如只想将第一段文字设定为粗体,其他都不要,那么后面的文本是不是都要设定bold:false这么麻烦?

一个方便的做法为,将主项设置为空项,例如:
array:

tellraw @a ["",{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","italic":true}]

extra:

tellraw @a {"text":"","extra":[{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","italic":true}]}

48

这样即可确保每一个JSON文本的独立性,减少互相干扰

results matching ""

    No results matching ""