ThreadWard

ThreadWard

针对真实并行mod加载崩溃的小型精准修复

Bug修复

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+ 模组的杂烩型整合包中遇到的实际崩溃而构建。有时最好的修复就是那些小而精准的修复。