Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
(总感觉语句还要修改一下)
第73行: 第73行:
   
 
<div class="treeview">
 
<div class="treeview">
* {{nbt|compound}} <code>{}</code>根组件。
+
* {{nbt|compound}} 根组件。
** {{nbt|list|rawtext}}:<code>"rawtext":[]</code>含有所有聊天组件对象的列表。
+
** {{nbt|list|rawtext}}:含有所有聊天组件对象的列表。
*** {{nbt|compound}} <code>{}</code>聊天组件对象。
+
*** {{nbt|compound}} 聊天组件对象。
**** {{nbt|string|text}}:<code>"text":"''字符串''"</code>在文本中直接出现的聊天组件。<code>\n</code>用于换行(回车)。如果聊天组件对象中有{{nbt|string|translate}},则{{nbt|string|text}}的内容会被{{nbt|string|translate}}覆盖。
+
**** {{nbt|string|text}}:在文本中直接出现的聊天组件。<code>\n</code>用于换行(回车)。如果聊天组件对象中有{{nbt|string|translate}},则{{nbt|string|text}}的内容会被{{nbt|string|translate}}覆盖。
**** {{nbt|string|selector}}:<code>"selector":"''字符串''"</code>[[基岩版1.16.100.55]]中添加了{{nbt|string|selector}}组件,可以在命令中输出实体的名称,如"@a" "@p" 会被转换。(如{{cmd|<nowiki>/tellraw @a {"rawtext":[{"selector":"@s"}]}</nowiki>}} 会向全体玩家打印执行者玩家的名字)
+
**** {{nbt|string|selector}}:可以在命令中输出实体的名称,如"@a" "@p" 会被转换。(如{{cmd|<nowiki>/tellraw @a {"rawtext":[{"selector":"@s"}]}</nowiki>}} 会向全体玩家打印执行者玩家的名字)
**** {{nbt|string|translate}}:<code>"translate":"''字符串''"</code>使用玩家所选择的语言显示的翻译识别符。此识别符与在assets文件或纹理包的lang文件中所发现的识别符相同。
+
**** {{nbt|string|translate}}:使用玩家所选择的语言显示的翻译识别符。此识别符与在assets文件或纹理包的lang文件中所发现的识别符相同。
**** {{nbt|list|with}}:<code>"with":[]</code>配合{{nbt|string|translate}}使用的聊天字符串参数的列表。
+
**** {{nbt|list|with}}:配合{{nbt|string|translate}}使用的聊天字符串参数的列表。
 
***** {{nbt|string}} 此字符串是与当前语言中使用的参数按顺序所对应的文本(例如,列表中的第一个元素对应于{{nbt|string|translate}}中的<code>%%1</code>)。
 
***** {{nbt|string}} 此字符串是与当前语言中使用的参数按顺序所对应的文本(例如,列表中的第一个元素对应于{{nbt|string|translate}}中的<code>%%1</code>)。
**** {{nbt|compound|with}}:<code>"with":{}</code>with组件的另一种写法,含有一个{{nbt|list|rawtext}}组件。
+
**** {{nbt|compound|with}}:with组件的另一种写法,含有一个{{nbt|list|rawtext}}组件。
***** {{nbt|list|rawtext}}:<code>"rawtext":[]</code>列表中应该为聊天组件对象,此聊天组件对象是与当前语言中使用的参数按顺序所对应的文本。
+
***** {{nbt|list|rawtext}}:列表中应该为聊天组件对象,此聊天组件对象是与当前语言中使用的参数按顺序所对应的文本。
 
****** ...
 
