<本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

原始JSON文本格式

来自Minecraft Wiki
(重定向自JSON文本
跳转至: 导航搜索

原始JSON文本用于显示带有格式或触发事件的文本。

结构[编辑 | 编辑源代码]

原始JSON文本使用严格的JSON语法。

Java版[编辑 | 编辑源代码]

原始JSON文本的格式是JSON字符串、JSON列表或复合标签。JSON文本的格式支持以下(大多是可选的)元素的JSON对象。

从技术上讲,被定义为字符串的元素也可以为数字或布尔值,不需要添加引号。

  • 直接显示的原始文本字符串。与只有标签 text基础对象效果相同。
  • 除数组中的其他对象会成为第一个对象的 extra内的值外,与列表中所有对象要显示的内容相同。每一个元素都与原始JSON文本结构重复。
  • 基础聊天组件对象。
    •  text:字符串,存储在聊天框中直接出现的纯文字。注意像是“@a”和“@p”的选择器并不会转译成玩家名字,必须使用selector代替。可以使用转义字符,例如用“\n”换行、“\t”缩进等。
    •  translate:显示文本的翻译标识符,用于将文本翻译至玩家使用的语言。此标识符与从assets文件夹或资源包中找到的语言文件的标识符一致。当 text存在时忽略此参数。如果翻译标识符无效,则显示标识符本身。
    •  with:包含用于 translate的聊天元素组件的列表。在其他情况下没有效果。
      • 该参数为当前语言翻译文本中出现的参数赋值,参数依序排列(例如,列表中的第一个元素将会取代翻译文本中的“%1$s”),参数与本结构相同。如果翻译标识符无效,但含有%s或%1$s这样的内容,则也能够替换。
    •  score:一个玩家在一个记分板目标里的分数。若该玩家没有被该记分板目标追踪,则什么都不显示。当上述的文本显示字段存在时忽略此参数。
      •  name:要被显示分数的玩家的名字。可使用选择器(例如@p),以及记分板系统中存在的虚拟玩家名称。另外,如果名称为“*”,会显示读者自己的分数(例如,/tellraw @a {"score":{"name":"*","objective":"obj"}}将给每个在线玩家显示他们自己在“obj”目标里的分数)。
      •  objective:要显示分数的记分板目标的内部名称。
      •  value:可选。如果存在,将以此元素的值覆盖目标原先的分数。
    •  selector:一个包含了一个选择器(@s、@p、@a、@r或@e)的字符串以及可选的选择器参数。不像text,此处的选择器将会被解析为正确的玩家/实体名。如果多于一个玩家/实体符合条件,其将会被以例如“名字1, 名字2”或“名字1,名字2,名字3,名字4”的形式显示。当上述的文本显示字段存在时忽略此参数。在/tellraw命令中使用此标签时,点击结果中的玩家名称会出现私信该玩家的命令建议;按住⇧ Shift点击玩家名称会将名称填入聊天框中;按住⇧ Shift点击非玩家实体的名称会将其UUID填入聊天框中。
    •  keybind:显示用于执行特定操作的按键键位。例如,key.inventory会向玩家显示打开物品栏的按键,若玩家使用默认设置,则会显示“E”。当上述的文本显示字段存在时忽略此参数。
    •  nbt:一段NBT路径,用于从实体或方块处查找特定NBT数据标签的值并将其显示。当上述的文本显示字段存在时忽略此参数。
    •  interpret:布尔值,用于说明是否将 nbt指示的字符串化NBT值解释为原始JSON文本(根据此原始JSON文本结构)。 若不为原始JSON文本或不存在 nbt则没有效果。
    •  block:字符串,指定要获取NBT数据标签的方块实体的坐标。坐标可以是绝对坐标或相对坐标 nbt不存在时没有效果。
    •  entity:字符串,以目标选择器的形式指定要获取NBT数据标签的实体。 nbt不存在时没有效果。
    •  storage:字符串,指定要获取NBT数据标签的命令存储命名空间ID nbt不存在时没有效果。
    •  color:渲染文字时使用的颜色。有效值有:“black”、“dark_blue”、“dark_green”、“dark_aqua”、“dark_red”、“dark_purple”、“gold”、“gray”、“dark_gray”、“blue”、“green”、“aqua”、“red”、“light_purple”、“yellow”、“white”和“reset”(取消父对象使用的颜色效果)。技术上来说,“bold” (粗体)、“underline”(下划线)、“italic”(斜体)、“strikethrough”(删除线)和“obfuscated”(模糊处理)都是可接受的,不过建议使用下文提到的标签来实现。
    •  bold:布尔值(true/false) - 是否将文字渲染为粗体,默认为false。
    •  italic:布尔值(true/false) - 是否将文字渲染为斜体,默认为false。
    •  underlined:布尔值(true/false) - 是否为文字添加下划线,默认为false。
    •  strikethrough:布尔值(true/false) - 是否为文字添加删除线,默认为false。
    •  obfuscated:布尔值(true/false) - 是否将文字模糊处理,默认为false。
    •  insertion:当玩家按住⇧ Shift并点击文字时,此字符串会自动填入聊天编辑框中。不会覆盖原有的文字。
    •  clickEvent:当玩家点击文字时产生的事件。
      •  action:当点击文字时所触发的操作。有效值为“open_url”(在玩家的默认浏览器中打开value中的URL地址)、“open_file”(打开用户计算机上的value文件)、“run_command”(以玩家的身份在聊天框中输入value值并提交。可以用来执行命令,但是如果玩家没有所需的权限,命令会失败)、“change_page”(只能用在成书中,如果该value页存在,翻至该页)、“suggest_command”(和“run_command”相似,但是文本只会出现在玩家的聊天输入栏,并不会自动提交。与insertion不同,这会直接取代原先在聊天输入框中的内容)和“copy_to_clipboard”(将value复制到剪贴板中)。“open_file”用于游戏自动生成的信息中(如截图时显示的信息),不能在命令和告示牌中使用。
      •  value:前述指定的action使用到的URL地址、文件、聊天内容、命令或书页。注意,命令之前一定要加上“/”斜杠。
    •  hoverEvent:当玩家将鼠标指针悬浮在文字之上时显示的说明提示。
      •  action:说明提示的类型。有效值为“show_text”(显示JSON文本)、“show_item”(显示一个可带NBT标签的物品)和“show_entity”(显示实体的名称,还可能显示其类型和UUID)。
      •  value:此标签的格式取决于action。注意,“show_text”是唯一接受对象作为值的类型;其他类型对应的值都是字符串,所以必须用引号引起。
        • “show_text”:可以是字符串,或是与基础对象格式相同的一个对象。注意,此对象的clickEventhoverEvent在说明提示中不会生效,但是它的格式和extra标签仍然有效。
        • “show_item”:与物品NBT标签格式相同的的字符串。包含“id”标签,和可选的“Damage”标签和“tag”标签(和/give命令所使用的“dataTag”标签中的组合相同)。
        • “show_entity”:描述一个组合的字符串,包含值“type”(例如“Zombie”)、“name”和“id”(要求为实体UUID,但接受任意字符串)。
    •  extra:附加对象的列表,格式与基础对象相同。
      • 与基础聊天组件对象格式相同的附加对象。注意所有对象的属性都会被其子对象所继承,除了textextratranslatewithscore。这意味着子对象会保留与父对象相同的格式和事件,除非子对象有自己的属性将其覆盖。

由于extra标签的存在,以上格式可递归地嵌套成非常复杂与多功能的字符串。然而,JSON文本不必弄得如此复杂:几乎所有的属性都可选或会被忽略。

为了确保有效,每一个对象至少应该包含以下任意一个元素:texttranslatescoreselectorkeybindnbt(其余的元素都是可选的)。为使用方便,整个对象可以只用一个字符串表示。此时字符串视为text的值。例如,"This is raw text"{"text":"This is raw text"}是等价的。这种写法在任何需要使用JSON文本的地方都是有效的(包括/tellraw里面所用到的<raw json message>参数,extra列表中的元素,以及hover_event中“show_text”的value值)。

基岩版[编辑 | 编辑源代码]

与Java版不同,基岩版里的原始JSON文本更为简单且严格。

  • 根标签。
    •  rawtext:包含所有文本对象的列表。
      • 基础聊天对象。
        •  text:在文本中直接出现的原始文本的字符串。\n用于换行(回车)。在 translate存在时会被忽略。
        •  translate:使用玩家所选择的语言显示的翻译识别符。此识别符与在assets文件或材质包的lang文件中所发现的识别符相同。
        •  with:包含 translate使用的聊天字符串参数的列表。在其他情况下没有效果。
          • 与当前语言中使用的参数按顺序所对应的文本(例如,列表中的第一个元素对应于translate中的“%%1”)。

解析[编辑 | 编辑源代码]

本结构将会被解析并显示为文本。显示的文本、格式和触发器由包含的聊天组件元素决定。一些组件将会因为其他组件或显示文本的方式而被忽略。

/tellraw也接受一个对象及字符串数组,数组与extra的处理方式大致相同(首个元素视作其后元素的父元素,继承文字样式)。它也接受多层嵌套的数组树,这样会以最深层的数据开始解释。例如:

/tellraw @a ["Hello there, ",{"selector":"@p"},"."]
/tellraw @a [[[["The "],[["quick ","brown "],[{"selector":"@p"}," jumps "],"over "],"the "],["lazy ","dog."]]]

在告示牌被放置或修改时,或在一本成书被“翻开”(书写后第一次打开)时,记分板分数和目标选择器会被解析成具体的值。这些结果不再更新,使用NBT编辑器修改已存在的告示牌或已翻开的书也不会起作用。解析的结果无法在告示牌上换行,或在书上换页,超出的文字只会直接消失。

历史[编辑 | 编辑源代码]

Java版
1.7.2 13w37a 加入了/tellraw,原始JSON文本用于支持该命令。
1.8 14w02a 加入了文本组件insertion
14w07a 加入了文本组件score
14w20a 加入了/title,其使用原始JSON文本。
加入了文本组件selector
14w25a 现在支持在告示牌成书内使用。
1.12 17w16a 加入了文本组件keybind
1.13 18w01a 现在支持在自定义名称内使用。
18w05a 加入了/bossbar,参数<name>使用原始JSON文本。
1.14 18w43a 加入了文本组件nbtblockentity
现在支持在物品描述标签内使用。
18w44a 加入了文本组件interpret
1.15 19w39a 加入了文本组件storage
19w41a clickEvent加入了copy_to_clipboard
基岩版
1.9.0 beta 1.9.0.0 加入了/tellraw,原始JSON文本用于支持该命令。

另见[编辑 | 编辑源代码]

外部链接[编辑 | 编辑源代码]