マイクラのテキスト表示のJSONを整理する

普通のJSONとマイクラJSONの違い

まずは、テキスト表示の前にこちらを見てJSONについて理解をちょっとしておきましょう。

keiduki.hatenablog.com

テキスト表示する基本パターン

まず、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のパスを持っている、エンティティのセレクター。
blockstorageと一緒に指定はできない。
string
block NBTのパスを持っている、ブロックの座標。
entitystorageと一緒に指定はできない。
string
storage NBTのパスを持っている、ストレージ。
entityblockと一緒に指定はできない。
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などを知りたい方はこちら。

keiduki.hatenablog.com

テキスト表示の「見た目関係」の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のパラメータはidCountは必須です。その他はアイテムの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を入力してくれます。

clickEventsuggest_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で並べる

extratranslateとリストを組み合わせた用な感じです。

extraの外側で指定された「見た目」などは、extraの内側に適用されます。

{"text":"私は","extra":[{"text":"赤チーム","color":"red"},"です。"]}

全部に太字を適用する場合はこう言うふうにかけば見やすいですかね。

最初に何も書かないテキストを用意することで、文章を全部extraの中に移動させているわけですね。

{"text":"","bold":true,"extra":["私は",{"text":"赤チーム","color":"red"},"です。"]}

テキスト表示は面倒

さて、おわかりの通り、テキスト表示は種類が多くて面倒です。

なので、他のサイトを使うというのも一つの手かも知れませんね。おすすめサイトはこちら。

minecraft.tools

まとめ

ながながと書いてきましたが、まとめるとこんな感じ。

  • テキスト表示には「内容」1つに対して、「見た目」「マウスアクション」を複数付けられるよ
  • テキストの「内容」はリスト、translate、extraで「連結」できるよ

って感じでした。

何を表示させたい、どういうふうに見せたい、何をさせたい、といったことを考えて作っていきましょう。