配置文件
基本信息
| 属性 | 值 |
|---|---|
| 文件名 | config/ThaumicMachina.cfg(event.getSuggestedConfigurationFile() 按 modId 原样拼 config/<modId>.cfg,保留大写) |
| 加载时机 | ProxyCommon.preInit(core/proxy/ProxyCommon.java:35-43) |
| 分类 | RESEARCH(Config.CATEGORY_RESEARCH) |
| 配置项总数 | 1 |
唯一配置项
research.concept.mode(core/config/Config.java:18-22):
| 值 | 含义 | 对 concept = true 的研究项的影响 |
|---|---|---|
| 0 | Normal(默认) | 仅 setRound(),无额外标记 → 需正常研究 |
| 1 | Easy (purchased) | 追加 setSecondary() → 可在研究页直接购买 |
| 2 | Auto-Unlock | 追加 setAutoUnlock() → 自动解锁,无需研究 |
源码注释原文:
Property conceptResearchModeProp = this.config.get(CATEGORY_RESEARCH, "research.concept.mode", 0);
conceptResearchModeProp.comment =
"Concept research mode. 0 = Normal, 1 = Easy (purchased), 2 = Auto-Unlock.";
Settings.conceptResearchMode = conceptResearchModeProp.getInt(0);
生效点在 TMResearchItem 的两个构造器(research/TMResearchItem.java:29-35 与 :44-50),对每个 concept = true 的 ResearchItem 逐个应用。全树共 12 个 concept 研究受影响(见 研究树)。
数值
| 数值 | 值 |
|---|---|
| 配置项数 | 1 |
| 键 | research.concept.mode |
| 分类 | RESEARCH |
| 取值范围 | 0 / 1 / 2 |
| 默认值 | 0 |
| 受影响研究项 | 12 |
Settings.conceptResearchMode 静态字段初值 |
0(core/config/Settings.java:6) |
交互
配置在 preInit 读取,早于 ResearchHelper.loadResearch()(postInit)与 TMObjects.loadObjects()(preInit 内、但研究项尚未构造),因此修改后必须重启客户端才生效。
源码缺陷
-
lang 承诺的「第三档」不存在。
INFORMATION_CONCEPTS的研究页正文(assets/thaumicmachina/lang/en_US.lang:58)写:“Concepts can be customized in the config file (turned to easy mode (purchasable), or turned off completely (automatically unlocked)).”
但配置只有 3 档且没有「完全关闭」—— mode 0(Normal)仍要求正常研究,mode 2(Auto-Unlock)才是「自动解锁」。文本与实现的三档映射不一致。
-
getInt(0)越界值不校验。写入research.concept.mode = 5时Settings.conceptResearchMode = 5,而TMResearchItem只用== 1/== 2判断,两者皆不匹配 → 静默退回 Normal 行为,无日志无报错。 -
load()异常被吞(core/proxy/ProxyCommon.java:36-43):catch (Exception e)只打印"Thaumic Machina had a problem loading its configuration file",吞掉了异常对象本身(未log.error(e)),排查时无法得知根因。finally中的config.config.save()会在读取失败时写回一个空/默认配置文件,可能覆盖用户配置。 -
静态字段双重初始化:
Settings.conceptResearchMode在类加载时为 0,Config.loadConfig()再赋值。若loadConfig()抛异常,Settings保持 0 —— 与默认行为一致,属安全降级。 -
Settings类只有 1 个字段,整个 config 系统是专为这 1 个开关搭建的。