/defaultconfigs 指令
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | /defaultconfigs(CommandDefaultOptions.java:16) |
| 用法串 | /defaultconfigs (saveAll|saveKeys|saveOptions|createUpdateFile) |
| 权限等级 | 0(getRequiredPermissionLevel,:26)——任何玩家都能用 |
| 注册方式 | ClientCommandHandler.instance.registerCommand(...)(DefaultKeys.java:30) |
| 注册条件 | event.getSide().isClient() —— 纯客户端指令 |
| 参数个数 | 必须恰好 1 个,否则 WrongUsageException |
四个子命令
| 子命令 | 作用 |
|---|---|
saveAll |
= saveKeys + saveOptions |
saveKeys |
写 config/defaultkeys.txt;成功则立即重新加载 |
saveOptions |
写 config/defaultoptions.txt 与 config/defaultoptionsof.txt |
createUpdateFile |
创建哨兵文件,触发下次启动的保护恢复 |
各子命令细节
saveKeys
if (DefaultKeys.instance.saveDefaultMappings()) {
→ "saveKeys.success"
DefaultKeys.instance.reloadDefaultMappings(); // 成功后立即重载
} else {
→ "saveKeys.failure"
}
saveDefaultMappings 会先调 gameSettings.saveOptions() 把内存中的键位刷进 options.txt,再遍历 gameSettings.keyBindings 逐条写 key_<description>:<keyCode>。
saveOptions
if (instance.saveDefaultOptions() && instance.saveDefaultOptionsOptiFine()) → success
else → failure
saveDefaultOptionsOptiFine() 前置检查 FMLClientHandler.instance().hasOptifine(),未安装 OptiFine 时直接 return true(视为成功且不写任何文件),避免在没有 OptiFine 的客户端上创建 optionsof.txt。
createUpdateFile
new File(Minecraft.getMinecraft().mcDataDir, "modpack-update").createNewFile();
成功后提示玩家该文件应当随模组包一起分发并永久保留。
⚠️ 路径不一致缺陷
| 位置 | 路径 |
|---|---|
创建(CommandDefaultOptions.java:36) |
<游戏根>/modpack-update |
检测(EventHandler.java:80) |
<游戏根>/config/modpack-update |
指令创建的文件位于游戏根目录,而启动时检测的是 config/ 下的同名文件——两者不是同一个路径。 结果是 /defaultconfigs createUpdateFile 生成的哨兵文件永远不会被 preStartGame 识别,保护恢复流程无法由该指令触发。
lang 文案(en_US.lang:2)写的是 “created inside the config directory”,说明本意就是 config/,即创建端的路径写错了。
限制
- 客户端指令,在多人服务器上只对本地玩家生效,且不会同步到服务端。
- 权限等级 0 且无任何额外校验,任何玩家都能执行并覆盖打包作者下发的默认配置。
addTabCompletionOptions只提供 4 个子命令补全,args.length < 2时生效。- 所有反馈都是
ChatComponentTranslation,依赖assets/defaultkeys/lang/en_US.lang中的 6 个 key,没有中文本地化文件。
相关条目
- 启动前文件铺设 - 指令所写文件在启动时的消费者
- 默认键位下发 -
saveKeys写入的内容 - localconfig 保护机制 -
createUpdateFile想触发的机制