【1.7-1.21+|Folia】WarZStorage —— ✨ 私人仓库系统 × RPG经济玩法 × 双仓库灵魂堆叠 × 完全自定义 GUI

原创 付费 【1.7-1.21+|Folia】WarZStorage —— ✨ 私人仓库系统 × RPG经济玩法 × 双仓库灵魂堆叠 × 完全自定义 GUI 1.9.2

请登录后获取
### 更新日志 v1.2.2
1. 版本兼容性修复 (1.12.2 - 1.20+)

- 编译目标降级 :将编译目标版本从 Java 17 降级为 Java 8 。
- 解决问题 :修复了在 1.12.2 (CatServer) 等低版本服务器上无法加载插件的问题,消除了 IllegalArgumentException at org.objectweb.asm.ClassReader 报错。
- 依赖降级 :将 HikariCP 从 5.0.1 降级为 4.0.3 。
- 解决问题 : HikariCP 5.x 需要 Java 11+,降级后可完美兼容 Java 8 环境,同时不影响高版本使用。
- Folia 兼容性保持 :通过内置的 SchedulerUtil 动态适配,依然完美支持 Folia 多线程服务端。
2. 版本号更新

- pom.xml 、 plugin.yml 以及主类 WarZStorage.java 中的版本号均已同步更新为 1.2.2 。
更新内容总结:

1. Bug 修复 :

- 修复了玩家无法在仓库中存取与 GUI 按钮相同材质物品(如下界之星、萤石粉、红石等)的问题。
- 即使物品材质与按钮相同,只要没有特殊的按钮标识或名称,现在均可正常识别为普通物品。
2. 逻辑优化 :

- 重构了 Events.java 中的按钮判定逻辑。
- 移除了针对“解锁按钮”的特殊宽松判定,现在所有按钮都必须严格匹配配置的显示名称。
- 引入了更安全的判定机制,优先检查隐藏的 GUI 标识,其次检查显示名称。
WarZStorage 1.2.0更新内容总结 1. 修复背包自动关闭 Bug (Critical)
- 问题 :玩家关闭仓库后操作自己背包物品时,界面会被强制关闭。
- 修复 :在 Events.java 的 onInventoryClose 中引入了 1 tick 的延迟检查机制。确保在清理玩家查看状态前,服务端 Inventory 状态已完全更新。这解决了因状态检查时机过早导致的误判。 2. 修复世界限制绕过问题
- 指令修复 :在 /warzstorage 无参指令逻辑中补充了 checkWorldLimit 检查,防止玩家通过不带参数的指令绕过黑名单限制。
- 配置兼容性 :优化了 Config.java ,现在同时支持 SETTING.storage.world_limit (默认) 和 SETTING.world_limit (旧版/自定义) 两种配置路径,提高了配置文件的兼容性
🛠️ WarZStorage 更新日志
v1.1.9
🐞 Bug 修复

修复 MySQL 模式下开启 sync_on_open 导致的无限加载循环问题

问题描述:在使用 MySQL 存储并启用 sync_on_open(跨服同步)时,打开仓库会触发强制数据同步;同步完成后的回调再次调用 open(),从而反复触发同步检查,造成无限递归调用与“正在加载仓库数据”消息刷屏。

修复方案:

重构 StorageBox.open() 方法逻辑,引入内部方法 openInternal() 以区分“是否需要触发同步”。

在数据加载完成的回调中,调用 openInternal() 并显式禁止再次触发同步流程,从根本上打破递归循环。

⚙️ 优化

优化仓库打开流程,避免重复触发数据加载与同步逻辑,提升跨服环境下的稳定性与用户体验。
WarZStorage版本已更新为 1.1.7 。

更新内容总结:

1. 安全性修复 (Critical Security Fixes) :

