Rawメッセージ(raw text、raw message) は/tellrawや/titlerawコマンドで用いる、テキストに特殊な設定を行うための書き方です。Rawメッセージにより、テキストにエンティティの名前やスコアボードの値を挿入することが可能となります。
Raw メッセージ の基本
Rawメッセージの最小構成は以下のようになります。
{"rawtext":[]}
しかしこれだけだと何のメッセージも持ちません。コロンの後にある[]の中に実際のテキストデータを入れていくことになります。例えば「こんにちは」というテキストと「(自身のプレイヤー名)」というテキストを含むメッセージは以下のように書きます。
{"rawtext":[{"text":"こんにちは"},{"selector":"@s"}]}
このように{}で囲いデータを記入していきます。{}内ではtextやselectorといったメッセージの種類を示す部分と、”こんにちは、”や”@s”のようなデータを示す部分の対になっています。
また、{}で囲まれたデータが複数ある場合はコンマで区切ります。
このようなRaw メッセージは/titlerawや/tellrawなどのコマンドで用います。例えば以下のように/tellrawで自身に対して実行すると、「こんにちは{自分の名前}」というメッセージを送信することができます。
/tellraw @s {"rawtext":[{"text":"こんにちは"},{"selector":"@s"}]}
ちなみに、少し難しい言い方をすると、RawメッセージはJSONと呼ばれるプログラミング等で用いられるデータ構造を持ちます。アドオンでもxxx.jsonという拡張子が.jsonのファイルを編集することがありますが、そのようなファイルの書き方と基本のルールは一緒です。
JSONの基本的なルールについて書くと長くなるためここでは省略しています。気になる方はご自身で調べてみてください。
以下ではRawメッセージで使用できる要素を個別に解説しています。
text
最初の例でも出てきたtextパラメーターは最も基本の要素で、表示されるテキストを設定します。テキストには「§」による色変更が可能です。また「\n」で改行、「\”」「\’」でそれぞれ「”」「’」になります。
例1:「こんにちはマインクラフト。」というメッセージを表示する
{"rawtext":[{"text":"こんにちはマインクラフト。"}]}
例2:
「こんにちは
マインクラフト」というメッセージを表示する。
{"rawtext":[{"text":"こんにちは\nマインクラフト。"}]}
selector
selectorは@aや@sなどのコマンドで用いられるセレクターを使用し、対象のエンティティの名前を表示します。対象のエンティティが複数いる場合はコンマ区切りで表示され、存在しない場合は何も表示されません。
例1:「ワールド内には次のプレイヤーがいます:」というテキストと、ワールド内のすべてのプレイヤーの名前を表示する
{"rawtext":[{"text":"ワールド内には次のプレイヤーがいます:"},{"selector":"@a"}]}
例2:コマンド実行場所から最も近いアーマースタンドの名前を表示する
{"rawtext":[{"selector":"@e[type=armor_stand,c=1]"}]}
score
指定したエンティティ、スコアボード名のスコアを表示します。対象のエンティティが複数いたり、いない場合の処理はselectorと同様です。scoreの構文は以下のようになっています。
{"score": {"name": "セレクター", "objective": "スコアボードのオブジェクト名"}}
これまでのtextやselectorの文字列と異なり、”score”:の後は{}となります。{}内のnameとobjectiveで対象のスコアボードの値を指定します。
例1:ワールド内のすべてのプレイヤーのtestのスコアの値を表示する。
{"rawtext":[{"score":{"name":"@a","objective":"test"}}]}
例2:「あなたの点数は{testスコアの数値}です!」というメッセージを表示する
{"rawtext":[{"text":"あなたの点数は"},{"score":{"name":"@s","objective":"test"}},{"text":"です!"}]}
translate
※ほとんど使用しないものなので、わからない人は無視で大丈夫です。
translateは多言語対応のための仕組みで、アドオンとの併用がほぼ前提となっています。langファイルにおける識別子を指定して、翻訳されたテキストを表示します。
一部の翻訳テキストには「%s」や「%1」などの変数を受け取るものがあり、変数が必要な場合はwith要素を追加で指定します。withはテキストの配列もしくはrawメッセージを受け取ります。なお変数が複数ある場合は%sの場合は前から順に受け取りますが、%1、%2の場合は数字の順番で受け取ります。例えば「example.translate1=%s、%s」に対して"with":["value1", "value2"]
とした場合は「value1、value2」となりますが、「example.translate1=%2、%1」に対して同様のwith要素を指定した場合は「value2、value1」となります。
構文は以下のとおり
{"rawtext":[{"translate": "langファイル内にある識別子", "with":[(必要に応じて変数を指定)]}}]}
or
{"rawtext":[{"translate": "langファイル内にある識別子", "with":{"rawtext":[(rawメッセージを記述)]}}]}
例1:草ブロックの名前を多言語対応して表示する(日本語設定なら「草ブロック」英語設定なら「grass」となる)
{"rawtext":[{"translate":tile.grass.name}]}
例2:langファイルで自分で定義したmy.world.message1を表示する
{"rawtext":[{"translate":my.world.message1}]}
例3:chat.type.text(=<%s> %s)をwithで「自身のプレイヤー名」、「自身のtestスコアの値」を指定して表示する
{"rawtext":[{"translate":"chat.type.text","with":{"rawtext":[{"selector":"@s"},{"score":{"name":"@s","objective":"test"}}]}}]}
まとめ
rawメッセージではtext、selctor、score、translateを組み合わせて単なるテキストよりも表現の幅を広げることができます。特にselectorとscoreは/tellや/titleなどでは出来ない文字列や数字の代入が可能なのでぜひ使いこなせるようになりましょう。なおtranslateについては、おそらくこの記事を読む人の中で日本語以外の言語に対応する方は一握りだと思いますので、前述のとおり覚えなくて構いません。
コメント