SanityCheckHelper

基本信息

属性 值
类名 io.github.legacymoddingmc.unimixins.common.sanitycheck.SanityCheckHelper
文件 module-common/src/main/java/…/sanitycheck/SanityCheckHelper.java
行数 101
所属 module-common(无 modid 的内部库)
启用版本 Minecraft 1.7.10

功能

环境完整性自检。在混用(mixin)环境配置错误时给出醒目警告, 而不是让用户在几百行堆栈里找原因。

isEnabled()

受 SanityCheckConfig 的 enableIntegrityChecks 控制。 关闭时只警告一次(不再重复刷屏):

if (!SanityCheckConfig.enableIntegrityChecks
    && !Launch.blackboard.containsKey("unimixins.warnedAboutDisabledIntegrityChecks")) {
    Launch.blackboard.put("unimixins.warnedAboutDisabledIntegrityChecks", "true");
}

⚠️ 「只警告一次」靠 Launch.blackboard 的全局键实现, 键名 unimixins.warnedAboutDisabledIntegrityChecks。 用 blackboard 做幂等标记是本仓的惯用手法 (MixinModidDecorator 的 refresh 句柄同理)。

showBigWarning(...)

两个重载:单条 String 与可变参数 List<String>...。 后者把所有警告合并成一张列表,非空才输出。

⚠️ 源码注释说明了它的能力上限: 「Any throwables we throw here will get caught, so all we can do is warn.」 即自检只能警告、不能抛异常。

checkIfJarPrefixesExist(List<String>)

检测类路径上是否存在前缀冲突的 jar。命中则返回 "Detected incompatible jars: " + concerningJars,否则返回空列表。

getJarsMatchingPrefix 遍历 Launch.classLoader.getSources(), 只取 .jar,取文件名后转小写再用 Pattern.compile("[a-z]") 匹配。

⚠️ 因此前缀比较是大小写不敏感的 (小写化后匹配),传入前缀写 gasstation- 也能匹配 GasStation-x.jar。

实际使用的前缀

module-mixin 的 MixinCore 静态块传入 3 个前缀:

"gasstation-", "mixinbooterlegacy-", "spongemixins-"

即检测这 3 个模块的官方(非 UniMixins)版本是否也在类路径上, 以防与 UniMixins 自己的版本冲突。

相关条目