Weather, Storms & Tornadoes – Concurrent Packet Fix
通过实现线程安全的 NBT 序列化,修复因 ConcurrentModificationException 导致的断开连接问题。这是一项全局补丁,可修复 Weather2 及其他存在类似多线程问题的模组。
介绍
CompoundTag 并发修改修复
这是一款轻量级 Mixin 补丁,可消除 NBT 数据序列化期间因 java.util.ConcurrentModificationException 导致的客户端断开连接问题。该模组最初是为解决原版 Weather, Storms & Tornadoes (Weather2) 模组中由来已久的问题而开发的,但它会在全局引擎层面应用修复,为整个整合包提供保护。
🔍 问题所在

当模组尝试从异步网络线程(例如 Netty I/O)编码 CompoundTag(NBT),而主游戏线程同时修改同一个标签时,Minecraft 经常会断开客户端连接。由于 Java 标准的 HashMap 本身并非线程安全,这种并发访问会立即触发 ConcurrentModificationException。Minecraft 会通过立即断开客户端连接来处理此错误,从而影响游戏体验。
🛠️ 解决方案
此补丁无需逐一等待各个模组更新,而是直接注入原版 Minecraft 的 net.minecraft.nbt.CompoundTag.write() 方法。它会拦截序列化过程,并实现优化的“安全快照”机制:
- 无锁重试:动态捕获内部映射状态,不会造成线程死锁。
- 安全上限:严格限制为最多重试 100 次。若超过上限,便安全地写入空标签,以保持连接稳定。
- 快速执行:在实际环境中,通常只需尝试 1–3 次即可成功获取安全快照。
✨ 主要特性
- 通用保护:自动保护任何在多个线程之间错误处理 NBT 数据的模组。
- 零配置:真正即装即用,无需配置文件或调整设置。
- 非侵入式架构:不修改各个模组的源代码,大幅降低冲突风险。
- 压力测试验证:经加速至 1000 TPS 的测试验证,处理开销可忽略不计。
- 面向未来的设计:作为被动式安全措施运行。如果某个模组在上游修复了线程问题,此补丁会自然变为“空操作”(不执行任何操作),维持原版行为。
⚙️ 支持的版本与加载器
此模组适用于多种现代模组生态:
- 模组加载器:Minecraft Forge 和 NeoForge
- 游戏版本:Minecraft 1.20.x、1.21.x,以及其他存在 NBT 导致网络断开问题的相近版本(忽略兼容性警告即可)。
💬 常见问题
问:这个补丁只对 Weather2 有效吗?
答:不是。开发工作由 Weather2 引发,但修复作用于原版引擎层面。任何执行异步 NBT 修改的模组都能受益。
问:这会影响服务器或客户端的性能吗?
答:不会。执行开销完全可以忽略不计。在极端模拟刻环境下进行的测试显示,帧率和刻时间均未出现下降。
问:我需要进行任何配置吗?
答:不需要。补丁会在初始化时自动启用。你可以查看控制台,确认是否出现以下信息:[weather2patch] CompoundTag thread-safety patch is active。
问:如果上游模组更新并修复了这个 bug 会怎样?
答:不会出问题。因为这个模组针对的是原版层,它只会发现线程状态已经是干净的,完全跳过重试,并让原版代码接管。
[描述在 Gemini 3.1 Flash 的帮助下更新]
常见问题
Weather, Storms & Tornadoes – Concurrent Packet Fix 支持哪些 Minecraft 版本?
Weather, Storms & Tornadoes – Concurrent Packet Fix 支持 Minecraft Java 版 1.20.1–1.21.1,共 3 个版本,可用的加载器:Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。
Weather, Storms & Tornadoes – Concurrent Packet Fix 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
评论
登录后评论和评分