****** ...
**** {{nbt|compound|score}}:<code>"score":{}</code>显示所选目标在所选记分项的当前分数。 如果所选目标或所选记分项不存在,或者所选目标在所选记分项上没有分数,则不显示任何内容。
+
**** {{nbt|compound|score}}:显示所选目标在所选记分项的当前分数。 如果所选目标或所选记分项不存在,或者所选目标在所选记分项上没有分数,则不显示任何内容。
***** {{nbt|string|name}}:<code>"name":"''字符串''"</code>选定要显示分数的目标。可以是@p之类的[[命令|目标选择器]]或虚拟玩家名。如果为<code>*</code>,则会显示阅读者自己的分数(例如,{{cmd|<nowiki>/tellraw @a {"rawtext":[{"score":{"name":"*","objective":"obj"}}]}</nowiki>}}会向每个在线玩家显示他们自己在“obj”记分项的分数)。
+
***** {{nbt|string|name}}:选定要显示分数的目标。可以是@p之类的[[命令|目标选择器]]或虚拟玩家名。如果为<code>*</code>,则会显示阅读者自己的分数(例如,{{cmd|<nowiki>/tellraw @a {"rawtext":[{"score":{"name":"*","objective":"obj"}}]}</nowiki>}}会向每个在线玩家显示他们自己在“obj”记分项的分数)。
***** {{nbt|string|objective}}:<code>"objective":"''字符串''"</code>选定要显示分数的目标所在记分项的名称。
+
***** {{nbt|string|objective}}:选定要显示分数的目标所在记分项的名称。
 
</div>
 
</div>
   

2022年3月18日 (五) 10:16的版本

尝试整合Java版和基岩版内容

此页面用于了解什么是rawtext,具体写法应该放在教程
目前的基岩版原始JSON文本格式介于介绍和教程之间的模糊地带,需要重新整理。

原始JSON文本(Raw JSON Text)是Minecraft用于给玩家发送并显示富文本的格式。原始JSON文本使用JSON编写。

Java版

原始JSON文本由聊天组件组成。根组件可包含有子组件,而子组件也可以有自己的子组件。组件可以包含格式和交互事件,这些也会应用到他们的子组件上。

聊天组件可以使用除“null”外的所有JSON数据类型。数值和布尔值将会视为字符串处理,而字符串和数组用于简写较长的对象结构,见下文所述。

  • 含有纯文本的字符串。与只有标签 text的对象效果相同。例如,"A"{"text": "A"}等价。
  • 布尔值将会转换为字符串直接显示。与只有标签 text的对象效果相同。例如,true"true"{"text": "true"}等价。
  • 数值将会转换为字符串直接显示。与只有标签 text的对象效果相同。例如,1.9E10"1.9E10"{"text": "1.9E10"}等价。
  • 含有多个聊天组件的列表。与含有 extra数组的聊天组件效果相同。[注 1]例如,["A", "B", "C"]{"text": "A", "extra": ["B", "C"]}等价。
  • 一个聊天组件对象。所有非内容标签都是可选的。
    • 内容
    • 一个对象需要包含内容标签才能生效。不同的内容类型及它们对应的标签将于下方说明。可以含有多个内容标签,但最终只有一个会生效。[注 2]
    • 子对象
    •  extra:含有在此组件之后显示的附加聊天组件的列表。
      • 子聊天组件。除非额外指定,子组件将继承父组件的所有格式和交互事件。
    • 格式
    •  color:渲染文字时使用的颜色。有效值有:blackdark_bluedark_greendark_aquadark_reddark_purplegoldgraydark_graybluegreenaquaredlight_purpleyellowwhitereset(取消父对象使用的颜色效果)。
      设置为"#<hex>"可以使用以6位十六进制颜色格式定义的颜色。
    •  font:渲染文字时使用的字体的资源路径。使用的字体在assets/<namespace>/font里定义,默认为minecraft:default
    •  bold:是否将文字渲染为粗体。
    •  italic:是否将文字渲染为斜体。原本为斜体的自定义物品名称可以通过将此值设置为“false”来取消斜体。
    •  underlined:是否为文字添加下划线。
    •  strikethrough:是否为文字添加删除线。
    •  obfuscated:是否将文字混淆处理。
    • 交互事件
    •  insertion:玩家按住⇧ Shift并点击文字时,填入聊天框的的文字。其不会覆盖聊天框内原有的文字。仅在聊天页面中生效。
    •  clickEvent:允许在玩家点击文字时产生事件。若无附加说明,其仅在聊天页面和成书中生效。
      •  action:点击后发生的事件。有效值有:
        • “open_url”:在默认浏览器中将 value作为URL地址打开。
        • “open_file”:打开计算机上位于 value的文件。其用于游戏自动生成的信息中(如截图后显示的信息),且出于安全原因禁止玩家使用。
        • “run_command”:可用于告示牌上,但仅支持在父组件中使用;通过使用告示牌触发。在聊天页面和成书中触发则会以玩家的身份输入 value并发送。其可以用于执行命令,但需要玩家拥有相应的权限;命令必须拥有“/”前缀,否则将会视为聊天信息发送。在告示牌中,命令将由服务器在告示牌所在的位置执行,并将使用告示牌的玩家视为执行者。因为命令由服务器执行,告示牌命令的权限等级与命令方块相同,玩家的权限等级会被忽略;且其不受聊天框长度的限制,可以省略“/”前缀。
        • “suggest_command”:打开聊天页面并输入 value。若聊天框已有内容,其将会被覆盖。在成书中无效。[1]
        • “change_page”:仅在成书中生效。若指定页面存在,将成书翻至第 value页。
        • “copy_to_clipboard”:将 value复制到剪贴板中。
      •  value:指定的URL、文件路径、信息、命令或页码。
    •  hoverEvent:允许在玩家将鼠标放在文本上时显示提示文字。
      •  action:提示文字的类型。有效值有:
        • “show_text”:显示一个聊天组件。
        • “show_item”:显示一个物品的工具提示。与在物品栏中悬浮在物品上时出现的工具提示相同。
        • “show_entity”:显示实体的名称、类型和UUID。用于 selector中。
      •  contents:此标签的格式取决于 action的值。
        • “show_text”:一个聊天组件。可以使用字符串、数组或对象。
        • “show_item”:要显示的物品。
        • “show_entity”:要显示的实体。
          •  name:可选,若未指定则隐藏本参数。将显示为实体名称的聊天组件。
          •  type:指定实体的类型。应为一个命名空间实体ID。若无效则视为minecraft:pig
          •  id:指定实体的UUID。应为一个有效的由连字符连接的十六进制UUID。
      •  value:此标签的格式取决于 action的值。已弃用,请使用 contents代替。
        • “show_text”:一个聊天组件。可以使用字符串、数组或对象。
        • “show_item”:一个物品的数据标签。参见player.dat格式#物品结构
        • “show_entity”:一个数据标签。其不包含所有的实体数据,仅储存实体的名称、类型和UUID。
          •  name:可选,若未指定则隐藏本参数。指定该实体的名称并显示。包含将被解析聊天组件的JSON文本。若字符串无法被解析为聊天组件,整个提示文字会显示为“无效的实体!”。
          •  type:可选,若未指定则隐藏本参数。指定该实体的类型。包含将视为实体类型的纯文本,可以为任何文字。
          •  id:可选,若未指定则显示为空行。指定该实体的UUID。包含将视为UUID的纯文本,可以为任何文字。

