Dialog Menu
概要
Dialog Menu は、Paper のダイアログ API を通じて、Minecraft 1.21.6 以降のネイティブなダイアログ画面を開きます。ダイアログは、画面中央に表示されるウィンドウで、タイトル、本文テキスト、任意のアイテム、ボタン、入力フィールドを備えています。リソースパックもカスタムインベントリも不要です。
ダイアログ全体は、Paper Dialog という 1 つのアクションエントリーで作成します。各ボタンは、プレイヤーとしてコマンドを実行するか、他の TypeWriter エントリーをトリガーします。入力フィールド(テキスト、トグル、選択肢、スライダー)の値はプレイヤーが確定したときに読み取られ、$(key) でコマンドに挿入されます。
機能
- ネイティブダイアログ — Paper のダイアログ API で開く、バニラのダイアログウィンドウ。
- 3 つのレイアウト — ボタンのグリッド、はい/いいえの確認、ボタン 1 つの通知。
- アクションボタン — プレイヤーとしてコマンドを実行します(OP として実行することも可能)。
- トリガーボタン — コマンドを使わず、TypeWriter エントリーを直接発火します。
- 入力 — テキストフィールド(複数行にも対応)、トグル、複数選択、数値スライダー。
- コマンド内の入力値 — コマンドで
$(key)を使うと、プレイヤーが入力または選択した内容を挿入できます。 - 動的テキスト — タイトル、メッセージ、ラベルは MiniMessage と PlaceholderAPI のプレースホルダーに対応します。
- 本文アイテム — ダイアログの本文にアイテムを表示します。
- アクション後の動作 — ダイアログを閉じる、開いたままにする、サーバーの応答を待つ、から選べます。
- プレースホルダー — プレイヤーが現在ダイアログを開いているかどうかを確認できます。
インストール
- Paper(または Folia などのフォーク)の 1.21.6 以降を実行します。それ以前のバージョンにはダイアログ API がありません。
- TypeWriter の Basic エクステンションがインストールされていることを確認します(TypeWriter のドキュメントを参照)。
- 任意: テキスト内でプレースホルダーを使うには、PlaceholderAPI をインストールします。
- Dialog Menu の JAR を
plugins/Typewriter/extensions/に配置し、サーバーを再起動します。
はじめに
プレイヤーをテレポートさせる前に、確認ウィンドウを表示します。
- TypeWriter の Web パネルでシーケンスページを開き、Paper Dialog エントリーを追加します。
displayNameを<gold>Travel to the spawn?に、messageをダイアログ本文のテキストに設定します。dialogTypeをCONFIRMATIONに設定します。buttonsにアクションボタンを追加します。labelをYesに、commandをspawnに設定します。exitButtonでlabelをNoに設定します。commandは空のままにします。この場合、ボタンはダイアログを閉じるだけです。- エントリーを、それを開くきっかけとなるもの(NPC とのインタラクション、コマンド、ダイアログの選択肢)にリンクします。
- Publish して、ゲーム内でエントリーをトリガーします。
値を受け取るには、buttons にテキスト入力を追加します。key を name、buttonLabel を Send、command を rename $(name) に設定します。プレイヤーがボタンをクリックすると、$(name) の位置に入力したテキストが挿入されます。
asOp は、一時的なオペレーター権限でコマンドを実行します。完全に管理できているコマンドにのみ使用し、プレイヤーの自由入力テキストをそのようなコマンドに挿入しないでください。
仕組み
アクションが実行されると、ダイアログはエントリーから構築され、トリガーしたプレイヤーに表示されます。ボタンは使い切りです。クリックすると、そのダイアログに対してアクションが 1 回実行されます。ダイアログは afterAction に従って、閉じられるか開いたままになります。
すべてのテキストフィールドは MiniMessage とプレースホルダーに対応します。displayName が空の場合は、エントリー名が使われます。
メニュー
ダイアログのレイアウトは dialogType によって決まります。
| タイプ | レイアウト |
|---|---|
MULTI_ACTION | columns 列のボタンのグリッド。showExitButton がオンの場合は、終了ボタンも表示されます。 |
CONFIRMATION | バニラのはい/いいえウィンドウ。最初のボタンが承認、終了ボタンが拒否になります。このモードでは終了ボタンが常に作られます。 |
NOTICE | 最初のボタンを使う、ボタン 1 つのウィンドウ。ボタンがない場合は終了ボタンを使います。 |
buttons に追加できるボタンタイプは次のとおりです。
| タイプ | フィールド | コマンドマクロ |
|---|---|---|
| アクションボタン | label, command, asOp | なし |
| トリガーボタン | label, triggers | なし |
| テキスト入力 | label, key(デフォルトは input), buttonLabel, command, asOp, width, labelVisible, initial, maxLength, maxLines, height | $(input) |
| 真偽値トグル | label, key(デフォルトは boolean), initial, onTrue, onFalse, buttonLabel, command, asOp | $(boolean)。onTrue または onFalse に置き換えられます |
| 複数選択 | label, key(デフォルトは choice), options, buttonLabel, command, asOp | $(choice) |
| 数値範囲 | label, key(デフォルトは value), start, end, initial, step, buttonLabel, command, asOp | $(value)。整数に丸められます |
入力フィールドはボタンの上に表示されます。入力ボタンはそれぞれ、buttonLabel をテキストとする専用の確定ボタンも追加します。コマンドでは、同じダイアログ内にある任意の入力の $(key) を使用できます。終了ボタンは exitButton で個別に設定します。
複数選択では、options をカンマ区切りのリストで記述し、最初に選択状態にしたい選択肢の後ろに * を付けます。例: Easy,Normal*,Hard。
プレースホルダー
typewriter エクスパンションが提供する PlaceholderAPI のプレースホルダーです。
| プレースホルダー | 戻り値 |
|---|---|
%typewriter_inmenudialog% | プレイヤーがこのエクステンションのダイアログを開いている場合は 1、そうでない場合は 0。 |
%typewriter_inmenudialog_<name>% | 開いているダイアログが、このエントリー名を持つ Paper Dialog エントリーである場合は 1。%typewriter_inmenudialog:<name>% も使用できます。 |
状態は、ボタンがクリックされたとき、プレイヤーが退出したとき、TypeWriter がリロードされたときにクリアされます。プレイヤーが Esc キーでダイアログを閉じた場合はクリアされません。
エントリー
1 件のエントリー(拡張機能のソースから生成)。
アクション1
- Paper DialogDisplay a customizable dialog
トラブルシューティング
アクションを実行しても何も表示されない。 ダイアログには Paper 1.21.6 以降が必要です。古いサーバーにはダイアログ API が存在しないため、アクションは失敗します。また、エントリーの criteria が満たされているかも確認してください。
ボタンを押しても何も起きない。 command が空のコマンドボタンは、ダイアログを閉じるだけです。それ以外の場合、コマンドはプレイヤーとして実行されます。プレイヤーにそのパーミッションがないと、本人には通知されないまま失敗し、失敗は Dialog command '…' failed としてログに記録されます。まずチャットでコマンドを試してください。
$(key) がコマンドにそのまま現れる、または何も挿入されない。 入力の key とマクロは完全に一致している必要があります。どの入力にも一致しないマクロは、空のテキストに置き換えられます。トグルの場合、マクロは true や false ではなく、onTrue または onFalse の値になります。
最初のクリックの後、ボタンが動作しなくなる。 各ボタンは、開かれたダイアログごとに使い切りです。afterAction を NONE または WAIT_FOR_RESPONSE にするとウィンドウは画面に残りますが、ボタンはもう反応しません。アクションを再度トリガーして、新しいダイアログを開いてください。
%typewriter_inmenudialog% が 1 のままになる。 プレイヤーが Esc でダイアログを閉じたためで、この操作では状態がリセットされません。次のボタンクリック、プレイヤーの退出、またはリロードのときにリセットされます。
関連エクステンション
- Companion — プレイヤーがコンパニオンをクリックしたときに、ダイアログを開きます。