打开界面(openGui)
基本信息
| 属性 | 值 |
|---|---|
type 值 |
openGui(equalsIgnoreCase,大小写不敏感) |
| 实现类 | lumien.custommainmenu.lib.actions.ActionOpenGUI |
| 参数 | gui(字符串) |
| 分发点 | GuiConfig.getWantedAction(GuiConfig.java:402-404) |
核心差异
本 mod 里唯一能跳到别的界面的动作。其余 7 个动作要么离开游戏(quit)、要么调用外部程序(openLink / openFolder)、要么改自身状态(refresh / loadWorld / connectToServer / sendIMC)。openGui 是纯游戏内导航。
两种命名空间
| 前缀 | 解析方式 |
|---|---|
custom. |
截掉 7 字符后交给 CustomMainMenu.INSTANCE.config.getGUI(名字),即跳到本 mod 的另一个自定义界面 |
| 无前缀 | 走下面的内置表,实例化原版/FML/其他 mod 的 GUI 类 |
⚠️ custom. 分支不做判空:名字写错或对应 .json 不存在时 Config.getGUI 会在 this.guis.get(name) 上空指针(Config.java:29)。
⚠️ 名字全部不匹配时 gui 保持 null,函数静默返回,点击无任何反应也不报错(ActionOpenGUI.java:73-76)。
内置目标表
gui 值 |
打开的界面 | 备注 |
|---|---|---|
mods |
GuiModList(FML 模组列表) |
|
singleplayer |
GuiSelectWorld |
|
singleplayer.createworld |
GuiCreateWorld |
|
multiplayer |
GuiMultiplayer |
|
options |
GuiOptions |
|
languages |
GuiLanguage |
|
options.resourcepacks |
GuiScreenResourcePacks |
|
options.ressourcepacks |
同上 | ⚠️ 拼写错误的兼容别名(ActionOpenGUI.java:60-61),与正确拼写并存 |
options.shaderpacks |
见下方三方分支 | |
options.snooper |
GuiSnooper |
|
options.sounds |
GuiScreenOptionsSounds |
|
options.broadcast |
GuiStreamOptions / GuiStreamUnavailable |
先 saveOptions(),再按流可用性二选一(:67-75) |
options.video |
见下方三方分支 | |
options.controls |
GuiControls |
|
options.multiplayer |
ScreenChatOptions |
原版多人游戏聊天选项 |
mainmenu |
new GuiMainMenu() |
⚠️ 仓库自带的
mainmenu.schema.json的gui枚举漏了 4 个代码里真实支持的键(options.ressourcepacks、options.shaderpacks、options.broadcast、mainmenu),也没说明custom.前缀约定。
反射式三方适配
三处按 Loader.isModLoaded 探测后用 Class.forName 反射构造,任何异常都被包成 RuntimeException 抛出(不降级):
| 触发键 | 探测 mod | 反射目标 |
|---|---|---|
options.shaderpacks |
angelica |
net.coderbot.iris.gui.screen.ShaderPackScreen |
options.shaderpacks |
swansong |
com.ventooth.swansong.gui.GuiShaders |
options.video |
angelica |
me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI |
options.video |
notfine |
jss.notfine.gui.GuiCustomMenu(需拼出 OptionPage 的 4 个子页数组) |
三者皆无时回退到 GuiScreenResourcePacks(shaderpacks)或 GuiVideoSettings(video)。
⚠️ angelica 优先于 swansong / notfine,两个 mod 同装时后者的选项页永远不会被打开(if / else if 链,ActionOpenGUI.java:52-121)。
使用场景
自定义主菜单里绝大多数按钮的默认动作。自定义子界面之间跳转必须用 custom.<文件名>,文件名是 .json 去掉扩展名后的名字(见配置文件格式)。
相关条目
- 重载配置(refresh) - 同样会
displayGuiScreen,但目标是重建后的主菜单 - 加载世界(loadWorld) - 直接进入存档,跳过选关界面
- 配置文件格式 -
action字段写法