/tellrawのテキストコンポーネント:click_event、hover_event、そしてメッセージが何も表示されない理由
括弧を1つ間違えるだけで、tellrawは対象者に何も送信しません。ここではコンポーネントの形状、チャットで実際に機能するクリック・ホバーアクション、そして多くの人が見落とすエスケープのルールを解説します。
/tellraw はテキストコンポーネントを受け取りますが、失敗時の挙動が不親切です。不正な形式のコンポーネントは対象者全員にメッセージを一切送信しません — エラーはコマンドを実行した本人か、誰も見ていないコマンドブロックの出力にしか出ません。以下では、一発で正しい形にするためのポイントを説明します。
3つの有効な形状
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
リスト形式は、凝ったことをするならこちらを使います。各要素がそれぞれ独自の書式を持てるからです。最初の要素の書式は、上書きしない限り残りの要素に継承されます — これが、メッセージ全体が意図せず金色になってしまう原因です。リストの先頭を空文字列にすれば避けられます:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
クリックアクション
click_event はアクションとそのアクション固有のフィールドを取ります — 共通の value は存在しません:
| アクション | フィールド | 備考 |
|---|---|---|
run_command | command: "/spawn" | プレイヤーとして、そのプレイヤーの権限レベルで実行される |
suggest_command | command: "/msg Steve " | チャット欄に入力するだけで、送信はしない |
open_url | url: "https://…" | 開く前に確認を求める |
copy_to_clipboard | value: "any text" | 座標を共有するのに最も親切なもの |
change_page | page: 2 | 本専用 |
run_command には罠があります。実行されるのはクリックしたプレイヤーの権限であり、コマンドブロックの権限ではありません。/gamemode creative を呼び出すメニューは、一般プレイヤーには何の効果もありません。
ホバーアクション
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text、show_item、show_entity です。名前には注意してください — 古いガイドでは hoverEvent、clickEvent、contents が使われていますが、1.21.5でこれらは hover_event、click_event、そして show_text については value に置き換えられました。この改名により、チュートリアルからコピーしたホバーツールチップが動かないケースが大量に生まれています。
壊れるのはエスケープの部分
コンポーネント全体が1つのコマンド引数なので、内部の引用符はコマンドパーサーを通過できる必要があります。コマンドブロック内ではそのまま入力してください。ファンクションファイルではバックスラッシュによるエスケープは不要です。/give の記入済みの本では、ページもテキストコンポーネントであり、SNBTとして記述します — 1.21.5以降、文字列の中に文字列を入れるエスケープは不要で、エスケープされたJSON文字列として書かれたページは引用符ごとそのままのテキストとして表示されるようになりました。
経験則:アイテムコンポーネントの中にテキストコンポーネントをネストする場合は、手書きせずツールで組み立てましょう。
テキスト内のセレクター
{"selector":"@p","separator":{"text":", "}}
は送信時にプレイヤー名へ解決されます。{"score":{"name":"@s","objective":"Kills"}} はスコアボードの値を取得します。どちらも自分で値を連結しようとするより優れています。
翻訳キーは言語をまたいで機能する
{"translate":"block.minecraft.crafting_table"}
は各プレイヤーの言語で表示されます — 韓国語クライアントなら제작대、日本語クライアントなら作業台です。多言語サーバーでは、英語をハードコードするよりも明確に優れています。
テキストと表示のコマンドはテキスト&表示コマンドビルダーで組み立ててプレビューできます。