はじめに
本記事の内容は、動画としてYoutubeにも公開しています。
【SNBTテキスト】文字をおしゃれにカスタマイズしよう【マイクラコマンド解説】
SNBTテキストを使用することで、文字の色変更や翻訳、クリック・ホバー時の機能などのいろいろな装飾をすることができます。
tellraw
、title
、scoreboard
、bossbar
、team
コマンド、アイテム名や説明、看板や記入済みの本の文字、エンティティの名前やテキストディスプレイのテキストなどで使用されます。
ここで、SNBT形式とはマイクラに特化したJSON形式のようなものです。
{}
内にタグ名と値をペアにしたオブジェクトや、そのオブジェクトのリストなどを記載することができます。
SNBTフォーマット例
{
text: "テキスト1",
color: red,
extra:[
{text: "テキスト2"},
{text: "テキスト3"}
]
}
本記事は、Java版 Minecraft 1.21.5 の情報です。
テキスト全てに使用可能な文字指定タグ
text(表示するテキスト)
text
はプレーンなテキストを表示するタグです。
テキスト内で"
や\
を表示したい場合はその文字の後ろに\
を付け、\"
や\\
と入力します。(エスケープシーケンス)
また、Unicodeも使用できます。
title @p title {text:"プレーンテキスト"}
title @p title [{text:"\" \\ の表示。"},{text:"\x22 \x5c でも可能"}]
translate(翻訳機能付きテキスト)
translate
はtext
とは別で書かれるタグです。
特定の文字を任意の文字に置き換えたり、リソースパックのlang
ファイルから翻訳キーに対応した文字に置き換えて表示することができます。
-
translate
文字列内に%s
を入れることで、with
のリスト順に文字が置き換えられます。
リストの要素位置を指定したい場合、%n$s
(nはリストのn項目)を入れることで、指定した要素の文字に置き換えることができます。 -
with
%s
や%2$s
などがtranslate
テキスト内や翻訳キーに対応した文字列内にある場合、置き換える文字をリストで指定します。 -
fallback
translate
に入力された翻訳キーがlangファイルに存在しない場合に表示されるテキストを指定します。
# 表示テキスト: ゾンビはブタに射抜かれました
title @p title {translate:"death.attack.arrow",with:["ゾンビ", "ブタ"]}
# 表示テキスト: プレイヤーの勝利
title @p title {translate:"%sの%s",with:["プレイヤー", "勝利"]}
# 表示テキスト: 村人はゲームをクリアした
title @p title {translate:"%2$sは%1$sを%3$sした",with:["ゲーム", "村人", "クリア"]}
# 表示テキスト(赤): No data
title @p title {translate:"custom.key",fallback:"\u00a7cNo data"}
keybind(キー割り当て)
keybind
はそのプレイヤーが設定しているキー割り当てを表示するタグです。
title @p title {keybind:"key.attack"}
キー設定名一覧
操作 | キー | 初期設定表示 |
---|---|---|
ジャンプ | key.jump | Space |
スニーク | key.sneak | 左Shift |
ダッシュ | key.sprint | 左Control |
前進 | key.forward | W |
右 | key.right | D |
左 | key.left | A |
後退 | key.back | S |
アイテムの使用・ブロックの設置 | key.use | 右ボタン |
ブロック選択 | key.pickItem | 中央ボタン |
攻撃する・壊す | key.attack | 左ボタン |
アイテムをオフハンドと交換 | key.swapOffhand | F |
アイテムを捨てる | key.drop | Q |
インベントリの開閉 | key.inventory | E |
ホットバースロット1 | key.hotbar.1 | 1 |
ホットバースロット2 | key.hotbar.2 | 2 |
ホットバースロット3 | key.hotbar.3 | 3 |
ホットバースロット4 | key.hotbar.4 | 4 |
ホットバースロット5 | key.hotbar.5 | 5 |
ホットバースロット6 | key.hotbar.6 | 6 |
ホットバースロット7 | key.hotbar.7 | 7 |
ホットバースロット8 | key.hotbar.8 | 8 |
ホットバースロット9 | key.hotbar.9 | 9 |
ホットバーの保存 | key.saveToolbarActivator | C |
ホットバーの読み込み | key.loadToolbarActivator | X |
コマンドラインを開く | key.command | / |
チャットを開く | key.chat | T |
プレイヤーリストの表示 | key.playerlist | Tab |
社交設定画面 | key.socialInteractions | P |
スクリーンショットの撮影 | key.screenshot | F2 |
フルスクリーンの切り替え | key.fullscreen | F11 |
プレイヤーの強調表示 | key.spectatorOutlines | 未割り当て |
滑らかなカメラ動作の切り替え | key.smoothCamera | 未割り当て |
視点の切り替え | key.togglePerspective | F5 |
進捗 | key.advancements | L |
nbt(NBTデータ表示)
nbt
はブロックエンティティ、エンティティ、ストレージのNBTの値を表示するタグです。
-
nbt
指定したブロックエンティティ、エンティティ、ストレージの表示したいNBT値のNBTパスを指定します。 -
block
NBT値を取得したいブロックエンティティを座標で指定します。
座標は絶対座標、相対座標、ローカル座標で指定します。 -
entity
NBT値を取得したいエンティティをセレクターかUUIDで指定します。
プレイヤーの場合は、プレイヤー名でも指定できます。 -
storage
NBT値を取得したいストレージのパスを指定します。 -
separator
指定したデータが複数ある場合、列挙された時の間の文字を指定できます。
デフォルトは{text:", "}
です。 -
interpret
true
にすることで、表示するnbtの内容をSNBTとして解析した結果を表示します。 -
source
構文解析高速化用で、NBTの取得先のタイプblock
、entity
、storage
のいずれかを指定することができます。
# 座標[10 64 -10]にあるチェスト系ブロックの1つ目のアイテムを表示する
tellraw @p {block:"10 64 -10",nbt:"Items[{Slot:0b}]"}
# 一番近いプレイヤーのUUIDを表示する
tellraw @p {entity:"@p",nbt:"UUID"}
# ストレージの_:_内にあるデータを、SNBTとして表示する
data merge storage _:_ {text:"コメント",color:red}
tellraw @p {storage:"_:_",nbt:"",interpret:true}
特定のテキストに使用可能な文字指定タグ
以下のタグは、tellraw
、title
、bossbar
、看板の文字やテキストディスプレイのデータ更新時、記入済みの本を最初に開いたときにのみ使用できます。
score(スコアの表示)
score
はスコアボードの値を表示するタグです。
objective
でスコアボードを、name
でスコアボード内の名前を指定し、その値を表示します。
-
objective
スコアボードのオブジェクト名を指定します。 -
name
objective
で指定したスコアボード内の名前を指定します。
セレクターも使用できますが、複数体は指定できません。
*
(ワイルドカード)にすることで、表示しているエンティティの名前を指定できます。
title @a title {score:{objective:"obj",name:"@p"}}
title @a title {score:{objective:"obj",name:"*"}}
selector(名前の表示)
selector
は指定したエンティティの名前を表示するタグです。
-
selector
プレイヤー名、セレクター、UUIDで指定します。
複数体も指定可能です。 -
separator
指定したエンティティが複数体の場合、列挙された時の間の文字を指定できます。
デフォルトは{text:", ",color:gray}
です。
title @a title {selector:"@p"}
tellraw @p {selector:"@e[limit=5]",separator:"\n"}
テキストの装飾を指定するタグ
color(文字の色)
表示する文字の色を変更するタグです。
色に対応した文字または、RGB値の16進数カラーコードで指定します。
-
色に対応した文字
文字で指定する場合、指定できる色は以下の16色です。- ■ black
- ■ dark_blue
- ■ dark_green
- ■ dark_aqua
- ■ dark_red
- ■ dark_purple
- ■ gold
- ■ gray
- ■ dark_gray
- ■ blue
- ■ green
- ■ aqua
- ■ red
- ■ light_purple
- ■ yellow
- ■ white
-
16進数
RGB値の16進数カラーコードで指定する場合、最初に#
を入力します。
例: ■RGB値[ 255, 255, 0 ]
=#ffff00
title @p title {text:"赤色",color:"red"}
title @p title {text:"黄色",color:"#ffff00"}
shadow_color(影の色)
文字の影の色を変更するタグです。
RGBA値の配列、ARGB値の16進数、10進数、2進数表記で指定できます。
A(不透明度)を0にすると、影を非表示にできます。
-
配列
配列で指定する場合は、0~255の値を0~1に変換(255で除算)します。
例: ■RGBA値[ 255, 255, 55, 255 ]
=[ 1, 1, 0.33, 1 ]
-
16進数
16進数で指定する場合は、最初に0x
を入力します。
例: ■ARGB値[ 255, 255, 0, 255 ]
=0xffff00ff
-
2進数
2進数で指定する場合は、最初に0b
を入力します。
例: ■ARGB[ 255, 0, 255, 0 ]
=0b11111111000000001111111100000000
-
10進数
例: ■ARGB値[ 255, 255, 100, 10 ]
=-39926
10進数の変換式
$16777216\times(A)+65536×(R)+256\times(G)+(B)$
結果が2147483647
より大きい場合、結果から4294967296
を引く
例の場合、
$
\begin{pmatrix}
A & R & G & B
\end{pmatrix}=
\begin{pmatrix}
255 & 255 & 100 & 10
\end{pmatrix}
$ なので、
$ 16777216\times255+65536\times255+256\times100+10=4294927370 $ となり、
$ 2147483647 < 4294927370 $ より、
$ 4294927370-4294967296=-39926 $
となります。
title @p title {text:"半透明の黄色",shadow_color:[1,1,0.33,0.5]}
title @p title {text:"紫色",shadow_color:0xffff00ff}
title @p title {text:"緑色",shadow_color:0b11111111000000001111111100000000}
title @p title {text:"オレンジ",shadow_color:-39926}
font(フォント)
文字のフォントを指定するタグです。
デフォルトはdefault
です。
リソースパックで追加したカスタムフォントも指定できます。
バニラで指定できるフォントは以下の4種類です。
-
default
デフォルトのMinecraftオリジナルのドットフォント -
unifont
Unicodeフォント -
alt
エンチャントテーブルの候補に表示されている銀河標準語 -
illageralt
マイクラダンジョンズの邪悪な村人が使用するルーン文字
カスタムフォントやユニコードの特性については、まっしゅさんのカスタムフォントの創造的な使い方【マイクラリソパ解説】の動画が分かりやすく参考になると思います。
title @p title [{text:"test ",font:default},{text:"test ",font:uniform},{text:"test ",font:alt},{text:"test ",font:illageralt}]
bold(太字)
文字の太字を指定するタグです。
デフォルトはfalse
です。
title @p title {text:"太字abc",bold:true}
italic(斜体)
文字の斜体を指定するタグです。
デフォルトはfalse
ですが、custom_name
付きアイテムのみtrue
です。
title @p title {text:"斜体abc",italic:true}
underlined(下線)
文字の下線を指定するタグです。
デフォルトはfalse
です。
title @p title {text:"下線abc",underlined:true}
strikethrough(打ち消し線)
文字の打ち消し線を指定するタグです。
デフォルトはfalse
です。
title @p title {text:"打ち消し線abc",strikethrough:true}
obfuscated(難読化)
文字の難読化を指定するタグです。
難読化された文字は、ランダムな文字に変化し続けます。
デフォルトはfalse
です。
title @p title {text:"難読化abc",obfuscated:true}
extra(追加テキスト)
extra
は追加のテキストを表示するタグです。
追加のテキストには、先ほど紹介した装飾や、後ほど紹介する機能が継承されます。
追加で別のタグを個別で指定することもできます。
tellraw @p [{text:"ここ→"},{text:"<",click_event:{action:run_command,command:"/tellraw @s \"クリックした\""},extra:[{text:"クリック",underlined:true},{text:">"}]}]
テキストの機能を指定するタグ
click_event(クリック時の機能)
チャット欄の文字や記入済みの本の文字列を左クリックまたは、看板を右クリックすることで様々な機能を実行します。
extra
内のtext
ではでは機能しません。
-
action
クリックした際の実行される機能の種類を指定します。-
open_url
指定したURLのサイトを開きます。
tellraw
コマンド、記入済みの本でのみ機能します。-
url
開くサイトのURLを指定します。
-
url
-
run_command
指定したコマンドを実行します。
tellraw
コマンド、記入済みの本の場合プレイヤーの権限レベルに応じたコマンドのみ実行可能です。
看板の場合、プレイヤーの権限レベル関係なくコマンドが実行されます。-
command
実行するコマンドを指定します。
me
、say
、tell
、teammsg
コマンドは機能しません。
-
command
-
suggest_command
指定した文字がチャット入力欄に入力されます。
tellraw
コマンドでのみ機能します。-
command
チャット入力欄に入力される文字を指定します。
-
command
-
change_page
指定したページを開きます。
記入済みの本でのみ機能します。-
page
開くページを指定します。
-
page
-
copy_to_clipboard
指定した文字をクリップボード(コピーや切り取りデータを一時的に保存する場所)にコピーします。
tellraw
コマンド、記入済みの本でのみ機能します。-
value
コピーする文字を指定します。
-
value
-
open_url
# open_url
tellraw @p {text:"<<サイトを開く>>",click_event:{action:open_url,url:"https://x.com/Hirobao1"}}
# run_command
setblock ~ ~1 ~ acacia_wall_sign{is_waxed:true,front_text:{messages:[{text:"コマンド実行",click_event:{action:run_command,command:"give @s diamond"}},"","",""]}}
# suggest_command
tellraw @p {text:"<<チャットに入力>>",click_event:{action:suggest_command,command:"入力された文字"}}
# change_page
give @p written_book[written_book_content={author:"",title:"",pages:[{text:"<<2ページ目を開く>>",click_event:{action:change_page,page:2}},{text:"2ページ目"}]}]
# copy_to_clipboard
tellraw @p {text:"<<コピーする>>",click_event:{action:copy_to_clipboard,value:"コピーされた文字"}}
insertion(Shift+左クリック時の機能)
insertion
は、文字をShift+左クリックすることで、指定した文字がチャット入力欄に入力されます。
tellraw
コマンドで使用できます。
tellraw @p {text:"<Shift+左クリック>",insertion:"入力された文字"}
hover_event(ホバー時の機能)
tellraw
コマンド、記入済みの本の文字で使用できます。
チャット欄の文字や記入済みの本の文字列にマウスカーソルを重ねた時にツールチップを表示できる機能です。
-
action
マウスオーバーした際に実行されるツールチップの種類を指定します。-
show_text
指定したテキストを表示します。-
value
表示するテキストを指定します。
-
value
-
show_item
指定したアイテム情報を表示します。-
id
表示するアイテムIDを指定します。
アイテムIDによってデフォルトのコンポーネントが決まります。 -
count
アイテムの個数を指定できます。
表示テキストに変化はありませんが、記入済みの本ではデータとして保存されます。 -
components
表示するアイテムのコンポーネントを指定します。
エンチャントやアイテムの説明などのツールチップが変化するものは表示に反映されます。
-
id
-
show_entity
指定したエンティティ情報を表示します。
F3+H
で高度な情報を表示している時のみ表示されます。-
name
表示するエンティティ名を指定します。 -
id
表示するエンティティのタイプをエンティティIDで指定します。 -
uuid
表示するUUIDを指定します。
ハイフン付き16進数UUIDで指定する場合はクォーテーションマーク("
や'
)で囲う必要があります。
-
name
-
show_text
tellraw @p {text:"ホバーテキスト表示",hover_event:{action:show_text,value:{text:"表示されるテキスト"}}}
tellraw @p {text:"アイテムについて",hover_event:{action:show_item,id:apple,components:{item_name:{text:"幸運リンゴ",color:aqua},enchantments:{fortune:3}}}}
tellraw @p {text:"エンティティ詳細",hover_event:{action:show_entity,uuid:[I;1,2,0,3],id:rabbit,name:"♦ひろばお♦"}}
テキスト内での改行や装飾、特殊文字
エスケープシーケンス
エスケープシーケンスとは、普通では表せない文字や機能を表すために規定された文字のことです。
-
"
や\
の表示
text
でも紹介しましたが、
"
に囲まれた文字内での"
や\
などのそのままでは表示できない文字を表示させたいとき、\
を後ろにつけて\"
や\\
と表記します。
さらに、\"
に囲まれた中のテキストで"
や\
を表示したい場合は、全ての\
と"
の後ろに\
をつけ、\\\"
や\\\\
と表記します。
title @p title ["\"に囲まれた。\"",'\'や\\の表示']
tellraw @p {text:"コマンド実行",click_event:{action:run_command,command:"title @s title \" \\\\や\\\"の表示 \""}}
- 改行
tellraw
コマンド、記入済みの本、テキストディスプレイで使用できます。
文字の中に\n
を入れることで、改行することができます。
tellraw @p "あ\nい\nう\nえ\nお"
エスケープシーケンスでは他にもバックスペースの\b
や、水平・垂直タブの\t
・\v
などいろいろありますが、使用できなかったり専用の記号になるだけで機能しません。
Unicode
Unicode(ユニコード)とは、世界中の文字や記号を表現するための文字コード標準です。
文字ごとに文字コードが割り振られています。
文字の中で連続したスペースを入れたい時や、装飾コードでも使用する§
をあらわす時、カスタムフォント等で特に使用されます。
title @p title "あいうえお=\u3042\u3044\u3046\u3048\u304a"
title @p title "連続した[\u3000\u3000\u3000\u3000\u3000]スペース"
応用するとこのような仕組みのテキストも可能になります
tellraw @p [{text:"\n<ここをクリック>\n",click_event:{action:run_command,command:"tellraw @p [{text:\"\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\"},{text:\"<次はここ>\\n\",click_event:{action:run_command,command:\"tellraw @p [{text:\\\"\u0020\u0020\u0020\u0020\u0020\u0020\u0020\\\"},{text:\\\"<次はこっち>\\\\n\\\",click_event:{action:run_command,command:\\\"tellraw @p {text:\\\\\\\"\u0020\u0020終 わ り\\\\\\\\n\\\\\\\",hover_event:{action:show_text,value:{text:\\\\\\\"もうないよ\\\\\\\"}}}\\\"}}]\"}}]"}}]
装飾コード
装飾コードとは、§
を使用し文字の途中で色を変えたり、下線を引いたりする手法です。
server.properties
やpack.mcmeta
などにも使用できます。
§
の後に入力する文字によって装飾の種類が変わります。
例えば、文字の途中から赤色にしたいとき、§
のあとにc
を入力します。
注意として、JAVA版では§
を直接入力することができないので、Unicodeで記載します。
§
のUnicodeは\u00a7
です。
title @p title {text:"白\u00a7c赤"}
JAVA版で指定できる装飾コード一覧
装飾コード | 機能 | 名称 |
---|---|---|
§0 | ■ 黒色黒色 | black |
§1 | ■ 濃い青色 | dark_blue |
§2 | ■ 濃い緑色 | dark_green |
§3 | ■ 濃い水色 | dark_aqua |
§4 | ■ 濃い赤色 | dark_red |
§5 | ■ 濃い紫色 | dark_purple |
§6 | ■ 金色 | gold |
§7 | ■ 灰色 | gray |
§8 | ■ 濃い灰色 | dark_gray |
§9 | ■ 青色 | blue |
§a | ■ 緑色 | green |
§b | ■ 水色 | aqua |
§c | ■ 赤色 | red |
§d | ■ 紫色 | light_purple |
§e | ■ 黄色 | yellow |
§f | ■ 白色 | white |
§k | 難読化 | obfuscated |
§l | 太字 | bold |
§m | 打ち消し線 | strikethrough |
§n | 下線 | underlined |
§o | 斜体 | italic |
§r | 装飾コードリセット |
※注意
-
§r
(リセット)を/n
(改行)後に入れると、改行前の装飾コードはリセットされず保持されます - カラーコード(
\u00a7c
など)を入力した場合、それ以前の太字や打ち消し線などの機能的コードがリセットされます
title @p title "\u00a7mplain\u00a7e\u00a7l\u00a7n\u00a7o装飾テキスト\u00a7b\u00a7kABC"
give @p written_book[written_book_content={title:"\u00a7dFormatting codes",author:"\u00a7eHirobao",pages:["\u00a7nMinecraft Formatting\n\n\u00a700 \u00a711 \u00a722 \u00a733\n\u00a744 \u00a755 \u00a766 \u00a777\n\u00a788 \u00a799 \u00a7aa \u00a7bb\n\u00a7cc \u00a7dd \u00a7ee \u00a7ff\n\n\u00a70k \u00a7kkMinecraft\u00a7r\nl \u00a7lMinecraft\u00a7r\nm \u00a7mMinecraft\u00a7r\nn \u00a7nMinecraft\u00a7r\no \u00a7oMinecraft\u00a7r\nr \u00a7rMinecraft"]}]
さいごに
マイクラの配布マップなどで文字に色を付けたり、装飾を付けることでプレイしている人に対して分かりやすく、全体のクオリティも上がると思います。
状況に応じたテキストの使い分けで、コマンド制作もより効率良くできるようになると思います。
是非みんなもSNBTテキストで文字をおしゃれにカスタマイズしてみてください。
記事内でもし間違っている場所などあればコメントかDM(@Hirobao1)で教えて下さい。