⚡ KaMenu⚡ - 全新菜单插件 | 对话框界面 | 探索无限可能 | 实现各种复杂逻辑 | 丰富交互体验 [1.21.6+]

原创 开源 工具 ⚡ KaMenu⚡ - 全新菜单插件 | 对话框界面 | 探索无限可能 | 实现各种复杂逻辑 | 丰富交互体验 [1.21.6+] 2.1.0

请登录后获取
[MD] ### 🔧 修复与优化 #### 1. 修复对话框物品 `item_model` 配置错误 #### 2. 新增对话框物品 `custom_model_data` 属性支持 #### 📝 配置示例 ```yaml Body: icon1: type: 'item' material: 'PAPER' custom_model_data: 20001 name: '&a自定义图标A' description: '&7使用 CustomModelData 渲染' icon2: type: 'item' material: 'PAPER' item_model: 'minecraft:diamond' name: '&b自定义图标B' description: '&7使用 item_model 渲染' ``` [/MD]
[MD] ## 新增功能 ### 1. 新增 `hide_text` 属性 **功能说明:** 现在 `input` 与 `dropdown` 输入组件支持 `hide_text: true/false` 配置,用于控制输入项自身的标题文字是否显示。 **适用组件:** - `type: 'input'` - `type: 'dropdown'` ## 优化改进 ### 2. 优化 dropdown 的 `options` 设计 **问题背景:** 旧版 `dropdown` 的 `options` 只能直接写字符串列表,导致“玩家看到的文字”和“动作里真正提交的值”必须完全相同。 例如旧写法中: ```yaml options: - '&c红色' - '&a绿色' ``` 这样虽然显示没问题,但后续动作里拿到的 `$(color_select)` 也会是带颜色文本,不利于条件判断、数据存储和逻辑分支处理。 **本次优化:** 新增字符串分隔格式: ```yaml options: - 'red => &c红色' - 'green => &a绿色' - 'blue => &b蓝色' ``` 含义如下: - 左侧 `red / green / blue`:作为实际提交值(id) - 右侧 `&c红色 / &a绿色 / &b蓝色`:作为玩家看到的显示文本(display) [/MD]
[MD] ## ✨ 新增功能 ### 1. 新增 force-open: 动作 **功能说明:** 强制打开指定菜单,**跳过目标菜单的 Events.Open 动作列表**。 **使用场景:** - 需要打开菜单但不想触发 Open 事件中的初始化逻辑(如权限检查、前置动作等) - 在 Events.Click 中嵌套打开菜单时避免重复执行 Open 事件 **格式:** `force-open: <菜单ID>` --- ### 2. 新增 force-close 动作 **功能说明:** 强制关闭当前菜单,**不执行 Events.Close 动作列表**。 **使用场景:** - 需要立即关闭菜单而不触发 Close 事件中的清理/记录逻辑 **格式:** `force-close` --- ### 3. 新增 reset 动作 **功能说明:** 重新打开当前菜单(相当于刷新),**不执行 Events.Open 动作列表**。 **使用场景:** - 刷新当前菜单内容(如更新了变量显示) - 重置按钮状态 **格式:** `reset` --- ## 🔧 优化改进 ### 4. actions 动作组内 open 动作的 wait/return 支持 **问题:** 在 `actions:` 引用的动作组中或条件分支内使用 `open:` 动作时,`wait` 延迟和 `return` 中断指令无法正常工作。这是因为异步执行链的类型传递存在缺陷——`return` 标志无法从子链正确传播回父链。 **修复:** 重构 `executeActionListAsync` 和 `executeActionList` 的返回类型为 `CompletableFuture<Boolean>`,使 `return` 中断标志能够沿整个异步调用链正确传播。 **影响范围:** | 场景 | 修复前 | 修复后 | |------|--------|--------| | actions 组内的 wait | ❌ 不生效 | ✅ 正常等待 | | actions 组内的 return | ❌ 不中断后续动作 | ✅ 正确中断 | | 条件分支中的 open + wait | ❌ 不生效 | ✅ 正常等待 | | 条件分支中的 open + return | ❌ 不中断 | ✅ 正确中断 | [/MD]
[MD] ## ✨ 新增功能 ### 1. Tab 补全模糊匹配 **功能说明:** Tab 补全现在支持模糊检索,不再仅限于首字母/前缀匹配。输入任意关键字即可匹配包含该关键字的候选项。 **功能特性:** - ✅ **包含匹配**:输入 `menu` 可匹配 `test_menu`、`mymenulist`、`menu-shop` 等 - ✅ **全部场景**:`/km open`、`/km action`、`/km item` 等所有补全场景均支持 - ✅ **大小写不敏感**:输入大小写均可匹配 **对比:** | 场景 | 旧行为 | 新行为 | |------|--------|--------| | `/km open a` | 展示所有菜单 | 只展示包含 `a` 的菜单 | | `/km open menu` | 展示所有菜单 | 只展示包含 `menu` 的菜单 | | `/km item give 神` | 展示所有物品 | 只展示包含 `神` 的物品 | --- ### 2. tppos 坐标传送动作 **功能说明:** 新增 `tppos` 动作,可将玩家传送到指定坐标位置。 **格式:** `tppos: <世界名称>,<x>,<y>,<z>[,<yaw>,<pitch>]` **参数说明:** | 参数 | 说明 | 必需 | |------|------|------| | 世界名称 | 目标世界的名称 | ✅ | | x | X 坐标 | ✅ | | y | Y 坐标 | ✅ | | z | Z 坐标 | ✅ | | yaw | 水平朝向角度 | ❌(默认保留玩家当前朝向)| | pitch | 垂直朝向角度 | ❌(默认保留玩家当前朝向)| [/MD]
  • 喜欢
