启动前文件铺设
基本信息
| 属性 | 值 |
|---|---|
| 入口 | EventHandler.preStartGame()(static,由类转换器注入调用) |
| 调用点 | DefaultOptionsClassTransformer 注入的 INVOKESTATIC DefaultKeys.preStartGame()V |
| 执行时机 | Minecraft.startGame(混淆名 ag)方法体第一行 |
| 作用范围 | 仅客户端(只对 net.minecraft.client.Minecraft 注入) |
四条分支
1. options.txt 不存在 → 铺设默认选项
读 config/defaultoptions.txt 写 options.txt,逐行跳过以 key_ 开头的行(EventHandler.java:229-231)。键位由独立的 config/defaultkeys.txt 机制处理,故不在此处下发。
2. optionsof.txt 不存在 → 铺设 OptiFine 选项
读 config/defaultoptionsof.txt 写 optionsof.txt,不过滤任何行(:242-258)。
3. 铺设两份 localconfig 定义文件
若不存在则从 jar 内复制:
| 目标路径 | jar 内来源 |
|---|---|
config/localconfig.txt |
/assets/defaultkeys/default-localconfig.txt |
config/localconfig-example.txt |
/assets/defaultkeys/example-localconfig.txt |
复制用 IOUtils.copy + try-with-resources(:60-68、:71-79),失败只 printStackTrace,不中断启动。
注意 config/localconfig.txt 在首次启动时会被空模板覆盖创建(因为不存在),打包作者之后往里加的条目才生效。
4. config/modpack-update 存在与否 → 恢复 / 备份
这是整个模组的核心分支(:80-93):
| 条件 | 行为 |
|---|---|
存在 config/modpack-update |
restoreLocalConfig() → 成功后 Files.delete 删除该文件;失败则保留并记 error(提示"手工删除,否则会一直回滚到这里") |
| 不存在 | backupLocalConfig() —— 每次正常启动都把玩家当前配置备份进 localconfig.cfg |
即:模组包更新时打包作者在 config/ 放一个空的 modpack-update 文件,玩家下次启动就会把 localconfig.txt 里列出的那些"玩家自定义项"还原成更新前的值,其余配置跟随模组包更新。
涉及的全部文件路径
| 路径 | 位置 | 作用 |
|---|---|---|
options.txt |
游戏根 | Minecraft 主配置(由 config/defaultoptions.txt 生成) |
optionsof.txt |
游戏根 | OptiFine 配置(由 config/defaultoptionsof.txt 生成) |
config/defaultoptions.txt |
config | 打包作者下发的默认选项模板 |
config/defaultoptionsof.txt |
config | 打包作者下发的默认 OptiFine 模板 |
config/defaultkeys.txt |
config | 打包作者下发的默认键位 |
config/localconfig.txt |
config | 声明"哪些配置项要保护玩家本地修改" |
config/localconfig-example.txt |
config | 常见 mod 的现成预设(首次启动自动生成) |
config/modpack-update |
config | 哨兵文件,存在即触发恢复 |
localconfig.cfg |
游戏根 | 玩家本地值快照,自动生成,勿手改 |
knownkeys.txt |
游戏根 | 已下发过的键位记录 |
⚠️ 注意
localconfig.cfg与knownkeys.txt在游戏根目录而非config/下(EventHandler.java:102、:157、:373),容易与直觉不符。
限制
- 全部为无条件覆盖式逻辑,没有任何"仅首次"的守卫;
options.txt是否存在是唯一判据。 - 三处
IOException分支只printStackTrace或记 error,从不阻止游戏启动——配置失败会静默继续。 - 备份
localconfig.cfg每次启动都重写(PrintWriter截断),内容完全由当前config/下实际文件解析而来。
相关条目
- 默认键位下发 -
knownkeys.txt与keyCodeDefault逻辑 - localconfig 保护机制 - 备份 / 恢复的具体格式处理
- Core Mod 类转换器 - 本方法的注入来源
- /defaultconfigs 指令 - 手动触发这些写入的指令