CoreTweaks 配置
[!INFO] 实现类:
makamys.coretweaks.Config(纯静态字段 + 注解) 加载器:makamys.coretweaks.util.AnnotationBasedConfigHelper配置文件:config/coretweaks.cfg(硬编码路径) 条目数:53 个活跃配置项
配置文件路径
File configFile = new File(Launch.minecraftHome, "config/coretweaks.cfg");
boolean configFileExisted = configFile.exists();
Configuration config = new Configuration(configFile, CoreTweaks.VERSION);
config.load();
configHelper.loadFields(config);
⚠️ 路径硬编码为 config/coretweaks.cfg,不可通过配置改。
Configuration 构造时传入 CoreTweaks.VERSION 作为配置版本,
配合 ConfigMigrator 做版本迁移。
Config.reload() 被调用 3 处:
| 调用点 | 时机 |
|---|---|
MixinConfigPlugin.onLoad |
Mixin 插件加载(最早) |
CoreTweaksPlugin 构造器 |
coremod 实例化 |
CoreTweaksMod.onConstruction |
@Mod 构造阶段 |
CoreTweaksMod.onServerAboutToStart |
服务端启动前(重载) |
即单客户端运行中配置会被读取 3~4 次(onServerAboutToStart 在客户端不触发)。
核心机制:三值 FeatureSetting
本模组的每个功能开关都是 FeatureSetting(包装枚举 Setting),
不是普通 boolean。这是理解全部配置的关键。
public static enum Setting { FALSE, TRUE, FORCE; }
isActive() 的判定:
public boolean isActive() {
return setting != Setting.FALSE
&& (setting == Setting.FORCE || (setting == Setting.TRUE && !disabled));
}
| 配置值 | 行为 |
|---|---|
false |
关闭 |
true |
开启,但若被冲突检测 disable() 则仍关闭 |
force |
无条件开启,绕过冲突检测 |
配置文件顶部的说明(由 setCategoryComment("_categories", …) 写入)
也明确了这一点:A feature toggle can be set to the following values.
If a different value is provided, the setting will be reverted to the
default setting on next start.
disabled 标记
FeatureSetting.disable() 把 disabled = true,由
Config.shouldDisable 在配置加载期调用(见
功能兼容矩阵)。
force 是唯一能绕过它的取值。
类别总开关
setValue 会额外读一个 _categories 分类下的
enable<Category> 键:
config.getBoolean("enable" + capitalize(ann.cat().toLowerCase().split("\\.")[0]),
"_categories", true,
"Set this to false to disable all features in the '<category>' category.")
即设置 enableOptimizations=false 可一键关闭整个 Optimizations 分类。
取的是分类名的第一段(split("\\.")[0]),故
Optimizations.transformerCache.full 也归 enableOptimizations 管。
6 个配置分类
| 分类 | 项数 | 内容 |
|---|---|---|
Optimizations |
11 | 启动/类加载性能 |
Bugfixes |
11 | 上游 bug 回移修复 |
Tweaks |
9 | 行为调整 |
Optimizations.Mods |
2 | OptiFine / FastCraft 专属优化 |
Tweaks.Mods |
2 | OptiFine 专属调整 |
Diagnostics |
2 | 诊断辅助 |
另有 7 个子分类用于分组附加参数:
Optimizations.transformerCache[.full|.lite]、
Tweaks.tweakCloudHeightCheck、Tweaks.clampFarPlaneDistance、
Optimizations.jarDiscovererCache、
Optimizations.excludeLibraryTransformation、
Diagnostics.detect_data_watcher_id_conflicts、
Bugfixes.fixIntelRendering。
53 个配置项的注解分布
| 注解 | 数量 | 承载类型 |
|---|---|---|
@ConfigWrappedEnum |
37 | FeatureSetting |
@ConfigBoolean |
4 | boolean |
@ConfigInt |
4 | int |
@ConfigString |
3 | String |
@ConfigEnum |
2 | CloudHeightCheck / TransformerCache |
@ConfigStringList |
2 | StringList |
@ConfigFloat |
1 | float |
37 个功能开关 + 16 个参数项 = 53。
⚠️ 3 个功能被硬编码为 FALSE(注解被注释)
以下字段带注释掉的注解 + 硬编码 FeatureSetting.FALSE,
用户无法在配置文件中启用:
| 字段 | 注释掉的注解 | 影响 |
|---|---|---|
clientChunkMap |
@ConfigWrappedEnum(… def=FALSE …)(WIP,从 1.16 移植) |
2 个 Mixin 永不可达 |
threadedTextureLoader |
@ConfigBoolean(… def=FALSE …)(“Use multi-threaded texture loading…? Placebo.”) |
2 个 Mixin + 整条加载器路径死代码 |
coreTweaksCommand |
@ConfigBoolean(… def=TRUE …) |
/coretweaks 不可用 |
coreTweaksCommand 尤其矛盾:注释里写的默认值是 TRUE,
字段却是 FALSE;且注释声明 @ConfigBoolean 而字段类型是
FeatureSetting —— 取消注释也无法编译。
因此「53 个配置项」中,这 3 项实际不可配置。
关键参数默认值
| 配置 | 类型 | 默认 | 说明 |
|---|---|---|---|
minFarPlaneDistance |
float | 180f |
远平面钳制下界 |
cloudHeightCheckMode |
enum | VARIABLE_CORRECTED |
云渲染三态 |
transformerCacheMode |
enum | LITE |
变换器缓存模式 |
jarDiscovererCacheMaxAge |
int | 8 |
缓存最大存活轮次(-1 无限) |
badTransformers |
String | org.spongepowered.asm.mixin.transformer.Proxy,appeng.transformer.asm.ApiRepairer,com.mumfrey.liteloader.transformers.ClassOverlayTransformer+ |
FULL 模式下需恢复 transformer 链视图的名单 |
badClasses |
String | net.eq2online.macros.permissions.MacroModPermissions |
不缓存的类 |
modFilesToIgnore |
String | CMD files.jar |
触发缓存重建时忽略的文件 |
recentCacheSize |
int | 512 |
保留最近 N 份字节码(-1 永久) |
verbosity |
int | 1 |
0=精简 / 1=保存时打印 / 2=调试 |
transformersToCache |
StringList | 5 个 FML/CodeChicken 变换器 | LITE 模式缓存名单 |
liteTransformerCacheMaxSizeMB |
int | 128 |
LITE 缓存上限(-1 无限) |
lateLiteTransformerCache |
boolean | false |
DEFAULT 阶段才挂钩(更安全) |
useDiffsInTransformerCache |
boolean | true |
只存差分,体积减 40~70% |
excludeLibraryTransformationPackages |
StringList | gson/joptsimple/netty/trove/kotlin | 变换排除前缀 |
useDiffsInTransformerCache 的取舍
配置注释给出量化数据:只存差分使缓存体积减少 40~70%,
但命中时转换慢约 25%,首次创建慢 50~100%。
resetOnLoad = true 标注在 excludeLibraryTransformationPackages 上,
使该默认值每次启动重置。
StringList 的 :resetOnLoad 机制
StringList.set 会剥掉以 :resetOnLoad 开头的首元素:
this.list = Arrays.copyOfRange(list,
list.length > 0 && list[0].equals(":resetOnLoad") ? 1 : 0, list.length);
getRaw() 返回含标记的原始数组,get() 返回剥离后的列表。
配置文件注释的 3 处笔误
reload() 中的 setCategoryComment:
"In this config file, every feature toggle has the name of '_enabled'."—— 实际键名由categoryProperty = "_enabled"决定, 拼写是_enabled(下划线在后),此处描述不准确。"If a different value is provided, the setting will be reverted to the default setting on next start."—— 对force之外的非法值成立。"* appliable"拼写错误(应为applicable), 出现在transformer_cache.full与.lite两处分类注释中。
另外分类注释里的键名写作 Optimizations.transformer_cache.full
(下划线),而实际字段注解用的是
cat = "Optimizations.transformerCache.full"(驼峰)——
注释与实际分类名不一致。
相关条目
- 功能兼容矩阵 - 7 个冲突禁用规则与 8 个被探测 mod
- 动态 Mixin 注册 - 被本配置门控的 37 个 Mixin
- Coremod 与 ASM 变换器 - 3 个 ASM 门控开关