Hướng dẫn
Cách làm plugin menu GUI cho Minecraft
Cập nhật 18 tháng 10, 2026
Menu của máy chủ (warp, cửa hàng, kit, cài đặt) là các túi đồ dạng rương mà plugin mở và điều khiển. Mỗi ô chứa một vật phẩm hoạt động như một nút bấm. Trông thì đơn giản, nhưng một menu không chặn mọi kiểu nhấp sẽ để người chơi mang luôn các nút về nhà. Hướng dẫn này nói về cách menu hoạt động và cách để có một menu được build và thử nghiệm.
Bắt đầu từ ví dụ này.
Tạo thứ này với CodexeTừng bước
1.Phác thảo menu
Menu rương có 1 đến 6 hàng, mỗi hàng 9 ô (từ 9 đến 54). Ghi rõ vật phẩm nào nằm ở ô nào, mỗi cú nhấp làm gì, và ô nào chỉ để trang trí như tấm kính.
2.Tạo túi đồ với một holder
Mở nó bằng
Bukkit.createInventory(holder, size, title), dùng lớpInventoryHoldercủa riêng bạn. Holder là cách plugin biết một cú nhấp xảy ra trong menu của nó chứ không phải trong một cái rương bình thường.3.Xử lý cú nhấp
Trong
InventoryClickEvent, kiểm tra holder, hủy sự kiện, rồi chạy hành động của ô đó. Đóng menu hoặc làm mới nó sau khi thực hiện hành động.4.Chặn mọi cách khác để di chuyển vật phẩm
Hủy cả
InventoryDragEvent, và xử lý shift-click, phím số và cú nhấp trong túi đồ của chính người chơi khi menu đang mở.5.Thêm phân trang nếu danh sách dài
Với warp hoặc vật phẩm cửa hàng không đủ chỗ, dành hàng dưới cùng cho các nút trang trước, trang sau và đóng.
6.Mở nó bằng một lệnh
Ví dụ
/warps, hoặc từ một vật phẩm hay NPC. Gán quyền cho lệnh nếu menu không dành cho tất cả mọi người.7.Build và bấm thử từng nút
Để Codexe biên dịch plugin, vào máy chủ thử nghiệm và bấm từng nút. Người chơi thử nghiệm cũng có thể mở menu và bấm các ô thay bạn.
Các quy tắc giữ cho menu an toàn
- Nhận diện menu qua holder của nó, đừng bao giờ qua tiêu đề: tiêu đề có thể bị sao chép bằng bất kỳ cái rương nào được đổi tên.
- Hủy cú nhấp trước khi làm bất cứ việc gì khác, để lỗi trong hành động không bao giờ bỏ lại vật phẩm trên con trỏ của người chơi.
- Hủy các thao tác kéo thả và shift-click từ túi đồ của người chơi, nếu không vật phẩm có thể bị đẩy vào menu.
- Đừng tin vật phẩm trong ô: hãy tra hành động theo số ô hoặc theo một tag trên vật phẩm.
- Chạy các tác vụ chậm (đọc cơ sở dữ liệu, gọi web) ngoài luồng chính và cập nhật menu khi xong.
Menu từ tệp cấu hình
Chủ máy chủ thích thay đổi menu mà không cần build lại. Hãy yêu cầu mỗi menu được định nghĩa trong một tệp cấu hình, với kích thước, tiêu đề và, cho từng nút, ô, vật liệu, tên, lore và hành động:
| Khóa | Ví dụ | Tác dụng |
|---|---|---|
size | 27 | Số ô, là bội số của 9 |
slot | 13 | Vị trí của nút, đếm từ 0 |
material | ENDER_PEARL | Vật phẩm được hiển thị |
action | warp:spawn | Cú nhấp làm gì: một warp, một lệnh, một menu khác |
Mô tả ví dụ
"Một plugin Paper 1.21.4 tên WarpMenu. /warps mở một menu 6 hàng với mỗi warp một nút, 45 nút mỗi trang, cùng các nút trang trước, trang sau và đóng ở hàng dưới cùng. Admin thêm warp bằng /setwarp <name> <material> và xóa bằng /delwarp. Bấm vào một warp sẽ dịch chuyển sau 3 giây chờ, bị hủy nếu di chuyển. Người chơi không thể lấy hay di chuyển bất kỳ vật phẩm nào trong menu. Warp lưu trong warps.yml, tiêu đề menu, tên nút và tin nhắn trong config.yml."
Thử menu với người chơi thử nghiệm
Người chơi thử nghiệm của Codexe có thể mở menu và bấm vào một ô, rồi kiểm tra xem có menu được mở, có tin nhắn xuất hiện hay có vật phẩm được trao. Thêm một bài kiểm thử bằng lời của bạn, ví dụ "một người chơi thường chạy /warps, bấm ô 0 và thấy tin nhắn dịch chuyển", và nó sẽ chạy lại mỗi khi Codexe giao một thay đổi.
Câu hỏi
Cách này có chạy trên 1.8 không?
Menu rương có ở mọi phiên bản từ 1.8. API khác nhau ở chi tiết (tên vật liệu, tiêu đề), nên hãy ghi phiên bản trong yêu cầu.
Tôi có thể làm menu bằng Skript thay thế không?
Có, với add-on skript-gui, đã được cài trên máy chủ thử nghiệm Skript của Codexe. Plugin phù hợp hơn cho các menu lớn hoặc dùng nhiều.
Menu có thể trông như một texture tùy chỉnh không?
Chỉ khi có resource pack thay đổi vật phẩm hoặc nền của túi đồ. Phía plugin vẫn như cũ: ô, vật phẩm và cú nhấp.
Tạo menu của bạn
Prompt này mở ra sẵn sàng để gửi:
“Một plugin Paper 1.21.4 tên WarpMenu: /warps mở menu 6 hàng với mỗi warp một nút, 45 nút mỗi trang, các nút trang trước/trang sau/đóng ở hàng dưới cùng, /setwarp với tên và vật liệu và /delwarp cho admin, chờ 3 giây trước khi dịch chuyển và bị hủy nếu di chuyển, không thể lấy hay di chuyển vật phẩm nào, warp lưu trong warps.yml, tiêu đề và tin nhắn trong config.yml.”
Tạo thứ này với Codexe