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 自己的版本冲突。
相关条目
- SanityCheckConfig -
enableIntegrityChecks开关 - MixinCore - 调用
checkIfJarPrefixesExist的地方 - ConfigUtil - 配置加载入口
- module-common - 本类所属模块(无 modid)