# Paper における Dialog(ダイアログ)機能の使用 — ドキュメント ## 🎯 概要 * Dialog 機能は、Minecraft Java Edition 1.21.6 で導入された「画面中央に出すモーダル UI(メニュー/入力フォーム/確認ダイアログなど)」をサーバー/プラグイン側から出せる仕組み。([PaperMC Docs][1]) * Paper は 1.21.7 から **Dialog API** を提供し、プラグインから動的にダイアログを生成・表示できるようになっている。([PaperMC Docs][1]) * これは実験的機能(Experimental)扱い。今後仕様変更の可能性があることに注意。([PaperMC][2]) --- ## ✅ Dialog API の主要機能 * サーバー/プラグインから任意のダイアログを生成・表示可能。([PaperMC Docs][1]) * 標準で「通知/確認ダイアログ」「複数アクション付きダイアログ」「リスト型ダイアログ」「サーバーリンクダイアログ」などが提供されている。([PaperMC][2]) * プレイヤーに表示する方法は主に二通り: 1. コマンド経由 — `/dialog show ` ([PaperMC Docs][1]) 2. API 経由 — `Audience#showDialog(Dialog)` を使った直接呼び出し ([PaperMC Docs][1]) * 動的生成も可能:`Dialog.create(...)` を通じて、コードでダイアログ内容を構築 → 表示。([PaperMC][5]) --- ## 🧩 API の構成 — 主なクラス/インターフェース | パッケージ / クラス | 概要 | | ----------------------------------------------------------- | ---------------------------------------------------------------------------- | | `io.papermc.paper.dialog.Dialog` | ダイアログ本体を表すクラス/インターフェース。Registry に登録されたダイアログも、動的生成ダイアログも扱える。([PaperMC][5]) | | `io.papermc.paper.registry.data.dialog.type.DialogType` | ダイアログの「型」を示す (例: notice, confirmation, multi-action, list など) ([PaperMC][2]) | | `io.papermc.paper.registry.data.dialog.body.DialogBody` | ダイアログ本体に表示する内容(テキスト、アイテム表示など) | | `io.papermc.paper.registry.data.dialog.input.DialogInput` | 入力コントロール (テキスト入力、選択肢、トグルなど) を定義可能。([PaperMC][6]) | | `io.papermc.paper.registry.data.dialog.action.DialogAction` | ダイアログのボタン押下等で実行されるアクション (コマンド実行、カスタムコード、別ダイアログ呼び出し etc.) を定義。([Daydream][7]) | | `DialogBase` / `DialogBase.Builder` | ダイアログの基本情報(タイトル、外部タイトル、閉じられるか、表示後の動作など)を構築する。([PaperMC][6]) | --- ## 🔧 サンプルコード(Java) — シンプルな Notice ダイアログ ```java import io.papermc.paper.dialog.Dialog; import io.papermc.paper.dialog.DialogResponseView; import io.papermc.paper.registry.data.dialog.type.DialogType; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; public void showNotice(Player player) { Dialog dialog = Dialog.create(builder -> builder .empty() .base(DialogBase.builder(Component.text("重要なお知らせ")).build()) .type(DialogType.notice()) ); player.showDialog(dialog); } ``` このコードは、タイトルだけの「OK ボタン付き通知ダイアログ」をプレイヤーに表示します。([PaperMC Docs][1]) --- ## ⚠️ 注意点・既知の制限 * Dialog API は現時点で実験的 (`@Experimental`)。仕様や挙動が今後変わる可能性あり。([PaperMC][2]) * click イベントでダイアログを開く機能 (`ClickEvent.openDialog`) や、クリック時のカスタムアクション (`DialogAction.customClick`) を使えるが、後者は **メモリリークの恐れ** が指摘されている。特にコールバックを登録したままプレイヤーが離脱したりダイアログを閉じても無効化されず、リソースが解放されない可能性。([GitHub][8]) * クライアント側も Minecraft 1.21.6 以降である必要がある。古いクライアントではダイアログが正しく表示されない。これは、そもそも Dialog 機能自体がバニラ 1.21.6 からの新仕様。([PaperMC Docs][1]) --- ## ✅ 利用例・応用用途 Paper サーバー + Dialog API を利用すると、以下のような用途に適している: * サーバー参加時の規約同意画面、ウェルカム画面 * ミニゲームやワールド生成時の設定フォーム(オプション選択など) * サーバー内メニュー、クイックアクション、サーバーリンク一覧 * NPC/テレポート/ワールド選択など、インタラクティブなメニュー * 入力フォーム(テキスト、選択肢、トグルなど)を用いたカスタムフォーム また、既存のプラグインライブラリとして FancyDialogs のようなものもあり、JSON 形式やコードでダイアログを定義できる。([Hangar][9]) --- ## 📚 参考リソース * Paper Dialog API ドキュメント — 「Dialog API」セクション (docs.papermc.io) ([PaperMC Docs][1]) * Javadoc — `io.papermc.paper.dialog`, `io.papermc.paper.registry.data.dialog.*` パッケージ群 ([PaperMC][5]) * 使用例プラグイン FancyDialogs (GitHub / Hangar) ([Hangar][9]) * 警告: callback 系 API のメモリリーク問題に関する issue #13236 ([GitHub][8]) [1]: https://docs.papermc.io/paper/dev/dialogs/?utm_source=chatgpt.com "Dialog API" [2]: https://jd.papermc.io/paper/1.21.8/io/papermc/paper/registry/data/dialog/type/package-summary.html?utm_source=chatgpt.com "Package io.papermc.paper.registry.data.dialog.type - Javadocs" [3]: https://papermc.io/news/1-21-7/?utm_source=chatgpt.com "1.21.7" [4]: https://github.com/PaperMC/Paper?utm_source=chatgpt.com "PaperMC/Paper: The most widely used, high performance ..." [5]: https://jd.papermc.io/paper/1.21.7/io/papermc/paper/dialog/class-use/Dialog.html?utm_source=chatgpt.com "Uses of Interface io.papermc.paper.dialog.Dialog - Javadocs" [6]: https://jd.papermc.io/paper/1.21.10/io/papermc/paper/registry/data/dialog/DialogBase.html?utm_source=chatgpt.com "DialogBase (paper-api 1.21.10-R0.1-SNAPSHOT API)" [7]: https://daydream.caramel.moe/io/papermc/paper/registry/data/dialog/action/package-summary.html?utm_source=chatgpt.com "Package io.papermc.paper.registry.data.dialog.action" [8]: https://github.com/PaperMC/Paper/issues/13236?utm_source=chatgpt.com "Callback API can quickly lead to memory leaks #13236" [9]: https://hangar.papermc.io/Oliver/FancyDialogs?utm_source=chatgpt.com "FancyDialogs - Minecraft Plugin - Hangar"