WarZDuelTime —— 经典单挑插件的重制版|1.13-1.21+ | 多竞技场 / 排位 / 商城 / Folia 支持

二次开发 游戏模式 WarZDuelTime —— 经典单挑插件的重制版|1.13-1.21+ | 多竞技场 / 排位 / 商城 / Folia 支持 2.6.17

完成注册/登录后下载
[MD] ## 修复内容 - 修复在 Paper/Purpur 新版本号核心(如 Purpur 26.x、Paper 1.20.5+ 无版本包名核心)上创建竞技场时后台无限刷 `ClassNotFoundException: net.minecraft.server.craftbukkit.Packet` 的问题。根因:版本检测按旧版 `1.x.y` 号段取第二位,MC 26.2 被误解析为 `serverVersionInt=2`,导致粒子渲染错误地走 NMS 反射路径。 - 重写版本检测:`serverVersion` 仅在 `org.bukkit.craftbukkit.v1_X_RY` 版本包名核心上取版本段;`serverVersionInt` 优先按版本包名解析,否则按 Bukkit 版本号解析,旧命名取次版本号(1.20.1→20),新命名(26.x)按主版本号处理并保证 ≥21,解析失败兜底 21。 - 重写红石粒子实现:1.9+ 统一使用 Bukkit `Player#spawnParticle` API(1.13+ 使用 DustOptions,兼容 1.20.5+ 的 `Particle.DUST` 重命名),不再依赖 NMS;1.8 及以下保留 NMS 反射路径。 - 粒子渲染增加熔断保护:连续失败 3 次后停用并只告警一次,不再每秒刷大量堆栈。 - `getCbClass`/`getNmsClass` 支持无版本包名的现代核心。 - 修复创建向导粒子定时器泄漏:玩家退出服务器时自动清理进行中的 Progress 及其定时任务;定时器内部增加玩家离线自检,异常情况下也能自动退出。 - 修复"提示创建成功但重启后竞技场消失":`ArenaManager.add` 改为数据库写入成功后才放入内存列表;写入失败时向导会明确提示玩家"创建失败",不再出现假成功和幻影竞技场。 - `ArenaManager.reload` 容错增强:整表读取失败不再导致插件崩溃,单条损坏数据仅跳过该行并输出警告日志,不影响其他正常竞技场加载。 [/MD]
[MD] ## 修复内容 - 修复物品莫名其妙出现在竞技场GUI(StartInventory)和其他GUI中的问题。 - CloseInventoryListener 现在会移除所有自定义GUI类型的viewer(shop/start/arena-record/mailbox)。 - 其他玩家打开任意插件GUI时不再会触发刷新代码把物品设置到竞技场GUI。 [/MD]
[MD] ## 本次更新 ### 1. 修复 `/dt reload` 强停竞技场时的数组越界 - 修复已开启 `dueltime:spectate` 观战附加功能的竞技场,在观战数据缺少部分字段时,执行 `/dt reload` 可能触发 `ArenaTryToStopEvent` 报错的问题。 - 结束、强制停止、开局 BossBar、观战移动和退出观战等路径现在都会兼容旧版或不完整的观战数据。 - 即使某个竞技场的观战附加功能只保存了部分数据,也不会阻断重载流程或导致竞 [/MD]
[MD] ### 1. 修复竞技场结束后仍显示比赛中的问题 - 强化经典/Kit 单挑竞技场结束流程,避免结束过程中任意异常阻断最终清理。 - 结束流程现在会兜底清理计时任务、BossBar、玩家/旁观者运行时列表和竞技场状态。 - 即使 Luminol 1.21.11 在传送、死亡恢复、旁观者或背包恢复环节出现异常,竞技场也会尽量回到可加入状态。 ### 2. 优化强制停止的安全收尾 - `stop` 和正常 `end` 统一增加运行时状态兜底清理。 - 强制停止后会清理玩家竞技场映射、旁观者映射和等待队列残留,并刷新竞技场 GUI。 - 降低管理员强制停止后竞技场仍被标记占用的概率。 ### 3. 修复原背包备份可能重复恢复导致复制物品的问题 - 原背包持久化备份改为一次性消费:成功恢复并保存玩家数据后立即删除备份文件。 - 修复玩家被击杀后恢复装备,将装备放入箱子,再退出重进时备份再次恢复造成物品复制的问题。 - 死亡/重生恢复状态在第一次成功恢复后会立即清除,避免后续延迟任务重复覆盖背包。 ### 4. 增强异常结束时的背包兜底 - 若结束流程中途异常,会尽量对仍在线且仍持有竞技场 Kit 背包的玩家恢复原背包、等级和经验。 - 背包恢复与竞技场解锁互不阻塞,避免物品恢复失败导致竞技场长期不可加入。 [/MD]
[MD] ### 1. 增加单挑原背包落盘备份 - 玩家进入会替换 kit 的单挑竞技场时,会把入场前的背包、护甲、副手、手持槽、经验等级和原位置写入插件数据目录。 - 备份目录为 `plugins/WarZDuelTime/data/classic_inventory_backups/`。 - 这类备份用于兜底异常关服、后台 stop、核心保存 playerdata 时机异常等情况。 ### 2. 修复比赛中后台 stop / 关服后只剩竞技场 kit 的问题 - 之前原背包快照主要在内存中,服务器关闭后内存丢失,如果核心把当前 kit 背包保存到 playerdata,重启后就无法再恢复。 - 现在玩家重启后进服会自动检测遗留备份,并多次恢复与保存原背包,避免原物品被 kit 覆盖。 ### 3. 优化插件 reload / 热重载兜底 - 插件启用后会延迟扫描在线玩家,如果发现未清理的单挑背包备份,会自动恢复。 - 正常比赛结束并确认原背包恢复后才会清理备份。 - 插件正在关闭时不会主动删除备份,避免关服时机再次丢失兜底数据。 [/MD]
[MD] ## 本次更新 ### 1. 新增聊天框点击加入的指定世界限制 - 新增配置 `Arena.wait.clickable-join-world-limit.enabled`,默认关闭。 - 开启后,只有处于指定世界列表 `Arena.wait.clickable-join-world-limit.worlds` 的玩家,才能通过聊天框里的“点击加入”加入竞技场。 - 这个限制只作用于聊天点击加入,不影响玩家手动输入 `/dt join` 或通过 GUI 加入,避免误触的同时尽量不影响正常使用。 ### 2. 修复观战状态下 `/dt quit` 无法退出 - 修复玩家处于观战状态时,执行 `/dt quit` 会被误判成“不在竞技场中”的问题。 - 现在 `/dt quit` 会优先尝试退出观战,其次才是退出比赛或离开等待队列。 [/MD]
[MD] --- ## 本次更新 ### 1. 修复经典竞技场失败方赛后仍保留 kit 装备 - 修复经典竞技场在部分服务器使用 `Arena.classic.auto-respawn.code: "SETHEALTH"` 时,失败方赛后不会立刻走重生恢复链,导致原装备没有当场还原的问题。 - 现在即使服务器使用 `SETHEALTH` 分支,也会主动执行与重生后相同的回传与原背包恢复逻辑,不再需要玩家退出服务器后才能恢复。 ### 2. 新增可选的空背包入场限制 - 新增配置 `Arena.classic.require-empty-inventory.enabled`,默认关闭。 - 开启后,玩家只要身上还有任意物品,就不能进入经典竞技场等待队列、不能直接加入正在进行的开放竞技场,也不能开始经典对局。 - 检查范围包含主背包、护甲栏、副手/额外槽位以及鼠标光标上的物品,可用于降低原背包与对局 kit 混淆的风险。 [/MD]
[MD] ## 本次更新 ### 1. 修复启动补重载后 5V5 竞技场被清空 - 修复主插件在启动阶段执行 `startup-attempt` 自动补重载时,只重载主插件竞技场、却没有同步恢复 Team 扩展竞技场的问题。 - 现在主插件每次执行竞技场恢复后,都会同步触发 `WarZDuelTimeTeam` 重新加载团队竞技场定义。 ### 2. 修复部分更新用户提示“服务器未创建任何竞技场” - 针对跨多个旧版本直接升级的用户,5V5 竞技场虽然仍存在于 `arenas.yml`,但过去会在主插件启动补重载后从内存中被清掉。 - 现在即使主插件在开服后做延迟补加载,团队竞技场也会一起重新灌回内存,不再必须手动 `/dt reload`。 [/MD]
[MD] ## 本次更新 ### 1. 修复赛后快速退出导致重登变成决斗装备 - 修复玩家在决斗结束、原装备已恢复后,若过快退出服务器,磁盘数据仍可能保留为决斗 kit 的问题。 - 现在在正常回传、死亡后重生恢复、登录后的兜底恢复等路径上,都会在恢复原装备和经验后立即执行玩家数据保存。 ### 2. 增强异常时序下的登录兜底恢复 - 当玩家在结算、延迟回传或重生恢复过程中掉线时,重新登录后会优先补做待恢复状态,再执行回传位置处理。 - 这样可以降低因为服务器自然保存时机较晚,导致玩家下次上线读到旧对局状态的概率。 [/MD]
[MD] ### 1. 修复启动后竞技场列表偶发显示为空 - 修复部分服务器在重启后,玩家较早打开 `/dt start` 或发起邀请时,插件误判“服务器未创建任何竞技场”的问题。 - 现在插件启动后会对竞技场数据执行带重试的延迟补加载,兼容世界、数据库或其他依赖稍晚就绪的情况。 ### 2. 补充竞技场数据自恢复 - 当 `/dt start`、`/dt send`、`/dt accept` 遇到竞技场缓存为空时,现在会先自动尝试重新加载竞技场数据,而不是直接提示没有竞技场。 - 这样即使首轮加载未成功,也不再必须依赖管理员手动执行 `/dt reload` 才恢复。 ### 3. 同步刷新竞技场列表页数量 - 竞技场数据变动后,开始匹配 GUI 会同步刷新总数与分页状态,降低列表数量与实际内存状态不一致的概率。 [/MD]
后退
顶部 底部