配置项(ModularUIConfig)
基本信息
| 属性 | 值 |
|---|---|
| 类 | com.cleanroommc.modularui.ModularUIConfig(ModularUIConfig.java:8) |
| 注解 | @Config(modid = ModularUI.ID)(:7)→ 配置文件 config/modularui2.cfg |
| 注册 | ConfigurationManager.registerConfig(ModularUIConfig.class)(CommonProxy.java:34),捕获 ConfigException 后于 :36 抛 RuntimeException |
| 生效配置项 | 11(另有 1 个死配置) |
| 语言文件 | src/main/resources/assets/modularui2/lang/en_US.lang:42-63 |
| GUI 配置界面 | guiFactory = "com.cleanroommc.modularui.config.ModularUIGuiConfigFactory"(ModularUI.java:18) |
功能
12 个配置字段,其中 11 个有实际读取方
全部为 public static 字段,由 GTNHLib 的 @Config 注解反射生成配置文件。
⚠️ defaultScrollSpeed 是死配置(详见下节),因此:
| 统计 | 值 |
|---|---|
| 声明的配置字段 | 12 |
| 有实际读取方的配置项 | 11 |
| 死配置(有 lang 键与范围约束,但 0 读取方) | 1(defaultScrollSpeed) |
| # | 字段 | 行 | 类型 | 默认值 | 约束 | 读取方数 |
|---|---|---|---|---|---|---|
| 1 | defaultScrollSpeed |
:13 |
int |
30 |
@Config.RangeInt(min = 1, max = 100) |
0(死配置) |
| 2 | smoothProgressBar |
:17 |
boolean |
false |
—— | 1 |
| 3 | tooltipPos |
:22 |
RichTooltip.Pos |
NEXT_TO_MOUSE |
8 个枚举值 | 1 |
| 4 | escRestoreLastText |
:26 |
boolean |
false |
—— | 1 |
| 5 | showSlotOverlay |
:30 |
boolean |
true |
—— | 2 |
| 6 | guiDebugMode |
:34 |
boolean |
false |
—— | 6 |
| 7 | useDarkThemeByDefault |
:38 |
boolean |
false |
—— | 1(ThemeAPI.java:69) |
| 8 | debugTextColor |
:42 |
String |
"#FFAAAAAA" |
支持颜色名与 # 前缀 Hex |
1 |
| 9 | debugOutlineColor |
:46 |
String |
"#DCB42873" |
同上 | 1 |
| 10 | enableTestGuis |
:51 |
boolean |
ModularUI.isDevEnv |
@Config.RequiresMcRestart |
3,见下 |
| 11 | enableTestOverlays |
:56 |
boolean |
false |
@Config.RequiresMcRestart |
1 |
「读取方数」= grep -rn 'ModularUIConfig\.<字段名>' --include=*.java src/ 的命中数。
死配置:defaultScrollSpeed
ModularUIConfig.java:13 声明了 public static int defaultScrollSpeed = 30;,
配了范围约束(:12)和语言键(:10、en_US.lang:42-43),
但全仓没有任何代码读取它。三种独立验证:
# A. 全仓搜标识符(排除 .git):仅声明处 1 处命中
grep -rn 'defaultScrollSpeed' . --exclude-dir=.git
→ ./src/main/java/com/cleanroommc/modularui/ModularUIConfig.java:13
# B. 搜所有命名变体
grep -rniE 'default_scroll|scrollSpeed|scroll_speed|defaultScroll' . --exclude-dir=.git
# C. 搜真正消费滚动距离的代码
grep -rniE 'scroll' --include=*.java src/main/java | grep -iE 'amount|distance|pixels|speed'
→ ScrollArea.java:117 int scrollAmount = (int) Math.copySign(data.getScrollSpeed(), scroll);
实际生效的滚动速度是每个滚动区自己的字段:
| 位置 | 内容 |
|---|---|
widget/scroll/ScrollData.java:60 |
private int scrollSpeed = 30; |
widget/scroll/ScrollData.java:92-94 |
getScrollSpeed() |
widget/scroll/ScrollData.java:96-98 |
setScrollSpeed(int) |
widget/scroll/ScrollArea.java:117 |
消费点:data.getScrollSpeed() |
即 ModularUIConfig.defaultScrollSpeed 是 ScrollData.scrollSpeed 默认值
30 的硬编码重复,改配置文件不会改变任何行为。
enableTestGuis 是唯一的「环境相关」项
默认值不是字面量,而是 ModularUI.isDevEnv(ModularUIConfig.java:51):
// ModularUI.java:43-44
public static final boolean isTestEnv = Launch.blackboard == null;
public static final boolean isDevEnv = isTestEnv || (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
即:开发/反混淆环境下默认 true,生产环境默认 false。
它控制 3 处逻辑(grep -rn 'enableTestGuis' src/main/java):
| 读取方 | 行 | 后果 |
|---|---|---|
CommonProxy.java:45 |
:45-48 |
注册 TestEventHandler 并调 TestEventHandler.preInit() |
ClientProxy.java:75 |
:75-78 |
注册测试热键(小键盘 4) |
ClientProxy.java:185 |
:185 |
监听该热键打开 Baubles 测试界面 |
TestEventHandler.preInit()(test/TestEventHandler.java:184-189)是全仓唯一的
方块 / 物品 / TileEntity 注册点:
TestBlock.testBlock.setBlockName("test_block").setBlockTextureName("stone");
GameRegistry.registerBlock(TestBlock.testBlock, "test_block"); // :185
GameRegistry.registerTileEntity(TestTile.class, "test_block"); // :186
TestItem.testItem.setUnlocalizedName("test_item").setTextureName("diamond");
GameRegistry.registerItem(TestItem.testItem, "test_item"); // :188
⚠️ 这 3 个注册是整模组唯一的方块/物品/TileEntity 注册,且默认关闭 (生产环境
enableTestGuis = false)。
一个被注释掉的配置项(死代码)
ModularUIConfig.java:58-60 有 3 行被注释:
//@Config.LangKey("modularui2.config.use_rich_tooltips")
//@Config.Comment("If true, vanilla tooltip will be replaced with MUI's RichTooltip")
//public static boolean replaceVanillaTooltips = false;
对应的语言键也被注释掉(en_US.lang:64-65)。按死代码处理,不计入 11 个生效项。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 生效配置项数 | 11(另有 1 个死配置 defaultScrollSpeed) |
本表 |
| 默认开启的配置项 | 2(showSlotOverlay、enableTestGuis〔仅开发环境〕) |
:30、:51 |
| 需要重启生效的配置项 | 2(enableTestGuis、enableTestOverlays) |
:49、:54 |
defaultScrollSpeed 的声明范围 |
1–100(约束存在但无效) | :12 |
| 实际生效的滚动速度 | 30(ScrollData.scrollSpeed,逐滚动区) |
widget/scroll/ScrollData.java:60 |
交互
| 触发 | 行为 |
|---|---|
| 模组 preInit | ConfigurationManager.registerConfig 读 config/modularui2.cfg(CommonProxy.java:34) |
| 游戏内设置界面 | ModularUIGuiConfigFactory 提供 MUI2 风格配置 GUI(ModularUI.java:18 的 guiFactory) |
改 enableTestGuis / enableTestOverlays |
需重启(@Config.RequiresMcRestart) |
| 客户端连服务器 | SyncConfig 封包(network/packets/SyncConfig.java)同步配置 |
config/ 包共 8 个文件提供配置 GUI 的自绘实现:
ModularUIGuiConfig.java、ModularUIGuiConfigFactory.java、Config.java、
ConfigPanel.java、Value.java、ValueBoolean.java、ValueInt.java、ValueDrawable.java。
相关条目
- Mixin 与底层补丁 -
SyncConfig封包依赖的底层补丁 - 部件主题 -
useDarkThemeByDefault影响主题兜底