跳到正文

Client Mixin Intercept

作者:TheFlareStar

服务端模组,可自动拦截原本会导致服务器崩溃的客户端 Mixin 注入,让之前无法启动的整合包也能顺利运行。

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

简介

这是一款专为服务器环境设计的兼容性模组(不会在客户端激活)。服务器启动时,它会识别可能将客户端代码带入服务器并导致崩溃的 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_mod

# Unguarded platform-client references / 未受环境保护的平台客户端引用
[CLIENT_REFERENCE]
another_mod

文件会记录模组的 modid,并去重、排序:

  • 列在 DIRECT_CLIENT_TARGET 下——该模组触发了针对客户端目标的注入,且注入已达到致命错误级别;本模组已拦截该注入;
  • 列在 CLIENT_REFERENCE 下——该模组的 Mixin 含有未受保护的平台客户端引用,这些引用已在字节码层面过滤;
  • 同一个模组可能同时出现在两个类别中;
  • 被列入报告并不意味着整个模组编写错误,也不代表其所有功能都会失效——这仅表示在当前服务器环境中,至少有一段 Mixin 代码需要处理。

注意:这款模组仍有可能产生误报,但它已在开发测试中通过验证(在包含 200 多个模组的多个整合包服务器环境中),准确率达到100%。

常见问题

Client Mixin Intercept 支持哪些 Minecraft 版本?

Client Mixin Intercept 支持 Minecraft Java 版 1.19–1.20.6,共 12 个版本,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

Client Mixin Intercept 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

TheFlareStar 的其他作品

查看全部 →