ダイアログ画面:Modなしで本格的なメニューを構築する
データパックのダイアログを使えば、入力欄とボタンを備えた本格的なウィンドウを作成できます。JSONの構造、ボタンでコマンドを実行する方法、そして従来の「本メニュー」との比較を解説します。
以前のサーバーメニューは、クリック可能なページを持つ「本」や、アイテムフレームで偽装されたチェストGUIが主流でした。しかし、ダイアログの登場により、これらは実際の画面に置き換えられました。
ダイアログとは
データパック内のJSONファイルで記述されるウィンドウのことです。
data/<namespace>/dialog/welcome.json
{
"type": "minecraft:notice",
"title": { "text": "Welcome" },
"body": [{ "type": "minecraft:plain_message",
"contents": { "text": "Pick a class to begin." } }],
"action": { "label": { "text": "Continue" } }
}
その後、/dialog show @p my_pack:welcome。
種類
| 種類 | 形状 |
|---|---|
notice | テキストと閉じるボタン1つ |
confirmation | はい/いいえ、それぞれ独自のアクションを持つ |
multi_action | ボタンのグリッド |
server_links | 組み込みのリンクリスト |
dialog_list | 他のダイアログを開くメニュー |
multi_actionは、クラス選択、ショップ、ワープリストなど、多岐にわたる用途で活躍します。
ボタンでコマンドを実行する
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
チャットでのclickEventと同様に、これはクリックしたプレイヤーとして、その権限レベルで実行されます。OP専用コマンドを呼び出すボタンは、通常のプレイヤーには何も実行しません。標準的な回避策は、triggerの目標です。ボタンが/trigger warp set 1を実行し、ティック関数が特権部分を実行します。
入力
"inputs": [
{ "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
{ "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
{ "type": "minecraft:single_option", "key": "class", "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
値は、ボタンが呼び出す関数のマクロ引数として渡されるため、受け取る関数はマクロになります。
$say Welcome $(name), you chose $(class)
行頭の$プレフィックスと、置換のための$(key)。これがバインディングメカニズムのすべてであり、ダイアログを単なる装飾ではなく、真に役立つものにしている要素です。
なぜ「本メニュー」よりも優れているのか
- 画面であること。 チャット履歴に残るのではなく、入力を一時停止します。
- 入力が実際に存在する。 本ではリンクしか提供できませんでした。
- アイテムが不要。 失ったり、落としたり、複製したりするものがありません。
- きれいに閉じ、スクロールして戻ることもできません。
本がまだ優れている唯一の点は、長文の読書です。ダイアログの本文は、3ページ分の伝承を記述するのに適した場所ではありません。
ウェイポイントのスタイル
同じツールでロケーターバーのウェイポイントもカバーしています。これは、追跡中のプレイヤーや位置に表示されるマーカーの色とスプライトを制御する、独立したデータパックレジストリです。ボスバーが邪魔になるようなチームマーカーに便利です。
入力とボタンを備えたダイアログ画面の構築や、ウェイポイントのスタイルのカスタマイズは、Dialog Input & Waypoint Style Builderで行えます。