跳转至

原始文本

原始文本(Raw Text)是Minecraft基岩版中用于构建结构化文本内容的JSON格式,也称为JSON文本。原始文本允许在文本中嵌入翻译键、分数值、选择器结果等动态内容,并支持文本的组合拼接。

概述

在基岩版中,许多需要显示文本的场景都支持原始文本格式,包括/tellraw命令、/titleraw命令、物品的自定义名称(通过/give命令)、告示牌文本等。原始文本通过JSON对象定义,引擎在显示时将其解析为最终的文本字符串。

格式

原始文本的根结构为一个包含rawtext数组的对象。rawtext数组中的每个元素按顺序拼接为最终文本:

{"rawtext": [{"text": "你好"}, {"text": "世界"}]}

上述示例的显示结果为“你好世界”。

在命令中使用原始文本时,整个JSON对象通常作为命令参数写入。例如:

tellraw @a {"rawtext":[{"text":"你好世界"}]}

在脚本API中,原始文本的同类结构通常表现为RawMessageRawText相关类型,由API负责序列化与显示。

文本元素类型

rawtext数组中的每个元素可以是以下类型之一:

纯文本

通过text字段直接指定文本内容:

{"text": "这是一段纯文本。"}

翻译文本

通过translate字段指定翻译键,引擎会在当前语言的语言文件中查找对应的翻译值:

{"translate": "item.apple.name"}

翻译文本可以通过with传入参数,替换语言文件中的%s%1%2等占位符。with可以是字符串数组,也可以是嵌套的原始文本对象:

{"translate": "commands.tp.success", "with": ["Steve", "100", "64", "200"]}

with数组中的元素也可以是原始文本对象,实现嵌套:

{"translate": "chat.type.text", "with": {"rawtext": [{"text": "Steve"}]}}

翻译键通常来自资源包语言文件或原版语言文件。若需要在附加包中提供多语言文本,应优先通过语言文件定义键值,再在原始文本中引用翻译键,而不是在每个命令中硬编码所有语言的文本。

分数

通过score字段显示记分板中的分数值:

{"score": {"name": "Steve", "objective": "kills"}}

name字段支持使用目标选择器。特殊值*表示文本的阅读者自身,常用于让同一条消息对不同玩家显示各自的分数。

选择器

通过selector字段显示目标选择器的结果(即匹配的实体名称):

{"selector": "@a"}

当多个实体匹配时,名称之间以逗号分隔。

组合规则

原始文本没有专用的“段落”或“样式继承”层级。多个元素的显示结果按数组顺序直接拼接,因此文本、翻译、分数和选择器可以混合使用:

{
  "rawtext": [
    { "text": "玩家" },
    { "selector": "@s" },
    { "text": "的分数是" },
    { "score": { "name": "@s", "objective": "points" } }
  ]
}

如果需要在命令中书写该对象,通常需要将其压缩为一行,或由编辑器、函数生成工具负责格式化。

转义字符

原始文本中的文本内容支持以下转义序列:

转义序列 含义
\n 换行
\\ 反斜杠
\" 双引号
\uXXXX Unicode字符

格式化代码

文本内容中可以使用§(分节符)后跟格式化代码来控制文本的颜色和样式,也可以使用等价的Unicode转义形式\u00A7。例如,§a表示绿色文本,§l表示加粗。格式化代码在§r(重置)之前持续生效。

常见格式化代码包括:

代码 含义
§0§9§a§u 颜色代码
§k 随机字符效果
§l 加粗
§m 删除线,旧常见,实际支持情况应以目标版本测试为准
§n 下划线,旧常见,实际支持情况应以目标版本测试为准
§o 斜体
§r 重置颜色与样式

格式化代码属于文本内容的一部分,而不是JSON结构的一部分。它可以出现在text字段中,也可以出现在翻译结果、记分板显示名等最终文本中。