- 强制状态同步 :扩容成功后,插件现在会 强制关闭 玩家的仓库界面。这是为了彻底切断因客户端/服务端数据不同步而产生的“虚假物品交互”漏洞。
- 底层位置判定 :重写了点击事件监听器 ( Events.java ),改用 RawSlot (原始槽位ID) 进行绝对位置判定。这意味着只要点击发生在仓库的最后一行(菜单区),无论该位置显示什么物品,插件都会无条件拦截,彻底杜绝拿取菜单按钮的可能性。
- Lore 全局扫描 :增强了物品识别逻辑,防止通过 NBT 修改绕过安全检查。
- 拖拽保护 :新增了 InventoryDragEvent 监听,防止通过拖拽方式破坏菜单。
2. 功能修复 :

- 修复了扩容时,新生成的菜单按钮可能显示错误的行数(例如刚升到4行,按钮还提示“升级到4行”)的视觉 Bug。
### 1. 战斗冷却限制 (防止死前存物)
实现了玩家受伤后的打开仓库冷却机制,防止玩家在临死前将物品存入仓库。

- 功能机制 : 当玩家受到任何伤害(包括怪物攻击、PVP、跌落等)时,会记录时间戳。如果在配置的冷却时间内尝试打开仓库,会被拒绝并提示剩余时间。
- 配置文件 : 在 config.yml 中新增了 combat_cooldown 选项(默认 10 秒),设置为 0 可关闭此功能。
- 权限绕过 : 拥有 warzstorage.bypass.combat 权限的玩家可无视冷却。
- 提示消息 : 在 Language.java 中新增了 IN_COMBAT 消息,支持 {time} 变量显示剩余秒数。
### 2. WorldGuard 区域兼容
实现了基于 WorldGuard 区域的访问控制,支持白名单(只允许在安全区打开)和黑名单(禁止在特定区域打开)模式。

- 兼容性 : 使用反射机制调用 WorldGuard API,确保在没有安装 WorldGuard 的服务器上也能正常运行(软依赖)。
- 配置文件 : 在 config.yml 中新增了 worldguard 配置块:
- enabled : 是否启用检查 (默认 false)
- mode : WHITELIST (白名单) 或 BLACKLIST (黑名单)
- regions : 区域 ID 列表 (例如 spawn , safe_zone )
- 权限绕过 : 拥有 warzstorage.bypass.worldguard 权限的玩家可无视区域限制。
- 依赖管理 : 已在 plugin.yml 中添加 WorldGuard 为软依赖,在 pom.xml 中添加了编译依赖。
### 3. 其他优化
- 软依赖 PlayerPoints : 完善了之前的修改,确保在没有 PlayerPoints 的情况下插件不会报错关闭,仅禁用相关付费功能。
- 代码结构 : 所有的检查逻辑(领地、战斗、WorldGuard)都封装在独立的方法中,并在命令执行流程中按顺序调用,逻辑清晰且易于扩展。
- 修复软依赖提示逻辑 :

- 问题 : 之前无论是否需要付费,只要未安装 Vault 或 PlayerPoints 就会在解锁按钮上显示红色的警告信息 "需要安装 Vault 或 PlayerPoints 插件"。
- 修复 : 修改了 StorageBox.java 中的 Lore 生成逻辑。现在 只有在确实需要付费解锁(配置价格 > 0)且缺少对应插件时 ,才会显示提示。如果价格为 0 或仅需权限,则不会出现任何红字警告。
- 修复权限解锁无效 :

- 问题 : 即使玩家拥有解锁权限,如果点击按钮时服务器未安装经济插件,代码会因为检查依赖失败而阻止解锁操作。
- 修复 : 修改了 StorageBox.java 中的解锁逻辑 ( unlock 方法)。在执行扣费和检查依赖之前,优先判断配置的价格是否大于 0。
- 如果配置的金币/点券价格 <= 0(例如纯权限解锁),插件将 跳过依赖检查和扣费步骤 ,直接允许解锁。
- 这确保了只要给与了权限且无需付费,玩家即可正常解锁,不再受是否安装 Vault/PlayerPoints 的影响。
后退
顶部 底部