NMS UIv1.0.0已發布

NMS 自定義容器 GUI

NMS Custom Menu

繼承 AbstractContainerMenu 建立自定義容器 GUI,支援 slot 事件攔截與資料同步(Paper NMS + Mojang mappings)。

nmsinventoryguicontainermenuabstractcontainermenumojang-mapped
更新:2026年4月30日GitHub

NMS Custom Menu

目的

透過繼承 NMS AbstractContainerMenu 實作自定義容器 GUI,支援 slot 操作攔截、資料同步,比純 Bukkit API 更靈活。


平台需求

  • Paper 1.21 – 1.21.3
  • Paperweight userdev 1.7.2+
  • Mojang mappings(Paper 1.20.5+ 原生支援)
  • Java 21

產生的代碼

CustomMenu.java

public class CustomMenu extends AbstractContainerMenu {
    // 注册 GUI slot(容器區 + 玩家物品欄)
    // stillValid() — 控制是否允許保持開啟
    // quickMoveStack() — 攔截 shift-click
    // getBukkitView() — 提供 Bukkit InventoryView
}

CustomMenuProvider.java + 開啟方式

// 開啟 GUI
ServerPlayer nms = ((CraftPlayer) player).getHandle();
nms.openMenu(new CustomMenuProvider("§6商店"));

執行緒安全

  • nms.openMenu() 及所有 GUI 操作必須在主執行緒呼叫
  • Bukkit 事件回呼(InventoryClickEvent)已在主執行緒觸發