由于 extra标签的存在,以上格式可递归嵌套成非常复杂与多样的文本。然而,原始JSON文本不必弄得如此复杂:几乎所有的标签都是可选的。

基岩版

基岩版有着相较于Java版更精简的原始JSON文本格式,它以文本显示为主。在字体样式上以格式化代码替代了Java版中color等多个组件,并抛弃了所有辅助标签。

基岩版中,原始JSON文本可以作用于/tellraw的内容、/titleraw的标题、NPC的名字、书与笔的文本(题目和作者除外)以及告示牌的文本。但selector组件和score组件无法在后三者中生效。

  • 根组件。
    •  rawtext:含有所有聊天组件对象的列表。
      • 聊天组件对象。
        •  text:在文本中直接出现的聊天组件。\n用于换行(回车)。如果聊天组件对象中有 translate,则 text的内容会被 translate覆盖。
        •  selector:可以在命令中输出实体的名称,如"@a" "@p" 会被转换。(如/[[命令/'"`uniq--nowiki-00000003-qinu`"'|'"`uniq--nowiki-00000003-qinu`"']] 会向全体玩家打印执行者玩家的名字)
        •  translate:使用玩家所选择的语言显示的翻译识别符。此识别符与在assets文件或纹理包的lang文件中所发现的识别符相同。
        •  with:配合 translate使用的聊天字符串参数的列表。
          • 此字符串是与当前语言中使用的参数按顺序所对应的文本(例如,列表中的第一个元素对应于 translate中的%%1)。
        •  with:with组件的另一种写法,含有一个 rawtext组件。
          •  rawtext:列表中应该为聊天组件对象,此聊天组件对象是与当前语言中使用的参数按顺序所对应的文本。
            • ...
        •  score:显示所选目标在所选记分项的当前分数。 如果所选目标或所选记分项不存在,或者所选目标在所选记分项上没有分数,则不显示任何内容。
          •  name:选定要显示分数的目标。可以是@p之类的目标选择器或虚拟玩家名。如果为*,则会显示阅读者自己的分数(例如,/[[命令/'"`uniq--nowiki-00000004-qinu`"'|'"`uniq--nowiki-00000004-qinu`"']]会向每个在线玩家显示他们自己在“obj”记分项的分数)。
          •  objective:选定要显示分数的目标所在记分项的名称。

