原始JSON文本是一种对显示的文本添加修改的方法——其可以是改变文本颜色或是根据用户的区域设置显示其地区的文本。
在基岩版中,原始JSON文本可以作用于/tellraw
的内容、/titleraw
的标题、书与笔的文本(题目和作者除外)以及告示牌的文本。
原始文本格式
基岩版的原始文本格式是一个支持以下元素(大部分可选)的JSON对象。
- 根标签。
- rawtext:含有所有文本对象的列表。
- 基础聊天对象。
- text:在文本中直接出现的原始文本的字符串。\n用于换行(回车)。如果文本中有translate,则text的内容会被translate覆盖。
- selector:在1.16.100.55中添加了selector的组件,可以在命令中输出实体的名称,如"@a" "@p" 会被转换。(如
/tellraw @a { "rawtext" : [ { "selector" : "@s" } ] }
会向全体玩家打印执行者玩家的名字) - translate:使用玩家所选择的语言显示的翻译识别符。此识别符与在assets文件或纹理包的lang文件中所发现的识别符相同。
- with:translate使用的聊天字符串参数的列表。参数支持["string", ...]或{rawtext}。
- 此参数是与当前语言中使用的参数按顺序所对应的文本(例如,列表中的第一个元素对应于translate中的“%%1”)。
- score:显示所选目标在所选记分项的当前分数。 如果所选目标或所选记分项不存在,或者所选目标在所选记分项上没有分数,则不显示任何内容。
- name:选定要显示分数的目标。可以是@p之类的目标选择器或假名。如果为目标选择器,则必须保证不会选择多个实体。如果为
*
,则会显示阅读者自己的分数(例如,/tellraw @a {"rawtext":[{"score":{"name":"*","objective":"obj"}}]}
会向每个在线玩家显示他们自己在“obj”记分项的分数)。 - objective:选定要显示分数的目标所在记分项的名称。
- value:可选。如果存在此值,则无论分数是多少,都将使用此值。
- name:选定要显示分数的目标。可以是@p之类的目标选择器或假名。如果为目标选择器,则必须保证不会选择多个实体。如果为
- 基础聊天对象。
- rawtext:含有所有文本对象的列表。
基础原始文本示例:
/tellraw @a { "rawtext" : [ { "text" : "Hello world" } ] }
这将向所有玩家发送一条消息“Hello world”。然而,这是对于英语而言的,请参阅#Translate操作以知道如何使用语言的本地化。
组件需要包裹在“{ }”内(如 { "text" : "Hello world" }
)。且组件名和值需要用“ ”括起(如 "text"
,"Hello world"
),组件的赋值需要使用“:”进行(如 "text" : "Hello world"
),每个组件都要在上级“[ ]”中。
追加用法
原始文本接受一批文本对象。列表中的每一个对象都会添加到之前的对象中,例如:
/tellraw @a { "rawtext" : [ { "text" : "Hello" }, { "text" : "World" } ] }
用于组合两种不同语言的文本或给每个字符加上不同的颜色等。
Translate
translate允许使用者使用其他语言。如果其和text一起存在,其会覆盖text。translate提供的字符串是语言文件中字符串的名称。例如,原版Minecraft中,“commands.op.success”是当玩家使用/op
成功时显示的字符串。
/tellraw @a { "rawtext" : [ { "translate" : "commands.op.success" } ] }
这将向所有玩家显示“已将 %s 设为管理员”。请注意,由于在指定了translate的情况下忽略了text,下面的示例将输出相同的文本:
/tellraw @a { "rawtext" : [ { "text":"Hello World", "translate":"commands.op.success" } ] }
With
在上面的translate示例中,反馈消息为“已将 %s 设为管理员”。如果要显示名称或其他文本而不是%s,还需要指定“with”。值得注意的是,“with”只与“translate”一起使用,其参数可以使用使用列表类型的[]
或者Rawtext{}
。例如:
/tellraw @a { "rawtext" : [ { "translate" : "commands.op.success", "with" : [ "Steve" ] } ] }
将向所有玩家显示“已将 Steve 设为管理员”。
%%s
可以在“translate”中直接使用“%%s”,而不需要使用本地文件中相应的字符串。例如:
/tellraw @a { "rawtext": [ { "translate" : "Hello %%s", "with": [ "Steve" ] } ] }
这将向所有玩家显示“Hello Steve”。
多个%%s
%%s可多次使用,其将会按照“with”中的顺序填写。若%%s的个数多与“with”中的个数,多出的部分显示为空。
/tellraw @a { "rawtext": [ { "translate" : "Hello %%s and %%s", "with": [ "Steve", "Alex" ] } ] }
这将向所有玩家显示“Hello Steve and Alex”。
使用%%#更改顺序
%%s的顺序可以更改,方法是使用%%#,并替换#为其在“with”中的排列数字。若“with”中没有指定此位置,则显示为空。例如,要在上面的示例中交换Steve和Alex的位置,输入命令:
/tellraw @a { "rawtext" : [ {"translate" : "Hello %%2 and %%1", "with": [ "Steve", "Alex"] } ] }
这将向所有玩家显示“Hello Alex and Steve”。
同时使用多个组件
组件于组件之间需要用“,”(半角逗号)隔开。
/tellraw @a { "rawtext" : [ { "selector" : "@s " },{ "text" : " 记分板obj的值是:" },{ "score" : { "name" : "@s" , "objective" : "obj"} } ] }
会打印出执行者的名字,加上文本“记分板obj的值是: ”,加上自己obj的记分板数值。
假设玩家叫Steve,obj记分板值为1234,则会输出 "Steve 记分板obj的值是: 1234" 。
语言