手冊: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的介面內容以供參考。