原始文本¶
原始文本(Raw Text)是Minecraft基岩版中用于构建结构化文本内容的JSON格式,也称为JSON文本。原始文本允许在文本中嵌入翻译键、分数值、选择器结果等动态内容,并支持文本的组合拼接。
概述¶
在基岩版中,许多需要显示文本的场景都支持原始文本格式,包括/tellraw命令、/titleraw命令、物品的自定义名称(通过/give命令)、告示牌文本等。原始文本通过JSON对象定义,引擎在显示时将其解析为最终的文本字符串。
格式¶
原始文本的根结构为一个包含rawtext数组的对象。rawtext数组中的每个元素按顺序拼接为最终文本:
上述示例的显示结果为“你好世界”。
在命令中使用原始文本时,整个JSON对象通常作为命令参数写入。例如:
在脚本API中,原始文本的同类结构通常表现为RawMessage或RawText相关类型,由API负责序列化与显示。
文本元素类型¶
rawtext数组中的每个元素可以是以下类型之一:
纯文本¶
通过text字段直接指定文本内容:
翻译文本¶
通过translate字段指定翻译键,引擎会在当前语言的语言文件中查找对应的翻译值:
翻译文本可以通过with传入参数,替换语言文件中的%s、%1、%2等占位符。with可以是字符串数组,也可以是嵌套的原始文本对象:
with数组中的元素也可以是原始文本对象,实现嵌套:
翻译键通常来自资源包语言文件或原版语言文件。若需要在附加包中提供多语言文本,应优先通过语言文件定义键值,再在原始文本中引用翻译键,而不是在每个命令中硬编码所有语言的文本。
分数¶
通过score字段显示记分板中的分数值:
name字段支持使用目标选择器。特殊值*表示文本的阅读者自身,常用于让同一条消息对不同玩家显示各自的分数。
选择器¶
通过selector字段显示目标选择器的结果(即匹配的实体名称):
当多个实体匹配时,名称之间以逗号分隔。
组合规则¶
原始文本没有专用的“段落”或“样式继承”层级。多个元素的显示结果按数组顺序直接拼接,因此文本、翻译、分数和选择器可以混合使用:
{
"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字段中,也可以出现在翻译结果、记分板显示名等最终文本中。