• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
自定义玩家屏幕菜单 —— 多场景多样化的实时面对面菜单使用场景

付费 开源 娱乐 自定义玩家屏幕菜单 —— 多场景多样化的实时面对面菜单使用场景 1.5.2

请登录后获取
1. 新增GIF动图支持的导入,采用Packet发包处理来实现,详细教程课查看插件文档
支持循环播

代码:
map-animations:
  demo_gif:
    enabled: true
    source: 'demo.gif'

    x: 0.0
    y: 1.0
    z: 3.5

    width: 2.4
    height: 1.35

    billboard: center

    rendering:
      fit: contain
      background: transparent
      dithering: none

    playback:
      mode: loop
      timing: source
      speed: 1.0
      start-delay-ticks: 0
      end-behavior: hold-last

    interaction:
      enabled: false
2. 优化目前无用代码

修复与兼容性​

  • 修复玩家退出服务器时菜单会话被重复清理的问题。
  • 删除 MenuListener 中重复的退出监听逻辑,避免在玩家离线后再次执行延迟 stopCursor() 清理。
  • 保留 SessionCleanupListener 作为唯一的退出会话清理入口,确保菜单实体、光标、摄像机和玩家状态能够及时释放。
  • 新增对 Paper 26.2 的兼容支持。
修复:
1. 移除 Folia 声明:删除 folia-supported: true,插件不再声明支持 Folia。

2. 修复重复区块加载器:删除重复的区块加载器初始化,仅保留一份任务。

3.统一命令执行路径:CursorMenuPlugin 与 WASD 的命令执行统一走 CommandUtils,确保真实 OP 不会被错误降权。

4. 优化登录验证性能:BCrypt 与 SQLite 操作移至固定容量后台线程池(1–2 线程、64 队列),完成后回主线程更新玩家状态,避免阻塞主线程。

5. 完善线程池生命周期:插件关闭和重载时正确停止认证线程池,防止资源泄漏。

新增与修复​

  • 新增菜单文本交互功能:
    • 鼠标悬停文本样式。
    • 鼠标悬停光标样式。
    • 点击菜单元素时播放动画图标。
    • 支持通过 MiniMessage 向玩家发送聊天消息。
    • 可根据玩家权限显示不同的菜单文本样式。
  • 新增内置 CMP 教程文档,支持中文、英文和俄文切换。
  • OP 玩家可使用 /cmenu tutorial 在聊天框中获取教程链接。

    如果教程无法打开,请在配置文件中重新设置 URL,例如:

    也可以直接打开插件文件夹中的 CMP.html。
  • 新增教程 HTTP 服务的端口、绑定地址和公网 URL 配置。
  • 支持通过重载命令重新读取教程配置并重启教程 HTTP 服务。
  • 修复教程 HTML 被 Maven 资源过滤错误改写 JavaScript 模板的问题。
  • 教程链接改用插件内置 HTTP 服务,不再向 Paper 26.1 发送不受支持的 file: 点击链接。

菜单切换与光标修复​

  • 修复执行 next-menu 后,菜单悬停和点击可能失效的问题。
  • 修复旧菜单的延迟清理任务可能错误移除新菜单状态的问题。
  • 为菜单延迟生成和清理任务增加菜单键与会话状态校验,防止旧任务覆盖或清理新菜单。
  • 修复菜单切换后光标可能停止移动或位置错误的问题。
  • 光标更新现在直接使用 currentPlayerMenus 中记录的当前活动菜单,不再通过摄像机所在世界猜测菜单。
  • 光标位置现在根据菜单摄像机的 cameraYaw 和 cameraPitch 计算相对旋转,不再直接使用玩家的绝对视角。
  • 新增 PlayerMoveEvent 光标刷新兜底,在 Paper 26.1.2 未正常收到部分旋转更新时继续刷新光标。
  • 启用同摄像机菜单刷新路径;当新旧菜单摄像机位置相同时,只替换菜单内容,不重新创建摄像机。
  • 使用同摄像机刷新前,会检查旧摄像机是否存在、实体是否有效,以及玩家是否仍然乘坐该摄像机。
  • 修复同时启用 next-menu 和 stop-menu.enabled 时,旧逻辑提前移除摄像机造成的黑屏和闪屏。
  • next-menu 切换现在会尽可能保留原摄像机,仅替换菜单文本、物品和交互内容,实现无缝菜单切换。

已修复​

UI 与交互​

  • 初次打开菜单时正式启用按钮打字机效果
  • 光标平滑、三轴尺寸配置正式生效
  • 自动旋转和菜单模式生效

事件监听​

  • 移除重复注册的 MenuListener
  • 消除 join-run 重复执行
  • 注册并修正 WorldChangeListener

