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

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

请登录后获取
[MD] # WarZStorage v1.9.2 更新内容总结 ## 一句话总结 修掉**连续自动拾取把异步写盘线程堆成锁队列**的问题:拾取落盘改防抖合并,开关检查不再在区域线程上同步等文件锁。 ## 具体更新 - **拾取落盘防抖**:1.9.1 每次拾取事件都排一个全量 YAML 序列化+fsync 写盘任务,玩家在掉落物堆/刷怪塔上拾取会瞬间堆积几十个任务挤在同一把 per-UUID 文件锁上(线程转储里成排 `BLOCKED` 于 `YamlDataHandler.saveData`)。现在每个仓库同时最多一个挂起的拾取落盘任务(40 tick 合并窗口),写盘频率不再与拾取速度成正比。 - **开关检查非阻塞**:拾取热路径改用 `isAutoPickupEnabledCached`——只读内存缓存,未命中异步填充、本次按未开启处理;不再在区域线程上同步等文件锁+读盘。 ## 对服主的价值 - 密集拾取场景(刷怪塔、掉落物堆、活动发物品)不再把异步调度池塞满,消除看门狗线程转储的诱因。 ## 升级注意 1. 用 `WarZStorage-1.9.2.jar` 替换旧 jar,重启即可。 2. **零配置变更、零数据迁移**,玩家存档完全不受影响。 3. 入库与部分拾取语义不变,仅落盘频率合并;退出/关服保底保存照常。 [/MD]
[MD] # WarZStorage v1.9.1 更新内容总结 ## 一句话总结 **普通仓库支持自动拾取**:命令、总开关、入库顺序全部可配置,放不满时部分拾取不吞物品。 ## 具体更新 - **普通仓库自动拾取(新功能)**:`/warzstorage autopickup [normal|soul] [on|off]`,旧写法 `autopickup on|off` 兼容(作用于默认仓库);权限 `warzstorage.command.autopickup` 不变。 - **服务端可配置**:新增 `SETTING.auto_pickup`——`normal`/`soul` 两个总开关 + `order` 入库顺序(默认 `soul_first`,与旧行为一致)。 - **不吞物品**:普通仓先合并已有堆叠再填空槽;放不下的余量留在原地由玩家正常捡起。`store_filter` 黑名单照常拦截。 - **持久化**:玩家开关按仓库分开保存——YAML 新增 `normal_auto_pickup` 键(缺键读 `false`),SQL `warz_storage_profiles` 启动时自动 `ALTER` 加列。 - **全核心可用**:1.12+ 用 `EntityPickupItemEvent`,1.7.10 等老核心自动回退 `PlayerPickupItemEvent`,监听注册隔离不影响其他事件。 ## 对服主的价值 - 普通仓也能自动拾取,可用 `auto_pickup.normal: false` 整体关闭或 `order` 控制优先入哪个仓。 - 玩家侧普通仓拾取默认关闭,不改变现有玩家体验,由玩家自行开启。 ## 升级注意 1. 用 `WarZStorage-1.9.1.jar` 替换旧 jar,重启即可。 2. **零配置变更、零数据迁移**,玩家存档完全不受影响(SQL 新列自动 `ALTER`,YAML 缺键按旧行为)。 3. 老玩家原有灵魂仓拾取开关保留;普通仓拾取默认关闭,玩家需自行开启。 [/MD]
[MD] # WarZStorage v1.9.0 更新内容总结 ## 一句话总结 修掉**自动备份卡服**:备份时全量仓库 YAML 序列化+落盘不再压主线程,看门狗线程转储(`The server has not responded`)消失。 ## 具体更新 - **自动备份不再卡主线程**:备份 flush 原来把 `saveAllSync()` 整个调度回主线程——每个仓库都要重读旧文件、序列化全部物品、fsync 落盘,人多档大时卡 10~15 秒。现在主线程只做内存快照收集(毫秒级),序列化与写盘回到备份线程执行。 - **定时自动保存回到正确线程**:30 分钟自动保存的快照阶段原来在 AutoSave 线程上直接读在线背包,有并发读隐患;现在与 `/warzstorage save` 一致——主线程收快照、写盘异步。 - **一致性不变**:per-UUID 文件锁照旧,备份仍然是"先落盘、后拷贝 `data/` 目录",`onDisable` 关服保存仍是同步写盘。 ## 对服主的价值 - 自动备份到点不再全服卡顿,控制台不再被 `Creating thread dump` 刷屏。 - 玩家多时(仓库已加载数量大)收益最明显——原来卡顿时长与仓库总量成正比。 ## 升级注意 1. 用 `WarZStorage-1.9.0.jar` 替换旧 jar,重启即可。 2. **零配置变更、零数据迁移**,玩家存档完全不受影响。 3. 无新增/变更功能,1.8.9 的配置行为原样保留。 [/MD]
[MD] # WarZStorage v1.8.9 更新内容总结 ## 一句话总结 把 `unlock_levels.N.permission` 的语义统一成一种——**持有该权限 + 满足金币/点券,才能解锁**;旧版本里它兼职的“持权即免费拥有该页”被拆成独立配置 `page_select.bypass_permissions`。 ## 具体更新 - **permission 只有一种含义了**:`unlock_levels.N.permission` = 解锁该页所需的权限。写了就要求“权限 + 付费”,不写就只要求付费。权限不足与金额不足分别提示,两个条件是 `且` 关系。 - **“权限直接送页”独立出去**:改到 `page_select.bypass_permissions`(页码 → 权限节点),默认**全空**,即默认不存在任何免付费拥有页数的情况。语义仍是“页数上界”(配了第 3 页的节点 = 可直接访问第 1~3 页),并且现在也支持第 1 页。灵魂仓库同名配置独立。 - **`ignore_unlock_permission` 职责收窄**:只忽略“解锁资格”这类权限条件,不影响赠送页数与行数扩容的权限。默认仍为 `false`。 - **启动日志给自查提示**:会列出“哪些页需要权限才能解锁”,并对“旧配置靠 permission 送页”的情况给出迁移 warning(写清迁移到哪个配置、什么格式)。 - **在线 / 离线行为一致**:管理员查看离线玩家仓库时的赠送页数计算,改用同一套 `bypass_permissions`。 ## 启动横幅统一(本次顺带处理) - **颜色代码生效了**:横幅与状态行统一走控制台发送器(只有它会转换 `§` 颜色);删掉所有写在 `Logger` 里的 `§a[WarZStorage] …`(控制台不解析,原样显示成乱码)。 - **不再重复**:`成功挂钩 Vault 经济系统` 这类日志原本横幅和 Logger 各打一遍,现在只留横幅的 `✔` 行,也没有了两层 `[WarZStorage]` 前缀。 - **横幅不会被插断**:状态行先攒好、最后随横幅一次性输出,中间不再夹着各种内部日志。 - **噪音清掉**:`为物品 xxx 设置CustomModelData`(8 条)、英文的 `WorldLimit Config Loaded from …`、`已加载 N 个解锁级别配置` 等 7 条内部细节降到 `FINE`,默认控制台不再刷屏。 - **结构对齐 WarZ 系列标准**:金色 `▃` 分隔条(34 个)→ 名称/版本/作者/**平台** → ✔ 清单 → 联系方式四行 → 分隔条;启动与卸载两套对称。卸载横幅里原来版本与作者之间夹的空行也去掉了。 - 启动失败时也会打出完整横幅,标题为「插件启动失败」并列出原因,不会只剩一行红字。 ## 对服主的价值 - 不再出现“不给权限解不开、给了权限白送”的矛盾,一个字段一个作用。 - 想做纯付费解锁:删掉 `permission`,或设 `ignore_unlock_permission: true`。 - 想做 VIP 免费页:在 `bypass_permissions` 里配节点,和付费解锁互不干扰。 ## 升级注意 1. 用 `WarZStorage-1.8.9.jar` 替换旧 jar,重启或 `/warzstorage reload`。 2. **旧配置可以直接用**,解锁行为与 1.8.8 相同(仍是“权限 + 付费”)。 3. **唯一破坏性变更**:如果你原来靠 `unlock_levels.N.permission` 给 VIP 免费送页,升级后该效果消失,需要把节点迁到 `page_select.bypass_permissions.N`。启动日志会提示。 4. 配置版本未变,玩家存档与页数数据不受影响。 [/MD]
[MD] # WarZStorage v1.8.6 更新内容总结 ## 一句话总结 `unlock` 现在真的可以设为 `0` 了——新玩家一页都不送,连第 1 页也要自己买,并且补上了 0 页玩家的解锁入口。 ## 具体更新 - **修掉"设 0 却仍然白送 1 页"**:之前无论配置写 0 还是留空,插件内部三处 `Math.max(1, ...)` 都会把页数强制抬到至少 1 页 (`Config` 读普通/灵魂初始页数各一处,`StorageBox` 加载数据一处)。现在下限改成 0,配置写 0 就是 0 页。 - **修掉权限绕过架空 0 页**:`page_select.permission_bypass` 默认开启时,权限赠送页数的计算基线写死是 1, 等于"顺带白送第 1 页"。现在权限只送它自己配置的那些页,是否拥有第 1 页完全由 `unlock` 和玩家自己购买决定。 - **0 页玩家不再卡死**:解锁按钮原本挂在仓库最后一页的底部菜单上,0 页玩家打不开任何页面就等于没有入口。 现在 `/warzstorage` 会自动进页码菜单,点第 1 页(锁定按钮会多一行"点击解锁本页")直接弹解锁确认; 页码菜单关掉时直接弹确认菜单;确认开关也关掉时只提示,不会误扣款。 - **新增开关** `unlock_policy.allow_unlock_from_page_select`(默认 `false`):已经拥有页数的玩家点锁定页, 默认仍是旧版的"只提示不引导";只有玩家一页都没有时才强制开放解锁入口。 - 灵魂仓库的 `modes.soul.unlock` 同样支持 0;不配置时仍跟随 `SETTING.unlock`。 ## 对服主的价值 - 想做"仓库全靠买"的经济服,现在配置一个 `unlock: 0` 就能实现,不用再动代码。 - 第 1 页也能单独定价:`unlock_levels` 下写 `1:` 节点即可,不写就取 `SETTING.points` / `SETTING.vault`。 - 不改配置的服务器零影响:默认值、旧配置、旧存档全部保持原样。 ## 升级注意 1. 用 `WarZStorage-1.8.6.jar` 替换旧 jar,重启即可,1.20.1 与 1.7.10 双端通用。 2. 配置版本未变,不需要重置配置。 3. `unlock: 0` 只对新玩家生效,老玩家沿用自己已保存的页数,不会回收任何人的页面。 4. 若 `modes.soul` 下没写 `unlock`,它会跟随 `SETTING.unlock`——想让灵魂仓库保留 1 页就显式写 `modes.soul.unlock: 1`。 [/MD]
新增 api/WarZStorageAPI
  • 修复修改 unlock_levels 后 /warzstorage reload 显示解锁条件不变的问题。
    • 根因是默认配置里普通仓库 unlock_levels 缩进位置曾经错到 row_upgrade_settings 下面。
    • 已修正默认配置模板。
    • 也兼容读取旧错误路径 SETTING.row_upgrade_settings.unlock_levels,避免旧用户配置直接失效。
  • reload 后会刷新已加载仓库菜单、页码菜单、解锁确认菜单,避免 GUI 继续显示旧价格。
  • 二次确认已改成二级菜单:
    • 点击解锁按钮后进入确认菜单。
    • 可点“确认解锁”或“取消返回”。
    • 进入确认菜单本身不会扣款,只有点确认才扣费。
  • 额外补了一个保护:仓库数据还没加载完时执行解锁,会等加载完成后再弹确认菜单,避免用默认页数误算。
  • 修复 Lophine 1.21.11 核心下,物品使用 id/count 格式保存时被误判为损坏的问题。
  • 保留旧核心常见的 type/amount 物品格式兼容,不影响 Spigot、Paper 等其他核心用户。
  • 优化损坏物品数据处理逻辑,遇到真正异常数据时会先备份原始玩家数据,再清理异常槽位,降低数据丢失风险。
  • Residence 领地限制默认改为关闭,避免用户未配置 Residence 时无法打开仓库。
  • Residence 配置移动到 WorldGuard、世界限制同一区域,方便用户找到。
  • 继续兼容旧版 Residence 配置路径。
  • 管理员命令支持直接使用玩家 UUID:
    • /warzstorage open <UUID>
    • /warzstorage unlock <UUID>
    • /warzstorage del <UUID>
  • 在玩家名缓存缺失时,也可以通过 data/<UUID>.yml 找回并打开旧仓库数据。

  • 管理员命令优先支持直接输入玩家名,使用体验接近在线玩家:
    • /warzstorage open <玩家名>
    • /warzstorage unlock <玩家名>
    • /warzstorage del <玩家名>
  • UUID 仍保留为兜底输入。
  • 正版服本地缓存缺失时,会尝试通过 Mojang 正版名解析 UUID。
  • 离线服会按离线 UUID 规则解析玩家名。
  • YAML 和 SQL 存储都支持检查目标 UUID 是否已有仓库数据。
  • GUI 标题增加玩家名兜底,减少离线查看时显示 Unknown 的情况。
  • 修复 Lophine 1.21.11 的物品数据兼容问题,支持 id/count 新格式,同时保留旧核心的 type/amount 格式。
  • 防止有效物品被误判为损坏并清除。
  • 整理 Residence 配置:
    • 默认关闭 Residence 领地限制。
    • 与 WorldGuard、世界限制放在同一配置区域。
    • 兼容旧版顶层 Residence 配置。
  • 根据历史备份生成数据恢复包,恢复了部分被误清空的玩家仓库。
  • 更新配置说明和 WIKI。
  • 已完成构建与 YAML 配置校验。
功能说明:
  • 解锁按钮默认需要在 10 秒内连续点击两次,第一次不会扣款。
  • require_previous_page_max_rows: true 时,必须先把上一页升级到 6 行,才能解锁下一页。
  • 管理员免费代解锁不受该限制。
  • 旧玩家数据不受影响,旧配置缺少该节点时默认不强制满行。
后退
顶部 底部