手册:Rawtext

来自Minecraft基岩版开发Wiki

引言[编辑]

Rawtext(原始文本) 是以json格式编写的基本文本,也被称为原始JSON。

使用原始文本,您可以更改聊天消息(tellraw)、标题(titleraw)、书籍、物品名称、实体名称、世界名称、记分牌显示以及通过SAPI显示的文本等位置的文本外观。

格式[编辑]

{"rawtext":[{"text":"Hello World"}]}

在上面的例子中,rawtext对应的是一个列表,其中可以装很多节点Node。 节点中带有一些标签(如texttranslatewith等)来完成一些转义操作。根据节点的顺序来排列文本顺序,如:

// 示例(下面内容使用了格式化)
{
  "rawtext":
   [
    {
      "text": "Hello, "
    },
    {
      "text": "world!"
    }
   ]
}

输出的结果是:

Hello, world!

标签[编辑]

text[编辑]

text标签是最基本的标签,直接用来表示文本。

translate[编辑]

翻译内容是rawtext最常见的需要。translate可以用作文本的翻译,它还有一个可选的标签是with

{
  "translate": "wiki.example_translation"
}

translate首先在翻译文件.lang中搜索翻译,若不可再尝试使用套用翻译的方式:

{
  "translate": "Hello, %%s",
  "with": [
    "world"
  ]
}

这也导致如果像wiki.example_translation的内容如果找不到翻译则会直接返回为文本而不报错。

with[编辑]

with用来补充未知的数据,类似于C中的printf但与其和.lang都不同的是,其中的%需要连用两个%来表示。

%%1显示第一个参数。%%2则是第2个以此类推。%%s则是无序的。这些可以参考.lang

如果with提供的数据不全,则不会显示。

with后面不仅可以跟文本也可以跟rawtext

{
  "translate": "wiki.example_translation", 
  "with": {
    "rawtext": [
      {
        "text": "value1"
      },
      {
        "text": "value2"
      }
    ]
  }
}

score[编辑]

score可以用来获取记分板的数据,它需要两个属性nameobjective用于表示用户名和记分板ID

{
  "score": {
    "name": "Wiki",
    "objective": "wiki_example_objective"
  }
}
// 假设有记分板wiki_example_objective其中有用户Wiki

name也可以使用选择器:

{
  "score": {
    "name": "@p",
    "objective": "wiki_example_objective"
  }
}

可以尝试下面的这段命令:

/tellraw @s {"rawtext": [{"text": "我的Wiki记分板的积分是 "}, {"score":{"name": "@s","objective": "wiki_example_objective"}}]}

selector[编辑]

selector,顾名思义,它可以用来获取选择器对应的名称。

{
  "selector": "@p"
}

转义[编辑]

除了使用%%还有其他的特殊转义符(这些内容在.lang文件中也可使用)。

§这个特殊的符号可以进行写特别的转义操作(比如说变色或者斜体)(它们在其他文本区域也可使用),具体内容参见§

另外比较重要的便是反斜杠\

格式 Unicode 效果
\u[Unicode] - 表示转义成Unicode字符
\n \u000a 换行
\" 和 \' \u0022 和 \u0027 用于在JSON文本中表示双引号或单引号

SAPI[编辑]

Rawtext在SAPI中也可以使用,它用于帮助SAPI调用本地化翻译等操作。

SAPI中提供了两个接口(InterfaceTypeScript中的概念),即RawTextRawMessage

RawText与前面介绍的Rawtext基本一致,RawMessage则是rawtext下面的各个节点Node。在JS中可以通过类JSON的表达法来使用这两个接口:

import {
    world
} from "@minecraft/server";

world.afterEvents.playerSpawn.subscribe(eventData => {
    if (!eventData.initialSpawn) return;
    const player = eventData.player;
    player.sendMessage({
        "rawtext": [
            {
                "translate": "xbox.signin.newaccount.welcome",
                // 此处借用XBox的欢迎本地化文本
                "with": [
                    player.name
                ]
            }
        ] 
    });
});

上面的这段内容会让玩家第1次生成时,收到一条欢迎消息。 SAPI中大部分内容都可以使用RawTextRawMessage,上面的内容还可以使用RawMessage来代替:

import {
    world
} from "@minecraft/server";

world.afterEvents.playerSpawn.subscribe(eventData => {
    if (!eventData.initialSpawn) return;
    const player = eventData.player;
    player.sendMessage({
        "translate": "xbox.signin.newaccount.welcome",
        "with": [
            player.name
        ]
    });
});

ServerUI的标题等地方也都可以使用这两个接口,这里有RawMessage的接口内容以供参考。