XYMenu —— 为现代服务器而生的菜单 [Folia支持]

原创 闭源 XYMenu —— 为现代服务器而生的菜单 [Folia支持] 1.1.6-folia

请登录后获取
版权类型
原创
插件中文名称
小雨菜单
插件英文名称
XYMenu
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
  3. Folia
  4. Purpur
  5. PufferFish
  6. Leaves
语言支持
多语言
适配版本(Java)
  1. 1.21
  2. 1.20
  3. 1.19
  4. 1.18
  5. 1.17
  6. 1.16

XYMenu - 菜单​

功能最全 · 性能最强 · 体验最好的现代化菜单插件
专为 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+左键/右键
• 每种点击独立动作
• 无冲突执行
条件可见
• 权限检测
• 金钱检测
• 占位符检测
• 同槽位多状态
需求系统
• 点击前置条件
• 自动扣款
• 失败消息提示
• 拒绝命令执行

快速开始​

安装步骤:
  1. 将插件放入 plugins 文件夹
  2. 重启服务器
  3. 编辑 plugins/XYMenu/menus/ 中的YAML文件
  4. 使用 /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)
等待玩家在聊天框输入内容
代码:
- type: 'INPUT'
  prompt: '请输入内容:'
  timeout: 30
  cancel: '取消'
  commands:
    - 'MESSAGE:你输入了: {input}'
玩家选择器
GUI选择在线/离线玩家
代码:
- type: 'PLAYER_SELECTOR'
  title: '选择玩家'
  commands:
    - 'COMMAND:tp {player}'
确认对话框
危险操作二次确认
代码:
- type: 'CONFIRMATION'
  message: '确认执行?'
  timeout: 15
  confirm-commands:
    - 'MESSAGE:<green>✓ 已确认</green>'
  cancel-commands:
    - 'MESSAGE:<gray>已取消</gray>'

自定义头颅系统​


Base64纹理 (推荐)
从 minecraft-heads.com 获取
代码:
skull: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7...'
skull-type: BASE64
图片URL
支持任何在线图片
代码:
skull: 'http://textures.minecraft.net/...'
skull-type: URL
玩家名称
支持PAPI占位符
代码:
skull: '%player_name%'
skull-type: PLAYER

点击方式详解​


点击类型触发条件使用场景
left-click鼠标左键点击主要功能
right-click鼠标右键点击次要功能
middle-click鼠标中键点击特殊功能
double-click双击快捷操作
shift-left-clickShift + 左键批量操作
shift-right-clickShift + 右键高级功能

菜单项完整配置​


属性类型说明示例
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 控制物品显示:

代码:
visibility-requirements:
  - type: permission
    permission: "vip.member"
    value: true  # true=有权限显示 / false=无权限显示

支持三种需求类型:
• permission - 权限检查
• money - 金币检查(需要Vault)
• placeholder - 占位符检查(需要PAPI)

多个需求必须同时满足才会显示物品。

A: 使用金钱需求的 take-money: true 选项:

代码:
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 控制显示:

代码:
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

配置支持​


我们为所有用户提供免费的配置支持!如果您在配置过程中遇到任何问题:

在帖子下方回复描述问题
提供相关的配置代码片段
我们会尽快为您提供解决方案

立即下载,体验史上最强大的菜单插件!

支持与反馈:在帖子下方回复 | 更新日志:查看最新功能和修复​
作者
Thexiaoyu
价格
85.00金粒
下载
45
查看
1,302
首次发布
最后更新

评分

0.00 星 0 次评分

最新更新

  1. 1.1.6 - folia支持

    [新增]1. 支持了Folia [新增]2. 对高版本与低版本一些变化的键名进行了兼容
  2. 1.1.5

    [新增]1. 菜单项点击事件需求,添加:金钱、权限 检测项 [新增]2. 菜单项新增可视条件(visibility-requirements)...
  3. 1.1.4-fix

    [修复] 1.对BungeeCord消息通道未注册导致的无法连接其他服务器进行修复 [修复] 2.对插件更新提示文本颜色进行调整 [调整] 3. 对菜单权限进行了调整 [新增] 4...
后退
顶部 底部