配置项
基本信息
| 属性 | 值 |
|---|---|
| 配置类 | glowredman.darkerer.DarkererConfig(GTNHLib @Config(modid = Darkerer.MODID)) |
| 注册时机 | DarkererCore 的 static 块,仅 Side.CLIENT(DarkererCore.java:27-35) |
| 加载器 | com.gtnewhorizon.gtnhlib.config.ConfigurationManager.registerConfig(...) |
| 配置文件 | 由 GTNHLib 依据 modid 决定,即 config/darkerer.cfg |
| GUI | 无(@Mod 未声明 guiFactory),只能手改 cfg 文件 |
| 热重载 | 无(未订阅 ConfigChangedEvent);读一次存在静态字段里 |
配置在 coremod 的 static 初始化阶段注册,早于
Darkerer主类被 FML 实例化。 这也是 mixin 能在 preInit 之前就读到配置的原因。
配置项列表
全部来自 DarkererConfig.java,默认值是源码实读的:
| 配置键 | 类型 | 默认值 | 源码注释 | 源码 |
|---|---|---|---|---|
mode |
Mode 枚举 |
EVERYWHERE |
“How Darkerer should behave” + 四个模式的说明 | DarkererConfig.java:8-15 |
darkNether |
boolean | true |
“Whether or not the Nether should be dark” | DarkererConfig.java:17-19 |
darkEnd |
boolean | false |
“Whether or not the End should be dark” | DarkererConfig.java:21-23 |
darkTwilightForest |
boolean | false |
“Whether or not the Twilight Forest should be dark” | DarkererConfig.java:25-27 |
removeBlueSkyLight |
boolean | true |
“Attempts to remove the blue sky light that occurs when using mode EVERYWHERE or MOON_PHASE” | DarkererConfig.java:29-31 |
dimBlocklist |
int 列表 | {}(空) |
“A list of dimension ids in which Darkerer will be completely disabled” | DarkererConfig.java:33-35 |
mode 的四个取值
枚举定义在 Mode.java:3-7。源码注释里的原文说明(DarkererConfig.java:10-12):
| 枚举值 | 注释原文 | 实际实现 |
|---|---|---|
EVERYWHERE |
“complete darkness at night, except near block light sources (torches, lava, etc.)” | 见 夜间压暗机制 |
ONLY_INSIDE |
“a small amount of light remains at the surface, even during the night” | 同上 |
MOON_PHASE |
“like ONLY_INSIDE but the remaining light depends on the moon phase” | 同上 |
DISABLED |
“completely disabled like vanilla” | DarkererCore.enabled 被置 false,mixin 全部走原值 |
⚠️ 注释与实现有落差:
ONLY_INSIDE注释说的是"地表留一点光",但代码里它只对 天光的红色分量做Math.min(0xFF, red + 25)(MixinEntityRenderer.java:86-88), 而MixinWorld的天光上下限在ONLY_INSIDE分支下完全不改(MixinWorld.java:28-35的default: return original)。即ONLY_INSIDE并不会降低夜间亮度上限, 只是把天光色往无色方向偏。
dimBlocklist 的匹配方式
DarkererEventHandler.onClientTick 用 ArrayUtils.contains(DarkererConfig.dimBlocklist, player.dimension)
判断,命中即禁用(DarkererEventHandler.java:25-26)。即按 dimension id 整数屏蔽,
不是按维度名。该检查每 client tick 重算一次 DarkererCore.enabled(END 阶段)。