Light Color Registry

基本信息

com.mitchej123.supernova.api.LightColorRegistry —— 方块 → 彩色光照的核心注册表。

查询 API

方法 行 返回
hasExplicitEntry(Block) 61 是否为显式注册(非默认推导)
hasExplicitEntry(int blockId) 70 同上,按 id
isMetaSensitive(int blockId) 75 meta 是否影响颜色
isPositional(Block) 80 是否「位置相关」(如岩浆、火把)
isPositional(int blockId) 85 同上,按 id
register(Block, int meta, int packedColor) 97 写入注册表

关键实现细节

第 39 行用反射 + 声明类比对判断某方块是否覆写了 getLightValue:

return type.getMethod("getLightValue", IBlockAccess.class, int.class, int.class, int.class)
            .getDeclaringClass() != Block.class;

getDeclaringClass() != Block.class —— 只有真正覆写该方法的类 (而非继承 Block 默认实现)才算位置相关。 反射按 (IBlockAccess, int, int, int) 参数签名查找。

位置相关(isPositional)的意义

岩浆、火把这类方块的光照随位置变化(不是固定色), 不能简单查注册表得一个静态颜色,必须实时计算。

meta 敏感性

供 Light Registries 的 metaAffectsLight(int) 与 rebuildAll() 使用, 避免不必要的重算。

配套注册工具

见 ColorRegistrationHelper —— 提供 registerBlock / registerPerMeta / registerDyed 等便捷封装。

相关条目

源码

  • src/main/java/com/mitchej123/supernova/api/LightColorRegistry.java