本篇教程由作者设定未经允许禁止转载。

序言

“在自行组合Mod时总是遇到麻烦的崩溃?”

“或是从某些整合中摘选一些Mod出来玩却不知道为何崩溃?”

这篇教程会把一些比较常见的崩溃原因列出来,可以让你自行解决大多数问题。

日志提供的信息

要排查报错的原因,最好是学会看日志,至少看懂Modloader给我们提供的信息,而不是盲目地逐一排查。

如果你用的是Forge,Forge会在报错信息中的Mod列表标出报错Mod:

[宝宝早教]一些常见的崩溃原因-第1张图片(仅演示,并非真实日志)

(仅演示,并非真实日志)

Mod列表上方有描述状态标识符的意义:

“状态: 'U' = 未加载 'L' = 已加载 'C' = 已构建 'H' = 预初始化 'I' = 初始化 'J' = 后初始化 'A' = 启用 'D' = 禁用 'E' = 错误

“States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored”

很明显,上图中报错的Mod是InputFix。

如果是Fabric,那么Fabric会贴心地直接指出报错Mod的Modid:

[宝宝早教]一些常见的崩溃原因-第2张图片(仅演示,并非真实日志)

(仅演示,并非真实日志)

虽然说不像Forge那样有时能够直接给出具体的报错的Mod文件,但搜索一下Modid基本上也能找到报错的是哪个Mod(当然,不要指望在百科搜【全词匹配,并且没法搜Modid】,最好直接在CurseForge或者Modrinth搜)

这里报错的则是Minceraft。

此外,还可以看报错后的堆栈信息:

[宝宝早教]一些常见的崩溃原因-第3张图片(仅演示,并非真实日志)

(仅演示,并非真实日志)

上图中指出了报错是由ojang.minceraft.main包中的Minceraft类中的postInit方法中的第44行引起的,而我们看其包名便知“ojang.minceraft.main”,所以依然得出报错是Minceraft引起的。

崩溃原因

Mod依赖错误/Mod联动错误

一般情况下,Mod的依赖项会明确写在mcmod.info或者mod.toml(Fabric同理)中。

如果缺少了,那么Modloader会直接弹出一个屏幕告诉你“缺少 xxx Mod或需要 xxx Mod的 xxx 版本”。

这是最好解决的问题了,安装报错屏幕上的Mod即可解决。

但某些开发者偷懒,并没有写明,导致崩溃时Modloader并不能直接告诉你少了什么Mod,而是直接给你抛NoClassDefFoundError、ClassNotFoundException或者InvocationTargetException之类带“Class”“Method”“Field”字眼的,那就需要看具体报错的位置是哪里了。

上文已经描述了两种方法,故不多赘述。

如果已经安装了依赖Mod的最新版本,但依然报错的话,那就尝试倒退版本吧。

Mod编写有误导致的错误

一些编写不规范或编写有误的Mod可能会直接导致游戏崩溃,或导致许多问题。

先尝试更新它们,也许问题会在更新的版本中得到解决。

这类问题通常都是发生在tick某个方块实体/实体时,某些版本的Forge内置了解决工具,只需要在配置文件(例:.minecraft/config/forge.cfg 或 .minecraft/version/<版本>/config/forge.cfg)中开启即可。

以1.7.10版本举例,将这两项设置为true即可:

[宝宝早教]一些常见的崩溃原因-第4张图片

这能够解决大多数此类报错问题,但如果依然崩溃、你所使用的Forge已经不包含此功能或你使用的是Fabric,请直接移除报错Mod。

当然,也不要忘了在Mod的Github、Gitee之类的反馈处提交Issue,这样Mod开发者才能尝试去解决问题(毕竟也可能是环境不同导致了问题产生)

不过需要注意的是,一个Mod可能会破坏其他Mod,所以即使日志中标出的某一个Mod报错也不一定是那个Mod本身引起的,最好先单独将报错的Mod提出来测试再下结论。