Diagnostics Mixin

[!INFO] 注册真源:MixinConfigPlugin.getMixins() 的 Phase.DEFAULT 分支末尾 源码目录:src/main/java/makamys/coretweaks/mixin/diagnostics/

2 个 Diagnostics Mixin

# Mixin 目标类 门控配置 默认 需客户端
1 enhancemapstorageerrors.MixinMapStorage MapStorage enhanceMapStorageErrors true 否
2 detectdatawatcherconflict.MixinDataWatcher DataWatcher detectDataWatcherIdConflicts true 否

两个都不需要客户端(服务端同样有用),且都不在 if (Compat.isOptifinePresent()) 块内。

MixinDataWatcher 的两个层次

detectDataWatcherIdConflicts 启用后还有配套开关:

配置 类型 默认 说明
detectDataWatcherIdConflicts FeatureSetting true 主开关
detectDataWatcherIdConflictCulprit boolean false 是否记录并打印注册调用栈

配置注释明确说明后者为何默认关闭:

Keep track of all registration stack traces, and print which ones conflict. Off by default because it adds some overhead to DataWatcher object registration.

即默认只做类型化注册冲突的告警(原版仅在无类型注册方法里告警), 开启 detectDataWatcherIdConflictCulprit 后才额外保留全部注册栈以定位冲突方, 代价是注册开销上升。

功能描述:某个 mod 用带类型的注册方法占用了已被占用的 ID 槽时 发出警告 —— 这是 mod 之间 DataWatcher ID 冲突的经典症状。

MixinMapStorage

enhanceMapStorageErrors 把 MapStorage 的错误输出改得更详细。 对应 Config 分类 Diagnostics,注释为 「Makes MapStorage’s errors more informative.」

MapStorage 是 1.7.10 中小地图/维度地图存档的容器, 其报错在 modpack 中极难定位,本 Mixin 补充上下文。

⚠️ 第三个 Diagnostics 功能被硬编码关闭

/coretweaks 指令(Config.coreTweaksCommand)同属 Diagnostics 分类, 但其注解被注释掉、字段硬编码:

// @ConfigBoolean(cat="Diagnostics", def=TRUE, com="Enables the /coretweaks command, used to access various
// diagnostics. Invoke it in-game for additional information.")
public static FeatureSetting coreTweaksCommand = FeatureSetting.FALSE;

注释掉的注解声明它是 @ConfigBoolean(默认值 TRUE), 但字段实际类型是 FeatureSetting 且硬编码为 FALSE。 注解与字段类型本就不匹配,恢复注解也会编译失败 —— 说明这是主动关闭而非单纯注释掉配置。

因此 CoreTweaksMod.init() 中的

if (Config.coreTweaksCommand.isActive()) {
    ClientCommandHandler.instance.registerCommand(new CoreTweaksCommand());
}

永远不执行 —— /coretweaks 指令在当前版本无法在游戏中使用。 详见 coretweaks 指令。

即 Diagnostics 分类名义上有 3 个功能,实际可用 2 个。

目录中还有一个非 Mixin 的 diagnostics 实现

src/main/java/makamys/coretweaks/diagnostics/DataWatcherMonitor.java 位于 mixin/ 之外,是 MixinDataWatcher 的支撑实现类 (负责冲突记录与栈追踪),本身不带 @Mixin 注解。

相关条目