重载配置(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 后自行判断。
相关条目
- 重载与错误处理 - 失败回滚与红字提示
- 重载配置热键 - 键盘等价路径
- 发送 IMC(sendIMC) - 跨 mod 通知通道