ダイアログ画面:MODなしで本格的なメニューを作る
データパックのダイアログを使えば、入力欄とボタンを備えた本物のウィンドウが作れます。ここではJSONの構造、ボタンからコマンドを実行する方法、そして本メニューのハックとの比較を解説します。保存先はdialogフォルダの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", "label": { "text": "Class" }, "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
値は、アクションが minecraft:dynamic/run_command であるボタンを通じてコマンドに渡ります:その template は各入力に対して $(key) を受け取ります。通常の run_command ボタンは何も受け取りません。
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
呼び出される関数はマクロになります:
$say Welcome $(name), you chose $(class)
行頭の $ プレフィックスと、両端の $(key) による置換。これがバインディングの仕組みのすべてであり、ダイアログを装飾ではなく真に役立つものにしています。
本メニューのハックより優れている理由
- 画面なので、チャット履歴に残らず入力を一時停止させます。
- 入力欄が実際に存在します。 本ではリンクしか提供できませんでした。
- アイテム不要。 失くす、落とす、複製される心配がありません。
- きれいに閉じられ、スクロールで戻ることもできません。
本が今も優れている唯一の点は長文の読書です——ダイアログの本文は3ページ分の伝承を読むのに向いた場所ではありません。
ウェイポイントのスタイル
同じツールはロケーターバーのウェイポイントもカバーします。そのスタイルはリソースパックのアセット(assets/<namespace>/waypoint_style/)で、追跡中のプレイヤーや位置のスプライトとフェード距離を制御します。色は /waypoint modify <target> color で別途設定します。ボスバーでは主張が強すぎるチームマーカーに便利です。
入力欄とボタンを備えたダイアログ画面の作成、そしてウェイポイントスタイルのカスタマイズは、Dialog Input & Waypoint Style Builder で。