Darkerer
[!INFO] Git Commit:
39eb9b8| Updated: 2026-10-01
modid:darkerer(来自 Darkerer.java:14 public static final String MODID = "darkerer";,
由 @Mod(modid = Darkerer.MODID, ...) 在 Darkerer.java:9 引用)
显示名: Darkerer(@Mod(name = "Darkerer"),Darkerer.java:10;
gradle.properties 的 modName = Darkerer,一致)
mcmod.info 描述: “Makes the world a lot darker”
作者: glowredman;致谢: “lumien (author of Hardcore Darkness)”
网址: https://github.com/glowredman/Darkerer
现状:纯客户端光照改写 coremod,零方块 / 物品 / 实体
10 个 Java 文件里:
| 项目 | 数量 |
|---|---|
| 方块 / 物品 / 实体 / TileEntity | 0 / 0 / 0 / 0 |
| 指令 | 0 |
| 配置项 | 6(5 个标量 + 1 个 int 列表) |
| 客户端 mixin | 3 个 early(无条件加载) |
| 客户端 late mixin | 1 个(条件加载,仅装 TwilightForest 时) |
| 维度专属处理 | 3(Nether / End / TwilightForest) |
coremod / 依赖
@Mod 声明(Darkerer.java:5-11):
acceptedMinecraftVersions = "[1.7.10]"dependencies = "required-after:gtnhlib@[0.6.3,);required-after:unimixins"
dependencies.gradle 中 GTNHLib:0.6.35:dev 是 implementation(编译+运行时),
twilightforest:2.7.8:dev 是 devOnlyNonPublishable(不随 mod 发布),
NotEnoughItems 是 runtimeOnlyNonPublishable(开发期运行时)。
启动方式是 GTNH 的 early mixin 通道:DarkererCore implements IFMLLoadingPlugin, IEarlyMixinLoader,
@MCVersion("1.7.10") + @Name("Darkerer") + @TransformerExclusions("glowredman.darkerer.DarkererCore")
(DarkererCore.java:20-23)。它自身不含任何 IFMLLoadingPlugin 的 setup class
(四个 hook 全返回 null,DarkererCore.java:37-58)。
⚠️
mixins.darkerer.json与mixins.darkerer.late.json存在但没有mixins/client/server数组,只有package等元信息 (src/main/resources/mixins.darkerer*.json)。实际 mixin 列表全部由 Java 代码以编程方式提供。mixins.darkerer.early.json则带三个全空数组——同样是模板残留。
加载的 mixin 一览
| Mixin | 目标类 | 通道 | 加载条件 | 源码 |
|---|---|---|---|---|
MixinEntityRenderer |
EntityRenderer |
early | 仅 Side.CLIENT |
DarkererCore.java:68 |
MixinWorld |
World |
early | 仅 Side.CLIENT |
同上 |
MixinWorldProviderHell |
WorldProviderHell |
early | 仅 Side.CLIENT |
同上 |
MixinWorldProviderTwilightForest |
WorldProviderTwilightForest |
late | 客户端 且 loadedMods.contains("TwilightForest") |
DarkererLateMixins.java:20-22 |
服务端 getMixins 返回 Collections.emptyList()(DarkererCore.java:70),
所以服务端完全不受影响。
游戏内内容 / 机制列表
- 配置项 -
mode四值枚举 + 5 个开关;无 GUI,只能手改config/darkerer.cfg - 夜间压暗机制 - 三层压暗(天光上下限 → lightmap 常量压缩 → 去蓝天光)+ 下界 / 末地 / 暮色森林三处专属处理
本 mod 没有的内容(源码核实)
src/main/java 下 registerBlock、registerItem、registerEntity、registerTileEntity、
addCommand、keyBinding、Enchantment、Potion、BiomeGen、WorldProvider 的
注册(GameRegistry.registerWorldProvider 一类)各 0 命中;
Darkerer.java 整个类只有 @Mod 注解与 MODID 常量,没有任何 @Mod.EventHandler——
即没有 init 阶段回调,全部工作靠 coremod + 事件总线完成。
src/main/resources 无贴图 / 模型 / 语言文件。
DarkererEventHandler用 GTNHLib 的@EventBusSubscriber(side = Side.CLIENT)自动注册 (DarkererEventHandler.java:15),无需手动register。
已知源码问题
- 夜视药水颜色无条件被改(最严重的副作用泄漏):
adjustNightVisionColor(MixinEntityRenderer.java:56-69)是本文件里唯一没有DarkererCore.enabled判断的 注入点。即使mode = DISABLED、或当前维度在dimBlocklist里、乃至服务端不加载, 只要客户端加载了本 mod,夜视颜色就被c * 0.9f + 0.1f压暗(3 通道各压一次)。 与相邻的modifyMin/modifyMax/darkenEnd/modifyLightmap都带DarkererCore.enabled ? ... : original形成鲜明对比,说明是漏写。 ONLY_INSIDE注释与实现不符:DarkererConfig.java:11的注释称 “a small amount of light remains at the surface”,但实现只是把天光 RGB 统一到red + 25(上限 25/255),而天光的亮度上下限在ONLY_INSIDE下完全不变 (MixinWorld.java:28-35、33-34走default: return original)。 参见 夜间压暗机制 第 2 层的说明。- 注入点全靠常量字面量定位:
MixinWorld.java:20、39、MixinEntityRenderer.java:28-29、37-38、MixinWorldProviderTwilightForest.java:15均用@At(args = "floatValue=0.xx")定位原版字节码里的ldc常量。 这类定位在原版改动同名字面量时会静默失效或炸expect断言,是该实现的结构性脆弱点。 - 配置无热重载:
DarkererConfig的字段在 coremod static 块读一次 (DarkererCore.java:30),未订阅ConfigChangedEvent,也未声明guiFactory。 改配置必须重启客户端。 - 两个 mixin json 缺
mixins数组:见上,是 GTNH 脚手架残留。 - 无 log / 无降级提示:
DarkererConfig之外没有任何FMLLog输出。 当twilightforest未安装时,darkTwilightForest = true会静默无效—— late mixin 的getMixins直接返回空列表(DarkererLateMixins.java:23),没有 warning。