指南
如何製作 Minecraft GUI 選單插件
更新於 2026年10月18日
伺服器選單(傳送點、商店、套組、設定)其實是由插件開啟並控制的箱子物品欄。每一格放一個物品,當作按鈕。它們看起來很簡單,但只要選單沒有取消每一種點擊,玩家就能把按鈕直接帶回家。這份指南說明選單如何運作,以及怎麼讓 Codexe 做出一個並測試它。
從這個範例開始。
用 Codexe 產生這個逐步說明
1.先畫出選單草圖
箱子選單有 1 到 6 列,每列 9 格(共 9 到 54 格)。寫明哪個物品放在哪一格、每次點擊會做什麼,以及哪些格子只是裝飾,例如玻璃片。
2.用 holder 建立物品欄
用
Bukkit.createInventory(holder, size, title)開啟它,並使用你自己的InventoryHolder類別。插件就是靠 holder 判斷這次點擊發生在它的選單裡,而不是一般的箱子。3.處理點擊
在
InventoryClickEvent裡檢查 holder、取消事件,然後執行那一格對應的動作。動作完成後關閉或重新整理選單。4.擋住所有其他移動物品的方式
InventoryDragEvent也要取消,並在選單開著的時候處理 Shift 點擊、數字鍵,以及在玩家自己物品欄裡的點擊。5.清單很長就加上分頁
放不下的傳送點或商店物品,就把最下面一列留給上一頁、下一頁和關閉按鈕。
6.用指令開啟
例如
/warps,或從物品、NPC 開啟。如果選單不是給所有人用的,就替指令加上權限。7.建置並逐一點擊測試
讓 Codexe 編譯插件,加入測試伺服器,把每個按鈕都點一遍。測試玩家也能幫你開啟選單、點擊格子。
讓選單安全的規則
- 用 holder 辨識選單,絕對不要靠標題:任何改過名的箱子都能複製標題。
- 在做任何其他事之前先取消點擊,這樣就算動作出錯,物品也不會留在玩家的游標上。
- 取消來自玩家物品欄的拖曳和 Shift 點擊,否則物品可能被塞進選單裡。
- 不要相信格子裡的物品:依格子編號或物品上的標籤找出對應的動作。
- 耗時的工作(讀取資料庫、網路請求)要在主執行緒之外執行,完成後再更新選單。
用設定檔定義選單
伺服器擁有者喜歡不必重新建置就能修改選單。要求把每個選單定義在設定檔裡,包含大小、標題,以及每個按鈕的格子、材料、名稱、物品描述和動作:
| 鍵 | 範例 | 作用 |
|---|---|---|
size | 27 | 格子數量,必須是 9 的倍數 |
slot | 13 | 按鈕放在哪一格,從 0 開始算 |
material | ENDER_PEARL | 顯示的物品 |
action | warp:spawn | 點擊後做什麼:傳送點、指令、另一個選單 |
描述範例
「一個名為 WarpMenu 的 Paper 1.21.4 插件。/warps 會開啟一個 6 列的選單,每個傳送點一個按鈕,每頁 45 個,最下面一列是上一頁、下一頁和關閉按鈕。管理員用 /setwarp <name> <material> 新增傳送點,用 /delwarp 刪除。點擊傳送點後有 3 秒準備時間,期間移動就會取消,時間到才傳送。玩家不能拿走或移動選單裡的任何物品。傳送點存在 warps.yml,選單標題、按鈕名稱和訊息放在 config.yml。」
用測試玩家測試選單
Codexe 的測試玩家可以開啟選單並點擊某一格,然後確認有沒有開啟選單、出現訊息或拿到物品。用你自己的話加入一項測試,例如「一般玩家執行 /warps 並點擊第 0 格,看到傳送訊息」,之後 Codexe 每次交付修改都會重新執行它。
常見問題
1.8 能用嗎?
從 1.8 開始每個版本都有箱子選單。API 在細節上(材料名稱、標題)有所不同,所以請在需求中寫明版本。
可以改用 Skript 做選單嗎?
可以,用 skript-gui 附加元件,Codexe 的 Skript 測試伺服器已經裝好了。大型或使用頻繁的選單,還是用插件比較好。
選單可以做成自訂材質的樣子嗎?
只能透過資源包,修改物品或物品欄的背景。插件這邊都一樣:格子、物品和點擊。
製作你的選單
這則提示詞開啟後即可直接傳送:
“一個名為 WarpMenu 的 Paper 1.21.4 插件:/warps 開啟 6 列選單,每個傳送點一個按鈕,每頁 45 個,最下面一列是上一頁/下一頁/關閉按鈕,管理員可用 /setwarp(帶名稱和材料)和 /delwarp,傳送前有 3 秒準備時間且移動就取消,任何物品都不能被拿走或移動,傳送點存在 warps.yml,標題和訊息放在 config.yml。”
用 Codexe 產生這個