反馈: ymz

✨ 新增功能​

1. 多层递归条件判断支持​

功能说明: 现在菜单内大部分文本配置支持多层递归条件判断,可以实现更复杂的条件逻辑。
功能特性:
  • ✅ 多层嵌套:支持任意深度的条件嵌套
  • ✅ 自动递归解析:系统自动递归解析所有条件
  • ✅ 广泛适用:适用于 tooltip、lore、name、description 等大部分文本配置

2. return 动作中断动作列表​

功能说明: return 动作现在会中断当前动作列表的执行,实现条件性的动作分组。
功能特性:
  • ✅ 立即中断:遇到 return 时立即停止后续动作执行
  • ✅ 条件分组:配合条件判断实现动作的条件执行
  • ✅ 简化逻辑:避免使用复杂的条件嵌套
支持十六进制颜色和物品图标简写语法
16进制颜色文本:
YAML:
&#FF4455你好
物品图标:
YAML:
&item:[diamond]  #显示钻石图标
新PlaceholderAPI变量
1. %kamenu_hasitem_[物品属性]%
举例:
%kamenu_hasitem_[mats=DIAMOND]%
返回背包中钻石的数量

2. %kamenu_hasstockitem_<物品名>%
举例:
%kamenu_hasstockitem_神秘果%
返回背包中"神秘果"的数量

新增功能​

  1. item 组件 amount 配置项 - 支持设置物品堆叠数量(1-64),支持条件判断
  2. item 组件 description_width 配置项 - 支持自定义描述文本宽度(1-1024像素),支持条件判断
  3. item 组件 show_overlays 配置项 - 控制是否显示物品覆盖层(耐久条、数量、冷却时间)
  4. 消息文本和物品描述文本多行支持 - 支持 YAML 列表格式和 \n 换行符两种方式

新动作:连接到指定服务器​

连接到指定服务器
- 'server: lobby'
连接到lobby服务器

新系统:目标选择器系统​

功能说明: 所有动作支持目标选择器,可以指定动作作用的目标玩家,支持条件表达式筛选。这是一个强大的功能,让动作可以灵活地作用于不同的玩家群体。

语法:
YAML:
# 格式: {player: 选择器}
- 'tell: 你好!'  # 未指定,发给执行者本身
- 'tell: 你好!{player: *}'  # 发给所有在线玩家
- 'tell: 你好!{player: all}'  # 发给所有在线玩家
- 'tell: 你好!{player: %player_level% >= 10}'  # 发给满足条件的玩家
- 'tell: 你好!{player: hasPerm.user.vip}'  # 发给拥有VIP权限的玩家

✨ 新增功能​

1. 右键玩家监听器​

功能说明: 新增右键点击玩家打开菜单的监听器,支持配置菜单和潜行条件。

配置:

listeners:
player-click:
enabled: false # 启用此监听器
menu: 'inspect_player' # 要打开的菜单
require-sneaking: false # 需要潜行才能触发

功能特性:
  • ✅ 自动设置 {meta:player} 为被点击的玩家名
  • ✅ 支持普通右键和 Shift+右键
  • ✅ 可在菜单中使用槽位引用显示玩家装备

2. 物品组件槽位引用​

功能说明: item 组件支持引用玩家装备槽位,支持变量解析。

格式:
  • [HEAD] - 当前玩家头盔
  • [HEAD:PlayerName] - 指定玩家头盔
  • [HEAD:{meta:player}] - 使用 meta 变量
支持的槽位:
  • HEAD - 头部
  • CHEST - 胸部
  • LEGGINGS - 护腿
  • BOOTS - 靴子
  • MAINHAND - 主手
  • OFFHAND - 副手
空槽位处理:
  • 头部为空:渲染玩家皮肤头颅
  • 其他槽位为空:渲染浅灰色玻璃板,名称为"无"
变量支持:
  • ✅ PAPI 变量:[HEAD:%player_name%]
  • ✅ 内置变量:[HEAD:{data:target_player}]
  • ✅ Meta 变量:[HEAD:{meta:player}]

3. 玩家互动菜单​

文件: menus/inspect_player.yml

功能:
  • 📦 显示玩家 4 个装备槽位(32x32 尺寸)
  • 🤝 6 个互动按钮:
    • 加为好友
    • 传送到玩家
    • 传送玩家到你
    • 私聊
    • 查看背包
    • 踢出玩家
使用方式:
  1. 在 config.yml 中启用 player-click 监听器
  2. 右键任意玩家打开互动菜单
  3. 查看对方装备并进行互动

🔨 改进优化​

1. item 组件优化​

name 属性可选:
  • name 现在是可选的
  • 不提供时使用物品默认名称
  • 提供时覆盖物品名称
lore 优化:
  • 只有当 lore 不为空时才设置
  • 避免空列表覆盖物品原有的 lore
后退
顶部 底部