内容类型

聊天组件可以显示多种类型的内容。这些标签应直接包含于聊天组件对象中。

纯文本

显示纯文本,里面的内容会进行转义。即允许使用Unicode编码及换行符\n
基岩版中,还可以使用格式化代码
  • 聊天组件。
    •  text:一段文本。

已翻译文本

以当前语言显示一段已翻译的文本。使用的语言取决于客户端选择的语言,所以不同客户端在收到同一服务器的同一标识符后,客户端会使用各自的语言显示文本。若在客户端内未找到对应的译文,则会检查en_us.json中对应的译文。若依旧未找到,则直接输出翻译标识符本身。
翻译标识符可以在资源包语言文件内指定。也可以使用游戏内置资源包内的翻译标识符。
译文可以包含应用于未知文本的变量。变量通常会以%s(显示列表中的下一个参数)或%1$s(显示列表中的第1个参数;可以将1替换为其他数字,对应列表中的第N个参数)的形式出现。[注 3]显示已翻译文本时,这些变量将由提供的聊天组件列表填充。如果未给某变量提供参数,该变量将不会显示。[注 4]这些变量直接在语言文件中定义,与聊天组件无关。
  • 聊天组件。
    •  translate:一个翻译标识符。
    •  with:可选,含有用于替换译文内变量的聊天组件的列表。不存在 translate时忽略。
      • 一个聊天组件。如果某变量无法获取到聊天组件,该变量将不会显示。
    •  with[仅基岩版]:可选,with组件的另一种写法,含有一个 rawtext组件对象。
      •  rawtext:含有用于替换译文内变量的聊天组件对象的列表。

记分项分数

显示实体在记分板中某个记分项的分数。
  • 聊天组件。
    •  score:显示分数持有者在指定记分项下的当前分数。若指定分数持有者或记分项不存在,或分数持有者未被记分项追踪则不会显示任何内容。
      •  name:分数持有者的名字。可以使用目标选择器、具体名称或“*”。若为*,则会显示读者自己的分数(例如,/tellraw @a {"score":{"name":"*","objective":"obj"}}会给每个在线玩家显示他们自己在“obj”记分项里的分数)。[注 5]
      •  objective:记分项的内部名称。
      •  value[仅Java版]:可选。如果存在,将以此标签的值覆盖原先的分数。

实体名称

显示由目标选择器、玩家名称或*找到的实体的名称。若为*,则会显示读者自己的名称。
若选择器发现了一个实体,则会显示这个实体的名称。若发现了多个实体,则会显示所有被选中的实体的名称,用分隔符(默认为灰色的半角逗号)分隔。若没有发现实体,则不会显示任何文本。
Java版中,鼠标悬浮在名称上时会显示包含名称、类型和UUID的工具提示。点击一个玩家的名称会出现私信该玩家的命令建议;按住⇧ Shift点击玩家名称会将其名称填入聊天框中;按住⇧ Shift点击非玩家实体的名称会将其UUID填入聊天框中。
  • 聊天组件。
    •  selector:一个目标选择器、玩家名称或*
    •  separator[仅Java版]:可选,用作分隔符的聊天组件。默认为{"color": "gray", "text": ", "}。在组件显示多个实体时,使用此标签指定的聊天组件分隔各个实体的名称。

按键绑定

Information icon
此特性为Java版独有。
显示可设置键位的动作当前绑定的键位的名称。其取决于客户端的绑定配置,所以不同客户端在收到同一服务器的同一标识符后,客户端会使用各自的配置显示键位名称。
例如,若使用默认配置,{"keybind": "key.inventory"}将显示为“e”。

