Shop/dialog_texh.md
2025-12-09 11:01:03 +09:00

98 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <players> <dialog>` ([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"