玩家与位置​

  • NPC 世界禁用、装备/皮肤同步生效
  • use-player-location 改为玩家独立 Section,不再互相覆盖

IP 与网络​

  • IP 锁定次数、锁定时长、同 IP 登录配置生效
  • CIDR 支持 IPv4、IPv6 和非整字节掩码
  • 修复 IP 警告语言键路径
修复
  • 统一修复 PAPI 变量问题:即使玩家未处于菜单模式,变量仍输出内容的问题已解决
新增功能
  • 菜单按钮新增悬停交互命令
    • hover-enter-command – 光标悬停到按钮上时执行
    • hover-leave-command – 光标离开按钮时执行

    • 代码:
            # 悬停触发命令(光标悬停时自动执行)
            # hover-commands:
            #   - '[player] say 光标悬停在logo上'
            #   - '[console] title %player% actionbar "&a欢迎查看Logo"'
            # 离开触发命令(光标离开时自动执行)
            # leave-commands:
            #   - '[player] say 光标离开了logo'
  • 兼容 CraftEngine 插件的图片使用
菜单动画效果 – 为按钮添加动态视觉效果

支持三种动画类型:

up-down – 上下浮动

left-right – 左右浮动

rotate – 旋转

可自由调节动画速度与幅度


代码:
      name: "你的按钮文字"
      x: 0
      y: 0
      z: 3
      # ⬇ 浮动动画配置
      floating-animation:
        enabled: true       # 是否启用(必填)
        type: "up-down"     # 动画类型(必填)
        speed: 1.5          # 动画速度,越大越快(可选,默认 1.0)
        amplitude: 0.3      # 动画幅度,越大摆动越明显(可选,默认 0.25)

浏览附件136380
🔧 修复

Paper 26.1 兼容

左键点击:修复了 26.1 版本下左键点击菜单文本不执行命令的问题,现在左键挥手事件也能正常触发
⚡ 优化

内置 SQLite 驱动:将 sqlite-jdbc 直接打包进插件,避免服务器环境下载失败导致无法加载

语言文件缓存: getLangMessage 改为缓存读取,减少频繁 IO 带来的性能开销

数据库线程安全:为 DatabaseManager 关键方法添加同步控制,降低 SQLite 并发访问风险

状态清理完善:加强玩家退出、被踢、重载、异常等场景的菜单状态清理,减少内存泄漏隐患
修复:
  • 修复菜单文本与光标悬停/点击检测范围不一致的问题(当调整 text-size 和光标 scale 时)
新增功能:
  • 光标移动灵敏度配置 sensitivity (1.0 为默认,数值越小移动越慢)
  • 光标平滑系数配置 smoothing (0.05-1.0,1.0=无滤波零延迟,越小越丝滑但会有拖手感)
  • 文本大小支持无限放大或缩小
优化:
  • 修复若干已知性能报错
📌 更新日志 – v1.4.3
🆕 新增功能
打字机效果 – 为文本元素添加逐字显示动画

可配置显示速度(字符间隔)

可配置开始延迟(动画开始前等待tick数)

可配置光标字符(文本末尾闪烁光标)

支持热重载,通过 /cmenu reload 生效
悬停音效 – 鼠标悬停文本元素时播放音效

可配置音效名称(支持所有Minecraft音效)

可配置音量和音调

可配置冷却时间(防止音效过于频繁)

无效音效配置时自动回退备用音效
🔧 修复

修复 config.yml 中 join-run 命令占位符不替换问题

无论是否安装 PlaceholderAPI,内置占位符均正确替换

支持: %player% 、 %player_name% 、 %player_uuid% 、 %player_displayname% 、 %player_x% 、 %player_y% 、 %player_z% 、 %player_world% 、 %player_health% 等
⚡ 优化

线程安全: HoverEnlargeManager 中 HashMap 替换为 ConcurrentHashMap

内存优化: CursorMenuPlugin.getPlayerTextDisplays() 使用 Collections.emptyList()

稳定性: TypewriterEffect 添加 completed 标志防止重复清理


[MD] # 悬停放大效果 # ========== 打字机效果(新增) ========== typewriter: enabled: true # 启用打字机效果 speed: 2 # 每2个tick显示一个字符(值越小越快) start-delay: 10 # 延迟10个tick后开始显示(约0.5秒) cursor-char: "|" # 光标字符,也可以用 "_" 或 "▌" # ========== 悬停音效(新增) ========== hover-sound: name: "minecraft:block.lever.click" # 音效名称(必填) volume: 0.8 # 音量 0.0-1.0(可选,默认1.0) pitch: 1.2 # 音调 0.5-2.0(可选,默认1.0) cooldown: 20 # 冷却时间ticks(可选,默认20) [/MD]
后退
顶部 底部