NBT标签值

Information icon
此特性为Java版独有。
显示从实体方块实体命令存储处获取的NBT标签的值。
如果NBT标签的值为字符串,则显示它的内容;其他值则将显示为SNBT。如果 interpret为真,游戏会尝试将获取的值解析为原始JSON文本组件并显示。因为JSON和SNBT之间并不相通,这种解析通常只在值为字符串时成功。如果 interpret为真且解析失败,则不会显示任何文本。如果发现多个值(通常由选择了多个对象或路径会选择多个值造成),则会显示所有值,用分隔符(默认为半角逗号)分隔。
  • 聊天组件。
    •  nbt:一段NBT路径,用于指定NBT数据标签。需要同时存在 block entity storage。可以含有多个相应标签,但只会有一个生效。[注 6]
    •  interpret:可选,默认为“false”。若指定为“true”,则会将获取到的每个值视为聊天组件并解析。不存在 nbt时忽略。
    •  separator:可选,用作分隔符的聊天组件。默认为{"text": ", "}。在组件显示多个值时,使用此标签指定的聊天组件分隔各个值。
    •  block:一个坐标,指定要获取数据标签的方块实体。坐标可以是绝对坐标、相对坐标局部坐标。不存在 nbt时忽略。
    •  entity:一个目标选择器,指定要获取数据标签的实体。不存在 nbt时忽略。
    •  storage:一个命名空间ID,指定要获取数据标签的命令存储。不存在 nbt时忽略。

解析组件

组件内的部分标签( score selector nbt[仅Java版])不会一直存在。含有这些标签的组件会被解析:从世界中取得指定数据后,数据会被转化为相应的文本组件,之后用这个转化后的组件替换原来的组件。解析会通过放置告示牌、第一次打开成书、将成书置于讲台上和使用命令完成。在Java版中,它也可以通过物品修饰器“set_name”和“set_lore”完成,但同时需要物品修饰器含有 entity标签。在自定义名称中无法解析这些组件。

此外,解析会固定获取的值。因此,这些组件的内容不再变化,不会因环境的变化而调整相应值。

历史

Java版
1.7.213w37a加入了/tellraw,原始JSON文本用于支持该命令。
1.814w02a加入了文本组件insertion
14w07a加入了文本组件score
14w20a加入了/title,其使用原始JSON文本。
加入了文本组件selector
14w25a现在支持在告示牌成书内使用。
1.1217w16a加入了文本组件keybind
1.1318w01a现在支持在自定义名称内使用。
18w05a加入了/bossbar,参数<name>使用原始JSON文本。
1.1418w43a加入了文本组件nbtblockentity
现在支持在物品描述标签内使用。
18w44a加入了文本组件interpret
1.1519w39a加入了文本组件storage
19w41aclickEvent加入了copy_to_clipboard
1.1620w17a加入了文本组件font
hoverEvent加入了contentsvalue不再使用,但仍受支持。
文本组件color现在可以使用十六进制颜色码来自定义颜色。
1.1721w15a加入了文本组件separator
基岩版
1.9.01.9.0.0加入了/tellraw,原始JSON文本用于支持该命令。
1.16.1001.16.100.55加入了文本组件scoreselector

参见

注释

  1. 请注意,之后的组件将视为第一个组件的子组件,因此第一个组件的格式和交互事件将应用于之后的组件。例如,[{"text": "A", "color": "red"}, "B", "C"]将会输出都被渲染为红色的文本。
  2. 按照 text translate score selector keybind nbt的顺序检查。若提供了多个内容标签,则会使用此列表中最靠前的标签。
  3. Java版中,选择“下一个”参数时忽略已索引变量。所以若译文“Hello %s, %2$s, and %s.”被赋予参数“John”和“Becky”,它将显示为“Hello John, Becky, and Becky.”
  4. 基岩版中,如果完全没定义with组件,则会将变量视为一般文本。
  5. 显示读者自己的分数仅在发送的信息不会被不同玩家同时阅读时生效。显示在聊天信息、/title或被独自阅读的成书[仅Java版]上时会生效,但在告示牌、讲台上的成书等地方将无法生效。
  6.  block entity storage的顺序检查。若提供了多个标签,则会使用此列表中最靠前的标签。

参考