GUI 缩放变体

基本信息

属性 值
实现类 lumien.custommainmenu.configuration.Config / GuiEntry
判定来源 玩家游戏选项里的 GUI Scale(Minecraft.gameSettings.guiScale)
档位数 5(含标准档)

机制

同一界面名可以有多份配置文件,靠文件名后缀区分档位(GuiConfig.java:57-71):

后缀 guiScale 存到 GuiEntry 的字段 玩家 GUI Scale 取值
_small 1 small 1(小)
_normal 2 normal 2(大)
_large 3 large 3(超大)
_auto 0 auto 0(自动)
无后缀 -1 standard 兜底,任何档位都没配就用它

后缀在比对后会从界面名中剥掉(name.replace("_small", "") 等),所以 5 个文件共用同一个界面名 mainmenu。

选中逻辑

GuiEntry.getCurrentGUI()(GuiEntry.java:13-26)按严格相等逐档匹配:

guiScale == 0 → auto    非 null 则用
guiScale == 1 → small   非 null 则用
guiScale == 2 → normal  非 null 则用
guiScale == 3 → large   非 null 则用
否则 → standard

⚠️ 每一档都是"配了才用",没配就一路落到 standard,不做逐级降级。 ⚠️ 玩家把 GUI Scale 设成 4(原版允许 0–4)时,4 个变体档位全部不匹配,直接用标准档。 ⚠️ Config.getGUI(name) 先 this.guis.get(name) 再 .getCurrentGUI(),名字不存在时空指针(Config.java:29)。

与原版 GUI Scale 的区别

⚠️ 变体只改变"用哪份配置",不改变 GUI 的实际缩放倍数。 MC 的 guiScale 缩放本身由原版在 GuiScreen 层面完成,CMM 只是按该数值选文件。所以 _large 变体是"另一套排版",而不是"把同一套排版放大"。

实践

config/CustomMainMenu/
├── mainmenu.json           # 兜底(GUI Scale = 4 或其它未覆盖值)
├── mainmenu_small.json     # GUI Scale = 1
└── mainmenu_large.json     # GUI Scale = 3

小分辨率窗口用 _small 精简布局,大窗口用 _large 放更多信息。

相关条目