メインコンテンツまでスキップ

NegiLibについて

EasyMenu 7では、内部アーキテクチャの刷新に伴い、UIの描画処理を独立した描画基盤ライブラリ NegiLib へ分離しました。

このページでは、EasyMenuにおけるNegiLibの役割と、他プラグインからEasyMenuを操作するための開発者向けAPIについて解説します。


なぜ描画処理を分離したのか?

従来のメニュープラグインは、メニュー定義(YAML)とMinecraftのインベントリ操作コードが密結合していました。

EasyMenu 7では、以下の明確な役割分担を行っています。

EasyMenu 7 = YAMLの解釈、メニュー構造・意味論、アクション、条件判定、状態管理
NegiLib 1 = 画面描画、セッション管理、Foliaスケジューラー、サーバー環境の差異吸収

役割分担によるメリット

  1. 単一設定からマルチUIへの対応: EasyMenuは「何を表示するか」だけを決定し、NegiLibが「現在のサーバー環境でどう描画するか」を担当するため、同じYAML設定のままインベントリGUIにもNative Dialogにも自動対応できます。
  2. 高い堅牢性とパフォーマンス: NegiLibがFoliaのリージョンスケジューラー上で安全に非同期処理とメインスレッド処理を調停するため、Paper、Purpur、Foliaのいずれでもスレッドセーフかつ高速に動作します。
  3. 将来の拡張性: 将来新しいクライアント画面形式が登場した場合でも、EasyMenuの設定や構文を変更することなく対応できます。

開発者向け連携API (EasyMenuApi)

他のプラグインからEasyMenuのメニューをプレイヤーに開かせたい場合は、公式に提供されている EasyMenuApi を利用します。

Maven 依存関係

<dependency>
<groupId>org.mituba01</groupId>
<artifactId>easymenu</artifactId>
<version>7.0.1</version>
<scope>provided</scope>
</dependency>

Javaコードからの呼び出し例

import org.mituba01.easymenu.api.EasyMenuProvider;
import org.bukkit.entity.Player;

public void openShopMenu(Player player) {
EasyMenuProvider.get().ifPresent(api -> {
// メニューが開いているかチェック
if (api.isMenuLoaded("shop")) {
// 指定プレイヤーにショップメニューを開く
api.open(player, "shop");
}
});
}

EasyMenu 7の公開APIは openisMenuLoadedreload を安定したインターフェースとして提供しています。