Skip to content
MJP
/ NMS 自定義容器 GUI

NMS · NMS UI

NMS 自定義容器 GUI

繼承 AbstractContainerMenu 建立自定義容器 GUI,支援 slot 事件攔截與資料同步。

NMS已發布v1.0.0nms-custom-menu更新於 2026年4月30日

觸發關鍵字

自定義 GUIcustom menuAbstractContainerMenu自定義容器custom inventoryNMS GUIcontainer menu

NMS Custom Menu

目的

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


替代方案

表單與確認視窗用 Paper Dialog(paper-dialog-ui);一般箱子 GUI 用 InventoryHolder(paper-chest-gui);只有需要自訂 MenuType 或伺服器端容器邏輯時才用本技能。


平台需求

  • Paper 1.21.11 / 26.2(兩版皆經編譯驗證;版本差異以行尾 // @1.21.11: 標註)
  • Paperweight userdev 2.0.0-beta.24+
  • Mojang 官方名稱(Minecraft 26.1 起不再混淆)
  • Java 21(1.21.11)/25(26.2)

產生的代碼

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)已在主執行緒觸發