装模组最难受的不是装不上,而是装完开不起来,也不知道是哪一个。十几个模组,每个看起来都没问题,日志却只给你一行红字。
更麻烦的是:模组和插件的报错长得完全不一样,处理方法也不一样。把插件塞进 mods/,日志会给你一堆看起来毫无关系的错误,你会沿着错误方向查半小时。
这一页给两样东西:一张报错对照表(看到这行字就知道是什么病),和一个不用懂代码的方法——二分法。熟练之后,十几个模组定位元凶通常不超过 10 分钟。
先看目录:插件在
plugins/,模组在mods/。放错目录等于没装,还会刷一堆假错误。三个高频词:
requires(缺前置)、Incompatible(版本或加载器不对)、Mixin(两个模组改同一处)。日志里已经写了模组名,就先按名字处理,别急着二分。
二分法的节奏是 一次砍一半,不是一次删一个。
动手之前先备份
mods/,出问题能 30 秒回到昨天。
先认清你在装什么:模组还是插件#
| 模组(Mod) | 插件(Plugin) | |
|---|---|---|
| 装在哪 | mods/ | plugins/ |
| 谁能用 | Fabric / Forge / NeoForge / Quilt | Paper / Purpur / Spigot / Leaves / Leaf / CraftBukkit / PowerNukkitX |
| 客户端要不要装 | 通常要,且版本一致 | 不用 |
| 常见报错 | Mixin、依赖、注册表 | 主类找不到、api-version |
两种东西不能混。把 jar 放进错目录,服务端不会提示“放错了”,只会报一堆语法上正确、方向上全错的异常,看半天也看不出问题。
加载器(mod loader)是让模组能插进游戏的那层框架。Fabric、Forge、NeoForge、Quilt 是四种不同的加载器,同一个模组通常只支持其中一种。用 Fabric 核心就别去下 Forge 版模组,哪怕名字一模一样。
在 Minexa 里怎么开关、怎么删#
入口:服务端管理 →「插件」(页面标题是「插件管理」),顶部分段可以切换插件和模组。
开关不是打勾,而是改文件名后缀:插件加一个
-前缀,模组改成.jar.disabled。所以“已禁用”的本质就是文件被改了名。服务端运行时不能启停、不能删除,页面会红字提示先停止服务器。这是保护措施,不是 bug。
删除插件会弹窗,里面有个默认勾选的「同时删除插件数据目录」,默认会连配置一起删掉;想留配置就先取消勾选。
页面不会替你装前置。模组的
depend只在详情里显示一行,下载要自己来。这是本页存在的主要理由。
四类模组报错:看到这行字就知道是什么病#
1. Missing dependency:缺前置#
Mod 'xxx' requires mod 'yyy', which is missing模组 A 用了模组 B 的代码,你只装了 A。
判断标准:
requires后面那个名字,就是缺的东西。处理:去下载它,版本要和游戏版本、加载器都对上;装进
mods/,不是config/。最常见的坑:Fabric 模组大多需要 Fabric API。装 Fabric 模组,先放 Fabric API,能省掉一半的 Missing dependency。
2. Incompatible mod set:版本或加载器不对#
Incompatible mod set!三种典型原因:模组是给 1.20.1 做的而你跑 1.21;Forge 模组装进了 Fabric 服;整合包里某个模组被单独升级了。
判断标准:报错前几行通常写着
requires minecraft 1.20.1或requires fabricloader >=...,把那两个数字和你实际用的对一遍。处理:换成匹配版本。整合包就整包用回作者那套,别单独升其中一个——依赖关系是作者调好的。
3. Mixin apply failed:两个模组抢同一个类#
Mixin apply failed: xxx.jsonMixin 是模组改写游戏代码的手段。两个模组想改同一处,或者模组和核心版本对不上,注入就会失败。
判断标准:
Mixin apply failed后面跟的往往是“后来者”,一般后装的那个才是元凶。处理:升级或降级其中一个;找作者提供的兼容版本;实在不行二选一。这类冲突没有“修一下就好”的路子。
注意:少数情况是核心版本太新,模组还没跟上。这时候降核心比改模组省事。
4. Duplicate mod:同一个模组装了两份#
Duplicate mod: xxxmods/ 里有两个同 id 的 jar,常见于“新版放进去了,旧版忘了删”。
判断标准:文件名不一样不代表模组不一样,要看模组 id,不是看文件名。
处理:删掉旧的那个,只留一个。删之前确认新版的游戏版本对得上,否则你会从“重复”变成“不兼容”。
插件报错:五种,先分清拦不拦启动#
| 日志 | 含义 | 处理 |
|---|---|---|
Unsupported api-version | 插件要求的 API 版本比核心高 | 升级核心,或换插件旧版 |
Unknown/missing dependency | 缺前置插件 | 装前置;插件页不会替你装 |
Could not load plugin ... main class | 主类找不到,jar 损坏或根本不是插件 | 重新下载,确认下的是插件不是模组 |
NoSuchMethodError | 插件调用的方法核心没有 | 换与核心版本匹配的插件版本 |
Plugin is disabled | 初始化失败 | 看紧跟其后的堆栈,多半是缺依赖 |
另外两种不写在表里,但很常见:
命令冲突:两个插件抢同一个指令(比如都注册
/home),表现是其中一个功能失灵。处理办法是关掉一个,或改用另一个的指令别名。Java 版本:插件编译时用了更高的 Java,日志直接给
UnsupportedClassVersionError。这不是插件坏了,是环境版本低,去看 游戏版本与 Java 版本。
有的插件加载失败,服务端照样 Done。表现是“某个功能没了”(比如传送指令不生效),而不是开不起来。所以装完插件别只看能不能启动,要去终端翻一遍 ERROR。终端没有搜索功能,用「复制当前日志」复制出去再搜,具体见 终端与快捷指令。
二分法:10 分钟定位元凶#
假设你有 12 个模组,一启动就崩。不要去猜“哪个看起来可疑”,按这个节奏来:
停服并备份:概览点「停止」,然后用「文件」页把整个
mods/导出留底。这一步让你随时能退回去。只留一半:留下 6 个,另外 6 个先导出到别处。启动。
看结果分方向:能启动 → 元凶在被拿走的 6 个里;还是崩 → 元凶在这 6 个里。
对有问题的那一半再砍半:3 个 → 1~2 个。
锁定到 1~2 个:逐个单独放回去再启动,就能确定是哪个。
确认后处理:删掉它、换版本,或者找替代品。然后把备份里剩下的模组放回来,再启动一次验证。
12 个模组最多 4 轮就有答案。关键纪律只有一条:每轮只改一处,别同时又删又加。否则你会失去“是哪一步导致变化”的判断依据。
requires、Mixin apply failed、Duplicate mod 这三种报错都自带模组名,直接按名字处理就行,根本不用二分。二分法是给“日志里完全没提是谁”的情况准备的。
最小化复现:只留核心 + 一个模组#
二分到最后一个模组还开不起来,说明问题不在“模组之间打架”,而在“这个模组和你的环境不合”。这时候做一次最小化复现:
停服,把
mods/整个导出留底,然后只留那一个模组;启动,看它是能到
Done (…s)! For help, type "help",还是又崩在同一行;能启动 → 问题是它和别的模组组合出来的;不能启动 → 是它和核心、加载器或 Java 版本不匹配。
插件同理:把 plugins/ 清到只剩那一个,看还报不报同样的错。最小化之后报错还在,就能确定不是“冲突”,而是“不兼容”——两条路的处理办法不一样,一个是二选一,一个是换版本。
五类常见原因,对照自查#
| 原因 | 日志里的样子 | 怎么查 |
|---|---|---|
| 版本不符 | Incompatible mod set! | 对游戏版本 + 加载器两个数字 |
| 客户端模组装到服务端 | 启动就崩,报缺客户端相关的类 | 回模组页面看它是不是写着“仅客户端” |
| 重复模组 | Duplicate mod | 看 mods/ 里有没有两个同 id |
| 前置缺失 | requires ... which is missing | 按名字补前置 |
| 配置残留 | 模组都删了还在报同一个错 | 看 config/ 里有没有同名配置文件 |
修好之后:三件事才算收工#
启动验证:终端出现
Done (…s)!,并且进游戏把那个功能实际用一次。插件不报错不等于功能正常。备份一次:把现在这个“能跑”的状态备份下来,下次再折腾就有退路。
记一笔:哪个模组/插件、什么版本、为什么留它。过一个月你自己也想不起来。
插件和模组的启停、删除都要求先停服,页面已经拦住了。但「文件」页的删除和编辑不检查服务端状态——手动去删 mods/ 里的 jar,是能让一个正在跑的服务端当场崩掉的操作。
插件都在
plugins/、模组都在mods/,没有混放。服务端已停止,插件页的开关可以点、不是灰的。
终端里搜不到
requires ... which is missing和Duplicate mod。启动能走到
Done (…s)! For help, type "help",不是停在模组加载阶段。mods/里没有两个同 id 的 jar。你已经把这个“能跑”的状态备份过一次。