重载配置(refresh)

基本信息

属性 值
type 值 refresh(大小写不敏感)
实现类 lumien.custommainmenu.lib.actions.ActionRefresh
参数 无
分发点 GuiConfig.getWantedAction(GuiConfig.java:408-410)

核心差异

唯一会重建整个配置系统的动作。它不是"刷新界面"而是"重新读盘所有 .json",且可顺带刷新游戏资源。仓库默认配置给它配了一个 20×20 的图标按钮(贴图取自 custommainmenu:textures/gui/buttons.png)。

执行流程

ActionRefresh.perform(ActionRefresh.java:12-20):

1. CustomMainMenu.INSTANCE.reload()          // 重读 <mc>/config/CustomMainMenu/*.json
2. if (Keyboard.isKeyDown(42))               // 按住 LSHIFT 才触发
       mc.refreshResources()
3. mc.displayGuiScreen(new GuiMainMenu())     // 回到主菜单
要点 说明
第 2 步 Keyboard.isKeyDown(42) 是运行时轮询,不是"组合键动作"——松手就来不及。含义是"点按钮时顺便按住左 Shift 就刷资源"
第 3 步 目标写死成原版 new GuiMainMenu();随即被 CMMEventHandler.openGui 换成重建后的自定义主菜单
失败回滚 reload() 内部捕获异常并恢复旧 config(CustomMainMenu.java:76-81),见重载与错误处理

等价的键盘快捷键

GuiCustom.updateScreen 里有一个每 tick 轮询的等价快捷键(GuiCustom.java:458-464):

if (Keyboard.isKeyDown(29) && Keyboard.isKeyDown(19)) {
    CustomMainMenu.INSTANCE.reload();
    if (Keyboard.isKeyDown(42)) mc.refreshResources();
    mc.displayGuiScreen(new GuiMainMenu());
}

即同时按住 LWJGL 键码 29 与 19(等价于 Ctrl+Shift)即可重载,再叠加 42(LSHIFT)则同时刷资源。详见重载配置热键。

⚠️ 轮询写法没有边沿检测,按键期间会每 tick 重复执行完整重载(重读所有 JSON)。而 ActionRefresh 只在点击瞬间执行一次。

与 sendIMC 的组合用法

刷新后需要通知其他 mod(例如让某个 mod 也重读自己的配置)时,可让同一个按钮先 sendIMC——但一个按钮只能配一个 action,要串联需靠目标 mod 订阅 ActionIMCEvent 后自行判断。

相关条目