マイクラのテキスト表示のJSONを整理する
- 普通のJSONとマイクラJSONの違い
- テキスト表示する基本パターン
- テキスト表示の「内容関係」のJSON
- テキスト表示の「見た目関係」のJSON
- テキスト表示の「マウスアクション関係」のJSON
- テキスト表示の「連結関係」のJSON
- テキスト表示は面倒
- まとめ
普通のJSONとマイクラJSONの違い
まずは、テキスト表示の前にこちらを見てJSONについて理解をちょっとしておきましょう。
テキスト表示する基本パターン
まず、JSONの話を始める前に表示パターンがいくつかあるので、見ていきましょう。
これらは全てABCD
と表示されます。
- 文字列だけで表示するパターン
tellraw @p "ABCD"
- リストに入れて、文字列を複数、表示するパターン
tellraw @p ["AB","CD"]
- オブジェクトに入れて表示するパターン
tellraw @p {"text":"ABCD"}
- リストに入れて、オブジェクトを複数、表示するパターン
tellraw @p [{"text":"AB"},{"text":"CD"}]
基本的には、文字列かオブジェクトで内容を決めて、複数指定したい場合は、リストって感じですね。
テキスト表示の「内容関係」のJSON
それでは、オブジェクトに指定できるJSONをまとめていきましょう。1つのオブジェクトに「内容関係」のJSONは1つだけ指定できます。
ちなみにJSONの内容は見やすいように書き換えてますので、使うときは改行や空白を削除するように切り替えてくださいね。
プレイヤー名、エンティティ名を表示する
シンプルにエンティティの名前を表示できます。対象が複数いる場合は、クリーパー, ゾンビ, スケルトン
みたいに表記されます。
{ "selector": "@a[team=red]" }
スコアボードの値を表示する
例えば、SCOREというオブジェクトにtestっていうスコアを作った場合は、こんな感じ。
{ "score": { "name": "test", "objective": "SCORE" } }
NBTの値を表示する
ちょっと量が多いので、一覧で見せますね。
{ "nbt": "Inventory[0].id", "entity": "@p", "block": "0 60 0", "storage": "main", "interpret": true }
プロパティ | 説明 | 定義 | 必須 |
---|---|---|---|
nbt | NBTのパス。 | string | ● |
entity | NBTのパスを持っている、エンティティのセレクター。block やstorage と一緒に指定はできない。 |
string | |
block | NBTのパスを持っている、ブロックの座標。entity やstorage と一緒に指定はできない。 |
string | |
storage | NBTのパスを持っている、ストレージ。entity やblock と一緒に指定はできない。 |
string | |
interpret | 表示されるテキストが「テキスト表示のJSON」だった場合に、 そのままのJSONではなく、解析後のテキストとして表示される。 |
bool |
基本はdataのgetと同じような使い方ですね。
interpretについて
さて、一見、読んでもよくわからないinterpret。
例えばこういうテキストのJSONがあったとしましょう。
{ "text":"test" }
それをNBTで指定する場合は、以下のような感じで指定します。
data merge storage aaa {hogehoge:"{\"text\":\"test\"}"} もしくは data merge storage aaa {hogehoge:'{"text":"test"}'}
このhogehogeを表示させたい場合、以下のように書くと{"text":"test"}
が表示されてしまいます。
{ "nbt": "hogehoge", "storage": "aaa" }
できればtest
と表示させたい。そういう時にinterpretを使います。
{ "nbt": "hogehoge", "storage": "aaa", "interpret": true }
割り当てられているキーを表示する
例えば操作説明する際に、プレイヤーごとに使っているキーが違うときがありますよね。
そういうときにコレを使います。
{ "keybind": "key.inventory" }
右側の値部分の一覧はこちら。
Controls – Official Minecraft Wiki
言語ファイルの内容を表示する
バニラやリソースパックに含まれている言語ファイルの内容を表示します。
例えば、以下の用に指定すれば、言語設定が日本語なら目標達成!
が表示され、英語ならGoal Reached!
が表示されます。
{ "translate": "advancements.toast.goal" }
言語ファイルの中身やwithなどを知りたい方はこちら。
テキスト表示の「見た目関係」のJSON
こちらは一気に並べて見てみましょう。「見た目関係」は1つのオブジェクトに全部指定してもOKです。
{ "color": "red", "bold": true, "italic": true, "underlined": true, "strikethrough": true, "obfuscated": true, "font": "minecraft:default" // ver1.16から導入予定 }
プロパティ | 説明 | 定義 |
---|---|---|
color | 文字の色を指定する。指定できる色はこちら。"black" ,"dark_blue" , "dark_green" , "dark_aqua" , "dark_red" , "dark_purple" , "gold" , "gray" , "dark_gray" , "blue" , "green" , "aqua" , "red" , "light_purple" , "yellow" , "white" ver 1.16からはカラーコード #ffffff とかで指定できるようになるみたいですね。 |
string |
bold | 文字を太字にする。 | bool |
italic | 文字を斜めにする。 | bool |
underlined | 文字にアンダーライン(下線)を引く。 | bool |
strikethrough | 文字に打ち消し線(中線)を引く。 | bool |
obfuscated | 文字を難読化する。 | bool |
font | リソースパックのフォントを参照する。 | string |
テキスト表示の「マウスアクション関係」のJSON
テキストをクリックしたり、マウスカーソルを当てたりすることで動作させるJSONです。「マウスアクション関係」は1つのオブジェクトに全部指定してもOKです。
テキストをクリックした時のアクション
{ "clickEvent": { "action": "run_command", "value": "/say test" } }
テキストをクリックした時のアクションaction
はいくつか種類があります。
action
に合わせてvalue
を決めましょう。
action | アクションの内容 | valueの例 |
---|---|---|
open_url | value で指定したURLを開く。開こうとすると、注意画面が出てくる。 |
"https://www.google.com/" |
run_command | value で指定したコマンドを実行する。先頭に / が必要なので注意。 |
"/say test" |
suggest_command | チャット欄にvalue を入力する。 |
"テキスト" |
change_page | 本でのみ使えます。value で指定したページに移動します。 |
"3" |
copy_to_clipboard | クリップボード(Ctrl+C のコピーで一時保存される場所)にvalue で指定した内容をコピーします。 |
"コピー" |
テキストにカーソルを当てた時のアクション
普通にテキストを表示する (show_text)
テキストだけを表示します。
このブログで説明している「内容関係」と「見た目関係」のJSONを指定できますよ。
{ "hoverEvent": { "action": "show_text", "value": {"text": "say"}, // ver 1.16以降で廃止(使えはする) "contents": {"text": "say"} // ver 1.16以降で追加 } }
アイテム説明っぽく表示する (show_item)
インベントリのアイテムにマウスカーソルを当てたような感じの表示を行います。
valueのパラメータは
id
とCount
は必須です。その他はアイテムのNBTを参考にするといいよ。
{ "hoverEvent": { "action": "show_item", "value": "{id:\"minecraft:stone\",Count:1b}", // ver 1.16以降で廃止(使えはする) "contents": { // ver 1.16以降で追加 "id": "minecraft:stone" } } }
エンティティ情報っぽく表示する (show_entity)
/say @p
とかでエンティティ名にマウスカーソルを当てたような感じの表示を行います。
{ "hoverEvent": { "action": "show_entity", "value": "{name:\"CustomName\"}", // ver 1.16以降で廃止(使えはする) "contents": { // ver 1.16以降で追加 "name": "CustomName" } } }
プロパティ | 説明 | 定義 | 必須 |
---|---|---|---|
name | エンティティの名前として表示します。 | \"string\" | |
type | エンティティのタイプとして表示します。minecraft:player など。 |
\"string\" | |
id | エンティティのUUIDとして表示します。00000000-0000-0000-0000-000000000000 みたいなやつ。 |
\"string\" |
value と contents の違いについて
内容的にはほとんど一緒です。テキスト表示で使うJSONはマイクラ式JSONではないので、
{"value": '{name:"CustomName"}'}
みたいには書けません。
なので、contents
を新たに用意して、文字列じゃなくてオブジェクトで認識できるようにしようってことみたいです。
テキストをSHIFT + 左クリックした時のアクション
{ "insertion": "/say test" }
すごくシンプルですね。こちらをテキストに含めるとチャット欄に/say test
を入力してくれます。
clickEvent
のsuggest_command
のSHIFT + 左クリック版ですね。
テキスト表示の「連結関係」のJSON
ここまで、「内容」「見た目」「マウスアクション」を書いてきました。
これらは1つのオブジェクトにまとめることができます。例としてはこんな感じ。
{"text":"test","underlined":true,"insertion":"/say test"}
さて、一部だけ「内容」「見た目」「マウスアクション」を変更したい!って場合はどうすればよいのでしょうか。
リストで並べる
最初の例でお見せしたように、以下のように書くことができます。
シンプルなやり方ですね。
["私は",{"text":"赤チーム","color":"red"},"です。"]
ちなみに先頭で指定した場合は、全部に適用されるので注意が必要です。
下の場合は、「私は」だけ太字と見せかけて、全部太字になります。
[{"text":"私は","bold":true},{"text":"赤チーム","color":"red"},"です。"]
translateの機能を使って並べる
translate
を使うと複数を指定することができます。
{"translate":"私は%sです。","with":[{"text":"赤チーム","color":"red"}]}
これだけ見るとリストで書くよりも長くなってしまいましたが、場合によっては見やすくなる可能性もあります。
{"bold":true,"translate":"私は%sです。","with":[{"text":"赤チーム","color":"red"}]}
例えばこういう書き方だと、全部に太字が適用されます。リストと違って全部に適用されるということがわかりやすいです。
extraで並べる
extra
はtranslate
とリストを組み合わせた用な感じです。
extra
の外側で指定された「見た目」などは、extra
の内側に適用されます。
{"text":"私は","extra":[{"text":"赤チーム","color":"red"},"です。"]}
全部に太字を適用する場合はこう言うふうにかけば見やすいですかね。
最初に何も書かないテキストを用意することで、文章を全部extra
の中に移動させているわけですね。
{"text":"","bold":true,"extra":["私は",{"text":"赤チーム","color":"red"},"です。"]}
テキスト表示は面倒
さて、おわかりの通り、テキスト表示は種類が多くて面倒です。
なので、他のサイトを使うというのも一つの手かも知れませんね。おすすめサイトはこちら。
まとめ
ながながと書いてきましたが、まとめるとこんな感じ。
- テキスト表示には「内容」1つに対して、「見た目」「マウスアクション」を複数付けられるよ
- テキストの「内容」はリスト、translate、extraで「連結」できるよ
って感じでした。
何を表示させたい、どういうふうに見せたい、何をさせたい、といったことを考えて作っていきましょう。