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 放更多信息。