/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,没有中文本地化文件。

相关条目