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。