JSON文本在Java版很常用。在基岩版虽然能用的地方少了很多,但仍然很有用处。
基岩版的JSON文本主要用于指令、书与笔的文本和告示牌的文本上。由于基岩版指令的限制,我们只能在/tellraw和/titleraw两个指令中用到JSON文本。虽然能用的地方极其少,我们仍然得学习学习,就因为/tellraw这条指令极其有用。
基岩版的JSON文本的基础格式如下:
{“rawtext“:[]}
在基岩版中,每串JSON文本的最外层必然是rawtext组件。rawtext的值是JSON对象列表,也就是由多个JSON对象组成的列表。你可以把JSON对象看作是NBT中的复合标签(两者其实没多大差别),方便理解。
基岩版的JSON文本组件相比Java版要少许多。不算rawtext的话,基岩版一共只有五个组件:
\\内容组件\\
text(值:文本)
selector(值:文本)
translate(值:文本)
score(值:JSON对象,相当于NBT的复合标签)
\ranslate配套组件\\
with(值:由多个文本组成的列表)
最基础的组件还是text,用法和Java版的一模一样:
{“rawtext“:[{“text“:“Hello!“}]}
这解析后会变成:Hello!
你有没有注意到,基岩版甚至连文本颜色格式组件都被阉割了,也就是说我们无法使用color组件来修改文字颜色。既然我们无法使用color之类的组件,那么我们该如何修改文本的颜色和格式?
你是不是忘记了一个东西:§
由于基岩版可以自由使用§来修改文本的颜色和格式,因此Mojang就把color之类的文本颜色格式组件给切了。
在基岩版的JSON文本中使用§,需要注意两点:
①§必须要放在内容组件的值中,不能放在组件名等其他地方。虽然放在其他地方在命令方块中也会生效,但JSON文本就无法被游戏正确识别并输出了。
②使用§后记得要及时用§r来重置文字样式,不然会把§右边的所有文本都修改了样式。比如:
{“rawtext“:[{“text“:“§eHello!“},{“text“:“Minecraft“}]}
这将会输出:Hello!Minecraft(都是黄色)
如果是{“rawtext“:[{“text“:“§eHello!§r“},{“text“:“Minecraft“}]},则只会把“Hello!”一段变成黄色。
selector组件可以输出实体名称,其值必须填的是目标选择器。比如:
{“rawtext“:[{“selector“:“@p“}]}
这将会输出距离执行地点最近玩家的名称。假设距离执行地点最近的玩家叫做『Phigros』,那么这将会输出:Phigros
selector的使用还是很简单的。但请注意,你不能把selector当做text一样使用。原因很简单:其值必须是个目标选择器。
如果你把selector当做text一样用,比如这样子填写:
{“rawtext“:[{“selector“:“HelloMinecraft“}]}
你会惊奇地发现执行指令后,没有任何的文本输出,也没有任何的报错信息。
这是为什么呢?因为selector的值必须是个目标选择器,你这样填就相当于要输出玩家HelloMinecraft的名称,而游戏中又没有叫做HelloMinecraft的玩家,自然就不会输出。但如果真的有一个叫做HelloMinecraft的玩家且在线,就会正常输出『HelloMinecraft』。
translate组件是这五个组件中最难的一个,因为它有些涉及到Minecraft的模组、资源包开发。为何这么说?因为translate组件可以让一段文字以目标玩家的语言输出。