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