
客户端混入拦截
一个服务端模组,用于自动拦截本会导致服务器崩溃的客户端Mixin注入,使此前无法启动的模组包能够成功启动。
简介
本模组是一个专门为服务端环境设计的兼容性模组(在客户端不会生效)。在服务器启动时,它会识别可能将客户端代码带入服务器并导致崩溃的 Mixin,对它们进行拦截或精细过滤,同时尽可能保留原模组的服务端功能。
但是,本模组并非万能的修复工具,也不能替代原模组作者在核心层面正确隔离环境的需求。
问题分类
| 类别 | 通俗解释 | 处理方式 |
|---|---|---|
DIRECT_CLIENT_TARGET |
该 Mixin 直接修改了一个仅客户端存在的类,且此注入已升级为会导致启动终止的致命错误。 | 在 Mixin 官方错误处理阶段将致命错误降级,使服务器能够继续加载。 |
CLIENT_REFERENCE |
Mixin 的目标类可以在服务器上加载,但其字段、方法签名或方法体仍引用了客户端平台的类。 | 尝试仅移除有问题的字段/方法并清理其依赖关系;仅在无法进行局部处理时才禁用整个 Mixin。 |
例如,某个 Mixin 的目标是一个服务器上存在的普通实体类,但其某个方法调用了 Minecraft(客户端实例)或渲染类。完全禁用整个 Mixin 是不必要的——本模组优先只过滤代码中危险的部分。
不会盲目拦截所有客户端相关代码
为了尽量减少误判,本模组会尊重模组现有的环境防护机制:
- Mixin 配置中的
client列表; - Mixin 配置中声明的
IMixinConfigPlugin; @Pseudo注解;- Forge、NeoForge、Fabric 或 Architectury 中常见的环境注解和运行时环境检查;
- Mixin 本身能够正常跳过的客户端目标。
特别是,仅当某个 Mixin 在错误处理器中实际进入 ERROR 状态时,DIRECT_CLIENT_TARGET 才会被记录。仅仅因为目标类名位于 .client. 包内、目标在服务器上不存在,或 Mixin 正常跳过目标——这些情况都不会自动将模组加入报告。
查看报告
每次独立服务器启动时都会重新生成 ClientMixinMod.txt 文件。示例输出:
# Client Mixin Intercept Report / 客户端 Mixin 拦截报告
# Direct client targets / 直接注入客户端类
[DIRECT_CLIENT_TARGET]
example_modUnguarded platform-client references / 未受环境保护的平台客户端引用
[CLIENT_REFERENCE]
another_mod
该文件记录模组的 modid,已去重并排序:
- 列在
DIRECT_CLIENT_TARGET下——该模组触发了达到致命错误级别的客户端目标注入,本模组已将其拦截; - 列在
CLIENT_REFERENCE下——该模组的 Mixin 包含未受保护的平台客户端引用,已在字节码层面进行过滤; - 同一个模组可能同时出现在两个类别中;
- 被列出并不意味着整个模组编写错误,也不代表其所有功能都会失效——只是表示在当前服务器环境中,至少有一段 Mixin 代码需要处理。
注意:本模组仍有可能出现误判,尽管它已通过开发测试(在包含 200+ 模组的多个整合包的服务端环境中测试)并达到100% 准确率。
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。