LRM修复

LRM修复

补丁API在模组之间断裂,因此你可以持续更新而非固定某个模组版本。每个补丁都是独立的mixin,引用了证明断裂的字节码,若目标缺失则静默失败。

杂项

在一个大型模组包中,模组之间会逐渐产生分歧。模组A调用了模组B中的某个方法;B在一次更新中修改了该方法;而A——固定在其自身发布的版本上——就会抛出NoSuchMethodError。这类问题通常是潜伏性的:启动时毫无征兆,加载世界时也一切正常。只有当那段确切的代码路径被执行时,游戏才会崩溃,有时甚至是在游玩数小时之后。

到目前为止,唯一的解决办法是保留旧版模组。LRM Fixes 转而修补调用点,让你可以继续更新模组。

工作原理

每个补丁都是一个独立的 mixin,它将损坏的调用重定向到目标模组当前实际提供的任何内容。

目标解析依据名称和参数数量,绝不依赖精确签名——因为签名就是最初出问题的根源。解析过程只执行一次并被缓存。因此,补丁能够经受住上游下一次变更的考验,无论变更方向如何,而不会二次损坏。

重定向在构造上就是安全的:它们执行的是原本就应该发生的调用。它们能防止崩溃,并且不会改变其他任何行为。

设计规则

  • 惰性失败,绝不引发错误。 Mixin 声明时使用 defaultRequire: 0。如果目标模组不存在,或者上游最终修复了问题,补丁会被直接跳过。它绝不可能是你游戏无法启动的原因。
  • 每个补丁都有证据支持。 每个 mixin 都记录了证明问题存在的字节码,以便进行审计和淘汰,而不是盲目信任。
  • 过时的补丁会被移除。 在上游自我修复后仍保留的补丁,最终可能会掩盖真正的回归问题。
  • 日志行必须有意义。 启动时只报告哪些补丁处于待命状态。每个补丁在首次实际拦截调用时会记录第二条日志——这第二行是证明其确实在工作的唯一证据。

当前修复的内容

补丁列表随版本发布而变化。请查看你下载文件的更新日志:其中列出了每个补丁、涉及的两个模组,以及它防止的症状。

兼容性

  • 在客户端和服务器端均可运行
  • 除 Fabric Loader 外无其他依赖——它所修补的每个模组在运行时都是可选的
  • 如果受影响的模组未安装,则完全不做任何事

用于 Legends Reborn: Medieval 模组包。