指南

如何制作 Minecraft GUI 菜单插件

更新于 2026年10月18日

服务器菜单(传送点、商店、礼包、设置)都是由插件打开并控制的箱子物品栏。每个格子里放一个物品,充当按钮。它们看起来简单,但只要菜单没有取消所有类型的点击,玩家就能把按钮直接拿走。本指南介绍菜单的工作原理,以及如何让 Codexe 构建并测试一个菜单。

从这个例子开始。

用 Codexe 生成这个

分步说明

  1. 1.画出菜单草图

    箱子菜单有 1 到 6 行,每行 9 格(9 到 54 格)。写明哪个物品放在哪一格、每次点击做什么,以及哪些格子只是装饰,比如玻璃板。

  2. 2.用 holder 创建物品栏

    用 Bukkit.createInventory(holder, size, title) 打开它,并使用你自己的 InventoryHolder 类。插件正是靠 holder 判断一次点击发生在它的菜单里,而不是普通箱子里。

  3. 3.处理点击

    在 InventoryClickEvent 中检查 holder,取消事件,然后执行该格子对应的操作。操作完成后关闭或刷新菜单。

  4. 4.封住移动物品的其他所有方式

    同样要取消 InventoryDragEvent,并在菜单打开期间处理 Shift 点击、数字键,以及在玩家自己物品栏里的点击。

  5. 5.列表很长就加上分页

    放不下的传送点或商店物品,把最下面一行留给上一页、下一页和关闭按钮。

  6. 6.通过命令打开

    例如 /warps,或者通过物品、NPC 打开。如果菜单不是给所有人用的,就给命令加上权限。

  7. 7.构建并逐一点击测试

    让 Codexe 编译插件,加入测试服务器,点一遍每个按钮。测试玩家也可以替你打开菜单并点击格子。

保证菜单安全的规则

  • 通过 holder 识别菜单,绝不要靠标题:任何改过名的箱子都能复制标题。
  • 在做任何其他事之前先取消点击,这样即使操作出错,物品也不会留在玩家的光标上。
  • 取消来自玩家物品栏的拖动和 Shift 点击,否则物品可能被塞进菜单。
  • 不要信任格子里的物品:按格子编号或物品上的标签查找对应操作。
  • 把耗时的工作(读数据库、网络请求)放到主线程之外,完成后再更新菜单。

用配置文件定义菜单

服务器所有者喜欢不重新构建就修改菜单。要求把每个菜单定义在配置文件里,包括大小、标题,以及每个按钮的格子、材料、名称、描述和操作:

键示例作用
size27格子数量,必须是 9 的倍数
slot13按钮放在哪一格,从 0 开始计数
materialENDER_PEARL显示的物品
actionwarp: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 生成这个
如何为 Minecraft 制作 GUI 菜单插件 | Codexe