搜索

0.27.22 GUI 物品保护修复

补齐只读菜单拖拽保护,保留玩家背包整理与宠物背包存取。

发布日期:2026-09-06 版本:0.27.22-SNAPSHOT

问题原因

LiPet 的只读菜单已经取消 InventoryClickEvent,但此前没有处理独立的 InventoryDragEvent。客户端拖拽经过菜单顶部槽位时不会进入普通点击监听,因此可能改动菜单内容,使展示图标或玩家物品处于错误位置。

修复内容

  1. 普通点击明确识别当前视图顶部的 LiPetInventoryHolder,并在最高事件优先级取消;
  2. 新增拖拽保护,只要拖拽涉及任意顶部菜单槽位就取消整个操作;
  3. 拖拽只涉及玩家自身背包时允许继续,避免影响玩家整理背包;
  4. 主菜单、宠物商城、道具商城、仓库、宠物详情、管理菜单和放生确认页统一生效;
  5. PetInventoryHolder 代表的宠物独立背包仍然可编辑,关闭时照常持久化。

配置影响

本版没有新增配置,也不会修改 gui.yml、菜单图标、槽位、动作、价格或管理员自定义文本。停服替换 Jar 并完整启动即可生效,/lipet reload 无法替换正在运行的插件代码。

验证结果

  • 七种 LiPet 只读菜单类型全部被保护;
  • 拖拽槽位包含顶部边界 0..topSize-1 时判定为受保护;
  • 拖拽只包含玩家背包槽位时不拦截;
  • 宠物独立背包与其他插件背包不会被误识别;
  • 默认兼容 API:361 项测试通过,失败、错误、跳过均为 0;
  • Paper 26.2 Build 111 API:361 项测试通过,失败、错误、跳过均为 0。

本次验证覆盖服务端事件边界与完整构建,没有连接真人客户端执行鼠标手势画面验收。正式服建议先在测试服依次检查普通点击、Shift 点击、数字键交换、双击收集以及从玩家背包拖拽经过菜单顶部槽位。

升级步骤

  1. 停止服务器并备份 plugins/LiPet/;
  2. 删除旧版 Jar,只保留 LiPet-0.27.22-SNAPSHOT.jar;
  3. 完整启动服务器;
  4. 打开 /lipet menu、仓库和商城,确认菜单展示物品无法移动;
  5. 打开宠物独立背包,确认物品仍可正常存取并在关闭后保存。