- 版权类型
- 原创
- 插件中文名称
- 小雨菜单
- 插件英文名称
- XYMenu
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Folia
- Purpur
- PufferFish
- Leaves
- 语言支持
- 多语言
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
XYMenu - 菜单
功能最全 · 性能最强 · 体验最好的现代化菜单插件
专为 Spigot/Paper./Folia 1.20+ 设计
专为 Spigot/Paper./Folia 1.20+ 设计
核心特性
| 全格式颜色 • Hex颜色: #ff6b6b #00d4ff • MiniMessage: <gradient> <rainbow> • 传统颜色: &a &c &l • 任意组合使用 | 智能头颅 • Base64纹理 (推荐) • 图片URL直链 • 玩家名称 + PAPI • 自动识别类型 |
| 自定义命令 • 每个菜单独立命令 • 多别名支持 • 权限控制 • 自动注册 | 沉浸体验 • 开闭菜单音效 • 自定义消息 • 音量音调控制 • 全服广播 |
| 灵活槽位 • 单个: 10 • 范围: "0-8" • 列表: [1,2,3] • 组合: "0-8,45-53" | 全面点击 • 左键/右键/中键 • Shift+左键/右键 • 每种点击独立动作 • 无冲突执行 |
| 条件可见 • 权限检测 • 金钱检测 • 占位符检测 • 同槽位多状态 | 需求系统 • 点击前置条件 • 自动扣款 • 失败消息提示 • 拒绝命令执行 |
快速开始
安装步骤:- 将插件放入 plugins 文件夹
- 重启服务器
- 编辑 plugins/XYMenu/menus/ 中的YAML文件
- 使用 /xymenu reload 重载配置
代码:
/xymenu open <菜单> # 打开指定菜单
/xymenu reload # 重载所有配置
/xymenu list # 列出可用菜单
/xymenu help # 显示帮助信息
✦ 需求系统详解 ✦
什么是需求系统?需求系统允许你为菜单物品设置各种条件,包括点击需求和可见性需求,实现丰富的交互逻辑。
两种需求类型对比
| 类型 | 配置位置 | 作用 |
|---|---|---|
| 点击需求 (requirements) | click-actions 内部 | 控制点击后是否执行命令 |
| 可见性需求 (visibility-requirements) | 物品根级别 | 控制物品是否显示 |
关键区别:
• 点击需求:物品始终可见,不满足时执行 deny-commands
• 可见性需求:不满足时物品完全不显示,无法点击
支持的需求类型
1. 权限需求 (permission)检查玩家是否拥有指定权限
代码:
# 配置参数
type: permission # 需求类型
permission: "vip.member" # 权限节点
value: true # true=有权限 / false=无权限
fail-message: "<red>权限不足!</red>" # 失败消息(可选)
使用场景: VIP专属、管理员功能、等级限制
2. 金钱需求 (money)
检查玩家金币是否满足条件(需要Vault和经济插件)
代码:
# 配置参数
type: money # 需求类型
amount: 1000 # 金额数量
operator: ">=" # 比较运算符
take-money: true # 是否自动扣款(可选)
fail-message: "<red>金币不足!</red>" # 失败消息(可选)
支持的运算符: >= (大于等于) | > (大于) | = (等于) | < (小于) | <= (小于等于) | != (不等于)
使用场景: 商店系统、购买物品、经济检测
3. 占位符需求 (placeholder)
基于PlaceholderAPI占位符进行条件判断(需要PAPI插件)
代码:
# 配置参数
type: placeholder # 需求类型
placeholder: "%player_level%" # PAPI占位符
operator: ">=" # 比较运算符
value: "30" # 比较值
fail-message: "<red>等级不足30!</red>" # 失败消息(可选)
支持的运算符:
• 数值比较: >= | > | = | < | <= | !=
• 文本匹配: contains (包含) | starts_with (开头) | ends_with (结尾) | matches (正则)
使用场景: 等级限制、在线时间、任务进度
实战配置示例
示例1:VIP商店 - 可见性需求
代码:
items:
# VIP专属物品(只有VIP能看到)
vip_item:
slot: 13
material: DIAMOND
name: '<gold>VIP专属商品</gold>'
# 可见性需求
visibility-requirements:
- type: permission
permission: "vip.member"
value: true # 必须有VIP权限才能看到此物品
click-actions:
left-click:
commands:
- 'MESSAGE:<green>VIP专属!</green>'
# 购买VIP按钮(非VIP才能看到)
buy_vip:
slot: 13 # 相同槽位!根据条件显示不同物品
material: PAPER
name: '<yellow>购买VIP</yellow>'
# 可见性需求(相反条件)
visibility-requirements:
- type: permission
permission: "vip.member"
value: false # 没有VIP权限才能看到
click-actions:
left-click:
commands:
- 'COMMAND:shop'
示例2:商店购买 - 点击需求
代码:
items:
diamond_shop:
slot: 11
material: DIAMOND
name: '<aqua>钻石 x1</aqua>'
lore:
- '<gray>价格: <gold>1000金币</gold></gray>'
- ''
- '<green>点击购买</green>'
click-actions:
left-click:
# 点击需求(不影响可见性)
requirements:
- type: money
amount: 1000
operator: ">="
take-money: true # 自动扣除1000金币
fail-message: "<red>金币不足! 需要1000金币</red>"
# 满足需求后执行
commands:
- 'MESSAGE:<green>购买成功! 扣除1000金币</green>'
- 'CONSOLE:give %player% diamond 1'
- 'SOUND:ENTITY_PLAYER_LEVELUP,1.0,1.0'
# 不满足需求时执行
deny-commands:
- 'SOUND:ENTITY_VILLAGER_NO,1.0,1.0'
示例3:终极奖励 - 多重条件
代码:
items:
ultimate_reward:
slot: 22
material: NETHER_STAR
name: '<gradient:#FF0000:#FFFF00>终极奖励</gradient>'
lore:
- '<gray>需要同时满足:</gray>'
- '<gray>- VIP权限</gray>'
- '<gray>- 金币 >= 5000</gray>'
- '<gray>- 等级 >= 30</gray>'
glowing: true
# 可见性需求(全部满足才显示)
visibility-requirements:
- type: permission
permission: "vip.member"
value: true
- type: money
amount: 5000
operator: ">="
- type: placeholder
placeholder: "%player_level%"
operator: ">="
value: "30"
click-actions:
left-click:
# 点击时扣款
requirements:
- type: money
amount: 5000
operator: ">="
take-money: true
fail-message: "<red>金币不足5000!</red>"
commands:
- 'MESSAGE:<gold>恭喜获得终极奖励!</gold>'
- 'CONSOLE:give %player% nether_star 1'
- 'BROADCAST:<gold>%player% 获得了终极奖励!</gold>'
示例4:签到系统 - 同槽位状态切换
代码:
items:
# 状态1:可领取
daily_reward_available:
slot: 10
material: CHEST_MINECART
name: '<light_purple>每日礼包</light_purple>'
lore:
- '<gray>你的礼包已送达!</gray>'
- ''
- '<yellow>点击领取</yellow>'
visibility-requirements:
- type: permission
permission: "签到.1"
value: false # 没有签到权限 = 可以领取
click-actions:
left-click:
commands:
- 'CONSOLE:lp user %player_name% permission settemp 签到.1 true 1d'
- 'MESSAGE:<green>领取成功!</green>'
# 状态2:冷却中(同一槽位)
daily_reward_cooldown:
slot: 10 # 相同槽位!
material: MINECART
name: '<red>冷却中...</red>'
auto-update: true # 启用自动更新显示倒计时
lore:
- '<gray>你已经领取过了</gray>'
- ''
- '<red>下次领取: %luckperms_expiry_time_签到.1%</red>'
visibility-requirements:
- type: permission
permission: "签到.1"
value: true # 有签到权限 = 冷却中
click-actions:
left-click:
commands:
- 'MESSAGE:<red>你已经领取过了!</red>'
配置技巧与注意事项
✓ 推荐做法
• 同槽位物品使用互斥的可见性条件(value: true/false)
• 使用 auto-update: true 让动态内容实时更新
• 点击需求配合 deny-commands 提供友好的失败反馈
• 合理组合多个需求实现复杂逻辑
✗ 避免问题
• 不要为同槽位物品设置相同的可见性条件
• 金钱需求需要安装 Vault 和经济插件
• 占位符需求需要安装 PlaceholderAPI 及相关扩展
• 所有需求采用 AND 逻辑(必须全部满足)
交互系统
| 输入系统 (INPUT) 等待玩家在聊天框输入内容
代码:
| 玩家选择器 GUI选择在线/离线玩家
代码:
| 确认对话框 危险操作二次确认
代码:
|
自定义头颅系统
| Base64纹理 (推荐) 从 minecraft-heads.com 获取
代码:
| 图片URL 支持任何在线图片
代码:
| 玩家名称 支持PAPI占位符
代码:
|
点击方式详解
| 点击类型 | 触发条件 | 使用场景 |
|---|---|---|
| left-click | 鼠标左键点击 | 主要功能 |
| right-click | 鼠标右键点击 | 次要功能 |
| middle-click | 鼠标中键点击 | 特殊功能 |
| double-click | 双击 | 快捷操作 |
| shift-left-click | Shift + 左键 | 批量操作 |
| shift-right-click | Shift + 右键 | 高级功能 |
菜单项完整配置
| 属性 | 类型 | 说明 | 示例 |
|---|---|---|---|
| slot | 数字/字符串 | 物品槽位 | 13, "0-8", [1,2,3] |
| material | 字符串 | 物品材质 | DIAMOND, PLAYER_HEAD |
| name | 字符串 | 显示名称(支持颜色) | '<gradient:#ff6b6b>名字</gradient>' |
| lore | 列表 | 物品描述 | - '第一行' - '第二行' |
| amount | 数字/字符串 | 物品数量(支持PAPI) | 1, "%player_level%" |
| glowing | 布尔值 | 是否发光效果 | true, false |
| auto-update | 布尔值 | 是否实时更新 | true, false |
| custom-model-data | 数字 | 自定义模型数据 | 1001, 1002 |
| visibility-requirements | 列表 | 可见性条件 | 控制物品是否显示 |
| click-actions | 对象 | 点击动作配置 | 包含 requirements 等 |
菜单全局配置
| 配置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| title | 字符串 | 菜单标题(支持颜色) | 必需 |
| size | 数字 | 菜单大小(9的倍数) | 27 |
| command | 字符串 | 打开命令 | 可选 |
| aliases | 列表 | 命令别名 | [] |
| permission | 字符串 | 打开权限 | 可选 |
| open-sound | 字符串 | 打开音效 | 'BLOCK_CHEST_OPEN,1.0,1.0' |
| close-sound | 字符串 | 关闭音效 | 'BLOCK_CHEST_CLOSE,1.0,1.0' |
| open-messages | 列表 | 打开消息 | - '<green>欢迎!' |
| close-messages | 列表 | 关闭消息 | - '<gray>再见!' |
槽位配置语法
| 格式 | 示例 | 说明 |
|---|---|---|
| 单个槽位 | slot: 13 | 第13个槽位 |
| 连续范围 | slot: "0-8" | 0到8的所有槽位 |
| 不连续列表 | slot: "1,3,5,7" | 1,3,5,7四个槽位 |
| 组合配置 | slot: "0-8,45-53" | 顶部和底部边框 |
| 列表格式 | slot: [9, 17, 26]</td><td>多个独立槽位 |
推荐布局模式:
• 顶部边框: "0-8"
• 底部边框: "45-53" (54格菜单)
• 侧边装饰: [9,18,27,36]
• 功能区域: "10-16,19-25"
• 中心物品: 22
完整动作类型
| 动作类型 | 说明 | 示例 |
|---|---|---|
| COMMAND | 玩家执行命令 | 'COMMAND:spawn' |
| CONSOLE | 控制台执行命令 | 'CONSOLE:give %player% diamond' |
| MESSAGE | 发送消息给玩家 | 'MESSAGE:<green>你好!' |
| BROADCAST | 全服广播消息 | 'BROADCAST:<gold>公告!' |
| CONNECT | 连接到子服 | 'CONNECT:lobby-02' |
| SOUND | 播放音效 | 'SOUND:BLOCK_CHEST_OPEN,1.0,1.0' |
| CLOSE | 关闭菜单 | 'CLOSE' |
| MENU | 打开其他菜单 | 'MENU:other_menu' |
| INPUT | 等待玩家输入 | 等待输入文本 |
| PLAYER_SELECTOR | 选择玩家GUI | 选择目标玩家 |
| CONFIRMATION | 确认对话框 | 危险操作确认 |
常见问题
A: 访问 https://minecraft-heads.com/ 选择喜欢的头颅,复制"Value"字段的内容作为Base64值。
A: 使用 visibility-requirements 控制物品显示:
支持三种需求类型:
• permission - 权限检查
• money - 金币检查(需要Vault)
• placeholder - 占位符检查(需要PAPI)
多个需求必须同时满足才会显示物品。
代码:
visibility-requirements:
- type: permission
permission: "vip.member"
value: true # true=有权限显示 / false=无权限显示
支持三种需求类型:
• permission - 权限检查
• money - 金币检查(需要Vault)
• placeholder - 占位符检查(需要PAPI)
多个需求必须同时满足才会显示物品。
A: 使用金钱需求的 take-money: true 选项:
⚠ 需要安装 Vault 和经济插件
代码:
click-actions:
left-click:
requirements:
- type: money
amount: 1000
operator: ">="
take-money: true # 自动扣款
fail-message: "<red>金币不足!</red>"
commands:
- 'MESSAGE:<green>购买成功!</green>'
- 'CONSOLE:give %player% diamond 1'
⚠ 需要安装 Vault 和经济插件
A: 可以!这是条件可见的核心功能。
配置多个物品使用相同的 slot 值,通过不同的 visibility-requirements 控制显示:
插件会显示第一个满足条件的物品。
配置多个物品使用相同的 slot 值,通过不同的 visibility-requirements 控制显示:
代码:
items:
# VIP玩家看到的
vip_item:
slot: 13
material: DIAMOND
visibility-requirements:
- type: permission
permission: "vip.member"
value: true
# 普通玩家看到的
normal_item:
slot: 13 # 相同槽位
material: PAPER
visibility-requirements:
- type: permission
permission: "vip.member"
value: false
插件会显示第一个满足条件的物品。
插件信息
| 适用版本 | 前置插件 | 可选插件 |
|---|---|---|
| Spigot/Paper/Folia 1.20+ | 无 | PlaceholderAPI Vault + 经济插件 LuckPerms |
配置支持
我们为所有用户提供免费的配置支持!如果您在配置过程中遇到任何问题:
在帖子下方回复描述问题
提供相关的配置代码片段
我们会尽快为您提供解决方案
立即下载,体验史上最强大的菜单插件!
支持与反馈:在帖子下方回复 | 更新日志:查看最新功能和修复
在帖子下方回复描述问题
提供相关的配置代码片段
我们会尽快为您提供解决方案
立即下载,体验史上最强大的菜单插件!
支持与反馈:在帖子下方回复 | 更新日志:查看最新功能和修复