【Minecraft】特殊な本や看板で使う『JSON』をマスターしよう!その⑤

みなさん、こんにちは!
赤石大好き!赤石愛です。

その① JSON・text・基本装飾・真偽値 →ar857358
その② clickEvent・オブジェクト・数字と数値・エスケープシーケンス →ar923853
その③ hoverEvent・selector・score →ar923855
その④ リスト・extra・translate →ar923861
その⑤ エスケープシーケンス(改行・Unicode) →このページ
おまけ 本や看板での使用例 →ar924964
その⑥ keybind・nbt・NBTパス →ar1905986


それでは続きをやっていきましょう。


エスケープシーケンス

以前、文字列(""で囲われたもの)の中には「"」や「\」を使えないので「\"」や「\\」のように書くという話をしましたね。
それら「そのままでは使えない文字(ここでは")を使うために用意されている組み合わせ」を「エスケープシーケンス」といいました。
「"」や「\」には特別な役割があるためそのままでは使えなかったわけですが、「改行」などそのままでは表示できないために使えない文字もありますね。
そういったものにもエスケープシーケンスが用意されています。
改行のエスケープシーケンスは「\n」です。

/tellraw @p {"text":"1行目\n2行目\n3行目"}

このコマンドを実行すると

改行されて表示されましたね。
なお、改行が反映されるのはtellrawまたは本の場合だけで、titleや看板は改行できません。

TIPS
\b バックスペース
\f 改ページ
\r ラインフィード
\t 水平タブ
上記4種のエスケープシーケンスは使用できますが、専用の記号で描画されます。


Unicode(ユニコード)
Unicodeという、16進数で文字を表す方法があります。
→https://ja.wikipedia.org/wiki/Unicode
→https://ja.wikipedia.org/wiki/UTF-8
ここではUnicodeの解説ではなく、JSONでのUnicodeの使い方を解説します。

tellrawやtitleでは連続した半角スペースは1つとみなされます。

/tellraw @p {"text":"間に沢山         挟んでも     1つしか 表示されません。"}


半角スペースはそれぞれ1つ分しか表示されていません。
また、全角スペースは記号で表示されてしまいます。

連続した半角スペースを表示するには、Unicode(を指定できるエスケープシーケンス)を使って半角スペースを指定します。(テキストを分割して表示させることもできますが…)
半角スペースのUnicodeは「\u0020」です。

/tellraw @p {"text":"Unicodeにすれば \u0020 \u0020 \u0020 大丈夫!"}




また、マインクラフトでは「§」は装飾コードとして使用されていて、入力はできません。
装飾コードについてはここでは解説しません。

/tellraw @p {"text":"ここに⇨§⇦セクション"}


チャット欄に入力自体ができません。
「§」の入力は非推奨となっています。この後の解説では、「環境によって、あるいは記述ミスによってクラッシュする可能性のあるコマンド」が含まれていますので、自己責任で行って下さい。

「§」のUnicodeは「\u00a7」です。

/tellraw @p {"text":"ここに⇨\u00a7⇦セクション"}


「§⇦」が装飾コードとして認識され、存在しないコードなので消えてしまいました。

/tellraw @p {"text":"a\u00a7bc\u00a7def"}


「§b」や「§d」は装飾コードとして存在するので、文字が装飾がされました。
ただし、JSONのテキストは装飾を指定できるため、装飾コードは使わないで下さい。
「§」は装飾を使えないテキストを装飾するために用います。

/give @p fish 1 2 {display:{Name:"§6ニモ"}}

アイテム名の装飾にはJSONによる指定ができないため、装飾コードを使うことになります。
しかし、§は入力できないので、この通りにコマンドを実行させることができません。

そのため、JSON内でUnicodeから変換させれば良さそうです。
次のようなコマンドで§に変換して実行できますが、このコマンドは実行してはいけません

/tellraw @p {"text":"give","clickEvent":{"action":"run_command","value":"/give @p fish 1 2 {display:{Name:\"\u00a76ニモ\"}}"}}

クリックした途端、クラッシュやフリーズする可能性が非常に高いです。
良くてエラーで落とされます。

チャット入力欄にて「§」を含むテキストの発言・コマンドの実行は禁止されています。
tellrawや本のclickEventはチャット入力欄を使った時と同じ動作となるため、不正な入力とみなされます。
看板のclickEvent(但しバニラの場合)やコマンドブロックによる実行ではチャット入力欄は関係ないため、禁止されていません。
では、tellrawから看板に変えてみましょう。

看板のNBTは1行目はText1、2行目はText2…となっていて、それぞれ本のpagesの時のように、JSONを""で囲んだ文字列で指定します。
コマンドブロックの上に看板を設置し、次のコマンドを実行します。

/blockdata ~ ~1 ~ {Text2:"{\"text\":\"give\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/give @p minecraft:fish 1 2 {display:{Name:\\\"\\u00a76ニモ\\\"}}\"}}"}

すると以下のように、看板の2行目が設定されましたね。

この看板を右クリックすると……

アイテム名が装飾されたアイテムを手に入れることができました。

では今度は、次の3つのコマンドを実行してみましょう。
そのままでは入力できませんよ?

/scoreboard objectives add RedPoint dummy §c§l赤
/scoreboard objectives add BluePoint dummy §9§l青
/scoreboard objectives add YellowPoint dummy §e§l黄

今回は似たようなコマンドが3つなので、まずは次のようなコマンドが入ったコマンドブロックを用意してみましょう。

/scoreboard objectives add ColorPoint dummy §a§l色

このコマンドが入ったコマンドブロックを設置するコマンドは…

/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:"/scoreboard objectives add ColorPoint dummy §a§l色"}

まだ§が残っているので入力できません。
このコマンドがclickEventのrun_commandで実行されるJSONを作ってみましょう。

{"text":"コマブロ設置","clickEvent":{"action":"run_command","value":"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\"/scoreboard objectives add ColorPoint dummy \u00a7a\u00a7l色\"}"}}

§をなくせたので、これなら入力できますね。これを看板に設定するコマンドを作りましょう。

/blockdata ~ ~1 ~ {Text2:"{\"text\":\"コマブロ設置\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~ ~ ~ minecraft:command_block 0 replace {Command:\\\"/scoreboard objectives add ColorPoint dummy \\u00a7a\\u00a7l色\\\"}\"}}"}

ではこれを、看板が上に設置されたコマンドブロックで実行して…

右クリックすると…

目的のコマンドブロックができました。
今回はこれが3つ必要なので、Ctrl+ホイールクリックして3つ用意しましょう。(プラグイン鯖などCtrl+ホイールクリックが出来ない環境では、先程の手順を3回繰り返して3つ用意します。)

3つ用意出来たら、それぞれのコマンドを変えていきます。
コマンドブロック内で装飾コードが反映されてしまっていて分かりづらいですが、慎重にカーソルを移動して変更します。


ColorをRedに。


§aを§cに。装飾コードは間にカーソルを持って行くと確認できます。


色を赤に。
そしてこれを実行します。


何かスコアをセットしてサイドバーに表示してみましょう。

/scoreboard players set Point RedPoint 3
/scoreboard objectives setdisplay sidebar RedPoint

上記2つを実行すると…

スコアボードの表示名に装飾をつけることが出来ました。

残り2つも同じようにできますね。







お疲れ様でした!
ここまで分かれば、あなたはもうマインクラフトのJSONをマスターしています!
次回はおまけとして、本や看板での使用例を少し紹介します。

→おまけへ進む