做我的世界服务器菜单,最省事的路子是:Java 版装 DeluxeMenus 加 PlaceholderAPI,一份 YAML 文件定义界面和点击指令,再用一条自定义命令把菜单甩给玩家;基岩版则优先考虑行为包里的 @minecraft/server-ui 表单,或者干脆用跨端插件让 Geyser 去转译。下面这套流程,从选插件到写配置再到上线避坑,都是开服玩家反复踩出来的经验,照着做基本不会翻车。
菜单在服务器里到底扮演什么角色
很多人把菜单理解成“好看的门面”,其实它更像服务器的控制台面板,玩家进服第一眼看到的是它,日常点传送、领奖励、开商店、看在线人数、找客服入口,全靠它,菜单做得好,玩家少问十句“怎么去主城”;菜单做得乱,服主就得在公屏上一条条手打指令。
业内共识认为,一个成熟服务器的菜单至少要覆盖四类功能:导航类(传送、回城、去地皮)、功能类(商店、任务、签到)、信息类(在线人数、公告、规则)、管理类(举报、反馈、赞助入口),先想清楚要放哪几类,再去动手配,比上来就埋头写 YAML 效率高得多。
我的世界服务器菜单怎么做?从零到上线的实操路径
第一步:把前置插件装齐
DeluxeMenus 不是单打独斗的插件,它要靠几个底座才能跑出效果:
- PlaceholderAPI:负责变量占位符,
%player_name%、%vault_eco_balance%,菜单里显示玩家名和余额全靠它。 - Vault:经济接口,配合 EssentialsX 或 CMI 之类经济插件,菜单里才能做“花 500 金币买个东西”。
- LuckPerms:权限判断,用菜单区分 VIP 和普通玩家能看到哪些按钮。
- 对应版本的 PlaceholderAPI 扩展:
/papi ecloud download Player这类命令按需下载,装完/papi reload生效。
装插件时留意版本匹配,1.20 以后的 Paper 服务端对插件 API 版本要求更严,老插件容易出现 Unsupported API version 的报错,下插件时看清支持的版本区间再放进去。
第三步之前,先说说我的世界服务器菜单插件怎么选
市面上能用的有好几款,差别比你想象的大:
| 插件 | 维护状态 | 上手难度 | 脚本能力 | 适合谁 |
|---|---|---|---|---|
| DeluxeMenus | 持续更新 | 中等 | 支持条件判断、多菜单跳转 | 绝大多数 Java 服 |
| TrMenu | 活跃,国内社区常用 | 偏高 | 内置脚本引擎,能写逻辑 | 想做复杂交互的服 |
| ChestCommands | 基本停更 | 低 | 很弱 | 只求能用的老服 |
| ZMenu | 较新 | 中等 | 一般 | 尝鲜、轻量需求 |
行业里普遍的做法是:新服直接上 DeluxeMenus,生态最全、教程最多、遇到问题好搜答案,已经有成熟技术栈的老服,如果原菜单是 ChestCommands,不必急着迁移,先确认有没有必须用到的功能再决定,插件下载优先去 SpigotMC、Modrinth 这类官方发布平台,来源不明的整合包插件容易夹带后门。
第三步:写一份真能跑起来的配置文件
菜单文件放在 plugins/DeluxeMenus/gui_menus/ 目录下,新建一个 main_menu.yml,下面是一个最小可用版本:
open_command: menu
size: 27
items:
spawn:
material: COMPASS
slot: 11
display_name: '&a回到主城'
lore:
- '&7点击传送到出生点'
left_click_commands:
- '[player] spawn'
- '[close]'
shop:
material: EMERALD
slot: 13
display_name: '&e服务器商店'
left_click_commands:
- '[openguimenu] shop'
info:
material: BOOK
slot: 15
display_name: '&b在线信息'
lore:
- '&7当前在线: &f%server_online%'
- '&7你的余额: &f%vault_eco_balance%'
几个关键点解释一下:
size: 27表示 3 行 9 列的箱子界面,格子编号从 0 到 26。slot: 11落在第二行第三格,这个位置玩家视线最先扫到。open_command: menu注册一个打开指令,玩家输入/menu就能弹出界面,想换名字直接改这一行,重载后生效。- 点击行为写在
left_click_commands里,[player]是以玩家身份执行,[console]是后台执行,[close]关界面,[openguimenu]跳到另一个菜单,左键和右键可以绑定不同动作,写right_click_commands即可。 - 变量必须带 ,而且对应扩展装好了才会显示成真实数值,否则原样露出
%vault_eco_balance%很难看。
改完文件执行 /dm reload,或者干脆 /reload confirm 重启插件,后台报错会精确指出第几行哪一项有问题,对着改就行。
第四步:给菜单加权限和打开入口
菜单写好了不能谁都能进,加一段权限判断:
open_requirement:
requirements:
perm:
type: has permission
permission: server.menu.use
deny_commands:
- '[message] &c你没有权限打开这个菜单'
权限节点用 LuckPerms 发给默认组:/lp group default permission set server.menu.use true。
打开入口除了 /menu 命令,还可以做成主城 NPC玩家右键 NPC 触发 /dm open main_menu;也可以做成进服自动弹出,在 DeluxeMenus 的 config.yml 里开启 auto_open,或者用别的插件在玩家加入时执行命令,手机端玩家尤其依赖菜单,因为敲指令对他们来说太痛苦了。
我的世界基岩版服务器菜单怎么做?跨端场景要多留一手
基岩版的情况和 Java 版完全不同,没有 Bukkit 那套 API,菜单方案得换思路:
- 行为包脚本路线:从 1.20 开始稳定的
@minecraft/server-ui模块,提供ActionFormData(按钮列表)和ModalFormData(输入表单),玩家触发某个事件后弹出原生表单,点击回调里写逻辑,这是目前最正规的基岩版做法,不依赖第三方插件。 - 服务端插件路线:用 LeviLamina(原 LiteLoaderBDS)或 PowerNukkitX 开服,再装对应的菜单插件,语法和 Java 版有相似之处。
- 原版命令方块路线:给玩家发带自定义名称的物品,用
/execute检测手持物品触发效果,能做,但槽位有限、逻辑硬编码,玩家一换物品就失效,只适合临时过渡。
如果服务器是 Java 版开、基岩版玩家通过 Geyser 进来,Java 的箱子菜单会被转译成基岩界面,简单菜单基本可用,但复杂 lore、多行描述、自定义模型物品容易显示不全,稳妥做法是给基岩玩家留一条 /menu 命令入口,或者单独做一个简化版菜单,别指望一套界面通吃两端。
我的世界服务器菜单定制多少钱?先判断值不值得花
这个问题没有统一价,市面上从几十块的现成模板,到按工时计费的定制开发,跨度相当大,判断标准其实很简单:
- 需求是标准动作(传送、商店、签到):自己配,DeluxeMenus 的文档和社区示例足够,半天能搞定。
- 需求涉及跨插件联动(任务系统深度对接、自定义计算公式、动态价格):找人定制更划算,自己摸索的时间成本往往高于开发费。
- 需求是纯美化(界面布局、图标搭配、lore 文案):这部分花的是设计费,跟技术难度无关,可以先自己搭框架再请人润色。
要提醒的是,定制前把功能清单写清楚,用文字描述每个按钮点下去发生什么。需求描述得越具体,报价越不容易跑偏,做完之后让服主拿到配置文件的所有权和注释说明,别拿一份自己都改不动的黑盒。
菜单做出来没人用?四个高频坑
- 界面里塞了二十个按钮,玩家在手机上根本点不准,主菜单控制在 9 个格子以内,细节收进二级菜单。
- 点击没反应也不给提示,所有失败分支都写
deny_commands或失败提示,让玩家知道是没权限、没金币还是冷却中。 - 变量全变成乱码或原样显示,九成是 PlaceholderAPI 扩展没装,或者变量名拼错,
/papi parse me %变量%可以当场测试。 - 菜单文件编码不对导致中文乱码,YAML 统一存 UTF-8,用记事本另存时注意别选 ANSI。
菜单改动后别忘了 /dm reload,不少“我明明改了却没生效”的案例,都是忘了重载。
Q&A:我的世界服务器菜单常见疑问解答
我的世界服务器菜单在哪个文件夹?
Java 版用 DeluxeMenus 的话,菜单定义文件在 plugins/DeluxeMenus/gui_menus/,全局配置在 plugins/DeluxeMenus/config.yml,ChestCommands 对应 plugins/ChestCommands/menu/,基岩版行为包的 UI 定义在行为包根目录的 scripts 或 ui 文件夹里,具体看用的是脚本 API 还是 JSON UI。
菜单点了没反应,一般是什么原因?
按顺序排查三层:先看后台有没有报错,YAML 缩进错误会让整个菜单加载失败;再看权限节点有没有发给玩家组;最后确认点击指令本身能不能在控制台手动执行成功,三层都排除,再看是不是客户端版本和 Geyser 转译导致的界面兼容问题。
不用插件能做服务器菜单吗?
能做,但局限很大,原版命令方块配合 /tellraw 的可点击文本、/give 带自定义名称的物品、/execute 检测手持物,可以拼出简易菜单,适合单人存档或小型生存服演示,真正对玩家开放的服务器,还是走插件或行为包脚本这两条路,维护成本低得多。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787076.html


