
ThreadWard
针对真实并行mod加载崩溃的小型精准修复
ThreadWard
一个针对真实并行模组加载崩溃的小型、精准修复。
功能说明
ThreadWard 通过 Mixin 将 EntityRenderers 和 ItemProperties 的后备映射包装为线程安全的实现。这解决了在 FMLClientSetupEvent 期间模组并行注册渲染器或物品属性覆盖时出现的竞争条件——在大型整合包(1000+ 模组)中,这可能会抛出间歇性的 ArrayIndexOutOfBoundsException 并在启动时导致游戏崩溃。
如果你曾遇到整合包在每次启动时都因不同的模组崩溃,且崩溃原因位于 EntityRenderers 或 ItemProperties 内部的 ArrayIndexOutOfBoundsException,那么这几乎肯定是你需要的修复。
为什么存在
NeoForge 在多线程上并行向模组分派 FMLClientSetupEvent 以加快启动速度。大多数时候这是安全的——但少数内部的 Minecraft/NeoForge 集合从未被设计为支持并发写入。当足够多的模组同时注册渲染器/物品属性时,你最终会输掉竞争并崩溃。常见的解决方法是强制设置 ForkJoinPool.common.parallelism=1,这虽然有效,但完全放弃了并行加载的性能优势。
ThreadWard 转而修复实际不安全的集合,使并行模组加载既能保持快速又安全。
兼容性
- Minecraft: 1.21.1
- 模组加载器: NeoForge(基于
21.1.236构建和测试) - 依赖项: 无
- 运行环境: 客户端
- 应与几乎所有整合包兼容——此模组不添加内容、不改变游戏玩法,也不会触及它所修补的两个特定集合之外的任何内容。
安装
将 jar 文件放入你的 mods 文件夹即可。就这样——无需配置,无需设置。它会在后台静默运行。
常见问题
这会与其他东西冲突吗? 极不可能。ThreadWard 仅将两个特定原版/NeoForge 注册表的内部存储替换为线程安全的等价实现——它不会移除、覆盖或更改任何模组的实际内容或行为。
如果我的整合包没有崩溃,我需要这个吗?
无论是否安装都没有坏处,但如果你没有遇到与 EntityRenderers 或 ItemProperties 相关的间歇性 ArrayIndexOutOfBoundsException 崩溃,你很可能不需要它。
我可以在我的整合包中使用这个吗? 可以——基于 MIT 许可证,你可以在任何公开或私人的整合包中自由使用。
致谢
专为修复一个在 1300+ 模组的杂烩型整合包中遇到的实际崩溃而构建。有时最好的修复就是那些小而精准的修复。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。