This commit is contained in:
Keisuke Hirata 2025-12-09 11:01:03 +09:00
commit 4d2e9f6500
8 changed files with 193 additions and 0 deletions

12
.gitmodules vendored Normal file
View File

@ -0,0 +1,12 @@
[submodule "Faction"]
path = Faction
url = git@gitea.hareworks.net:hcu/Faction.git
branch = master
[submodule "Economy"]
path = Economy
url = git@gitea.hareworks.net:hcu/Economy.git
branch = master
[submodule "hcu-core"]
path = hcu-core
url = git@gitea.hareworks.net:hcu/hcu-core.git
branch = master

1
Economy Submodule

@ -0,0 +1 @@
Subproject commit 7a9067e9e494a278f0b08e5da4a0096ca7dafa76

1
Faction Submodule

@ -0,0 +1 @@
Subproject commit ac7216788c98dcdd35392e4c9aeb8e04b0b82cb1

63
build.gradle.kts Normal file
View File

@ -0,0 +1,63 @@
import net.minecrell.pluginyml.bukkit.BukkitPluginDescription
import net.minecrell.pluginyml.paper.PaperPluginDescription
group = "net.hareworks.hcu"
version = "1.0-SNAPSHOT"
plugins {
kotlin("jvm") version "2.2.21"
id("de.eldoria.plugin-yml.paper") version "0.8.0"
id("com.gradleup.shadow") version "9.2.2"
}
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
}
dependencies {
compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib")
// Component Dependencies
compileOnly("net.hareworks.hcu:hcu-core:1.3")
compileOnly("net.hareworks.hcu:economy:1.0")
compileOnly("net.hareworks.hcu:faction:1.0")
// Libs
compileOnly("com.michael-bull.kotlin-result:kotlin-result:2.1.0")
}
tasks {
withType<Jar> {
archiveBaseName.set("shop")
}
shadowJar {
archiveClassifier.set("min")
minimize()
}
}
paper {
main = "net.hareworks.hcu.shop.ShopPlugin"
name = "shop"
description = "Shop plugin for HCU server"
version = getVersion().toString()
apiVersion = "1.21.10"
serverDependencies {
register("hcu-core") {
required = true
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
}
register("economy") {
required = true
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
}
register("faction") {
required = true
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
}
}
authors = listOf("Hare-K02")
}

97
dialog_texh.md Normal file
View File

@ -0,0 +1,97 @@
# 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"

1
hcu-core Submodule

@ -0,0 +1 @@
Subproject commit 520a378cd5c3da6321305d07cc0b402b73292add

5
settings.gradle.kts Normal file
View File

@ -0,0 +1,5 @@
rootProject.name = "shop"
includeBuild("hcu-core")
includeBuild("Faction")
includeBuild("Economy")

View File

@ -0,0 +1,13 @@
package net.hareworks.hcu.shop
import org.bukkit.plugin.java.JavaPlugin
class ShopPlugin : JavaPlugin() {
override fun onEnable() {
logger.info("Shop plugin enabled!")
}
override fun onDisable() {
logger.info("Shop plugin disabled!")
}
}