Optimization Mixin
[!INFO] 注册真源:
MixinConfigPlugin.getMixins()源码目录:src/main/java/makamys/coretweaks/mixin/optimization/
13 个 Optimization Mixin
| # | Mixin | 门控配置 | 需客户端 | 备注 |
|---|---|---|---|---|
| 1 | fmlmessagestrip.MixinFMLClientHandler |
forgeFastStepMessageStrip |
是 | 唯一在 PREINIT 阶段 |
| 2 | jardiscoverercache.MixinJarDiscoverer |
jarDiscovererCache |
否 | 需先成功禁用 FoamFix |
| 3 | defaultresourcepack.MixinDefaultResourcePack |
fastDefaultResourcePack |
是 | |
| 4 | folderresourcepack.MixinFolderResourcePack |
fastFolderResourcePack |
是 | |
| 5 | tcpnodelay.MixinChannelInitializers |
tcpNoDelay |
否 | 服务端也生效 |
| 6 | ofupdaterendererreflect.MixinWorldRenderer |
ofOptimizeWorldRenderer |
是 | 需 OptiFine |
| 7 | fastcrafttextureload.MixinFastcraft1_23TextureUtil |
fcOptimizeTextureUpload |
否 | fcVersion == "1.23" |
| 8 | fastcrafttextureload.MixinFastcraft1_25TextureUtil |
同上 | 否 | fcVersion == "1.25" |
| 9 | fastcrafttextureload.MixinTextureUtil |
同上 | 否 | FastCraft 匹配成功才注入 |
| 10 | fastcrafttextureload.MixinTextureMap |
同上 | 否 | 同上 |
| 11 | clientchunkmap.MixinChunkProviderClient |
clientChunkMap |
是 | ⚠️ 永不可达 |
| 12 | threadedtextureloader.ITextureMap |
threadedTextureLoader |
是 | ⚠️ 永不可达 |
| 13 | threadedtextureloader.MixinTextureMap |
同上 | 是 | ⚠️ 永不可达 |
⚠️ 3 个永不可达(硬编码 FALSE)
#11~#13 的门控字段在 Config 中被硬编码且注解被注释:
public static FeatureSetting clientChunkMap = FeatureSetting.FALSE;
public static FeatureSetting threadedTextureLoader = FeatureSetting.FALSE;
FeatureSetting.isActive() 对 Setting.FALSE 恒返回 false,
因此这 3 个类虽然出现在 getMixins() 的源码里,实际永不注入。
详见 动态 Mixin 注册。
副作用:CoreTweaks.init() 中的
if (Config.threadedTextureLoader.isActive()) { textureLoader = ... }
与 CoreTweaksMod.init() 中的
if (CoreTweaks.textureLoader != null) 两段代码均不可达 ——
ThreadedTextureLoader、TextureLoaderThread 整条优化路径在当前版本是死代码。
唯一在 PREINIT 阶段的一个
fmlmessagestrip.MixinFMLClientHandler 是三重条件中最苛刻的:
if (phase == Phase.PREINIT) {
if (!isForgeSplashEnabled()) {
if (Config.forgeFastStepMessageStrip.isActive())
mixins.add("optimization.fmlmessagestrip.MixinFMLClientHandler");
}
}
isForgeSplashEnabled() 读 config/splash.properties 的 enabled 键
(缺省 true),用 Properties 手工解析:
File configFile = new File(Launch.minecraftHome, "config/splash.properties");
if (configFile.exists()) {
Properties props = new Properties();
props.load(new FileReader(configFile));
enabled = Boolean.parseBoolean((String) props.getOrDefault("enabled", "true"));
}
即必须先手动关闭 Forge 启动画面,该优化才生效。
同源的 forgeFastProgressBar 走 ASM 路径而非 Mixin
(见 Coremod 与 ASM 变换器)。
FastCraft 版本二选一
fcOptimizeTextureUpload 启用时读 Launch.blackboard.get("fcVersion"):
switch (fcVersion) {
case "1.23": mixins.add("...MixinFastcraft1_23TextureUtil"); break;
case "1.25": mixins.add("...MixinFastcraft1_25TextureUtil"); break;
default:
LOGGER.warn("Unsupported FastCraft version: " + fcVersion + "...");
ok = false; break;
}
if (ok) {
// 反射移除 transformerExceptions 里的 "fastcraft"
mixins.add("...MixinTextureUtil");
mixins.add("...MixinTextureMap");
}
MixinFastcraft1_23 与 MixinFastcraft1_25 互斥;
fcVersion 为 null(FastCraft 缺席)时静默跳过整个分支,连 WARN 都不打;
只有 fcVersion 存在但不匹配时才打 WARN。
jardiscoverercache 的前置反射 hack
该 Mixin 的注入被 disableFoamFixJarDiscovererTransformer() 门控,
该方法反射操作 FoamFix 的 BugfixModClassTransformer:
Class.forName("pl.asie.foamfix.bugfixmod.coremod.BugfixModClassTransformer")- 取静态字段
instance与私有字段patchers(Map<String, ArrayList>) - 遍历移除名为
JarDiscovererMemoryLeakFixPatcher的 patcher, 清空的列表一并移除 ClassNotFoundException→ TRACE 日志,视为「FoamFix 不存在」正常返回true
⚠️ 任何其它异常 → ERROR 日志 + 打印堆栈 + 返回 false,
此时 MixinJarDiscoverer 不会注入,jarDiscovererCache 静默失效。
日志中会明确提示用户手动关闭 FoamFix 的 jarDiscovererMemoryLeakFix。
非 Mixin 的优化实现
以下优化不靠 Mixin,而是在 CoreTweaks.init() 中直接构造对象:
| 优化 | 实现类 | 门控 |
|---|---|---|
| 库排除 | LibraryTransformationExcluder |
excludeLibraryTransformation |
| 反混淆加速 | FastDeobfuscationRemapper |
自身 isActive()(读黑板) |
| 通配符变换器 | ForgeFastWildcardTransformers |
forgeFastWildcardTransformers |
| 完整变换器缓存 | CachingTransformer |
transformerCache + 模式 FULL |
| 轻量变换器缓存 | TransformerCache |
transformerCache + 模式 LITE |
| jar 发现器缓存 | JarDiscovererCache |
jarDiscovererCache |
CoreTweaks.init() 还会无条件执行 excludeRepackagedLibraries(),
把 "com.esotericsoftware.kryo.kryo5." 加入
Launch.classLoader.addTransformerExclusion(无配置开关)。
相关条目
- 动态 Mixin 注册 - 本页 13 个的注册入口
- Coremod 与 ASM 变换器 -
forgeFastProgressBar等非 Mixin 路径 - CoreTweaks 配置 - 门控开关与硬编码 FALSE