Data Managers
基本信息
storage/ 下三个类:ChunkAPI 的两个 RGB 数据管理器及其共享基类。
Supernova Data Manager 覆盖的是方块光一侧;
天光一侧 SupernovaSkyDataManager 原先无条目。
| 类 | 文件 | 行 | 可见性 |
|---|---|---|---|
AbstractSupernovaDataManager |
storage/AbstractSupernovaDataManager.java |
481 | abstract class(包私有) |
SupernovaDataManager |
storage/SupernovaDataManager.java |
37 | public final class |
SupernovaSkyDataManager |
storage/SupernovaSkyDataManager.java |
36 | public final class |
两个实例的差异
| 项 | SupernovaDataManager |
SupernovaSkyDataManager |
|---|---|---|
| ChunkAPI id | "rgb_blocklight" |
"rgb_skylight" |
sky 标志 |
false |
true |
| 卸载提示 | "Supernova RGB block light data will be lost. Vanilla block light will be recalculated." |
"Supernova RGB sky light data will be lost. Vanilla sky light will be recalculated." |
| R 通道取自 | chunk.getBlockNibblesR() |
chunk.getSkyNibblesR() |
| G / B | getBlockNibblesG/B() |
getSkyNibblesG/B() |
两者都是单例 + 私有构造,各暴露 public static void register(),
内部调 DataRegistry.registerDataManager(INSTANCE, 0)(优先级参数 0)。
调用点在 CommonProxy.java:33-34,成对调用:
SupernovaDataManager.register();
SupernovaSkyDataManager.register();
实现的三个 ChunkAPI 接口
AbstractSupernovaDataManager implements
DataManager.ChunkDataManager、.PacketDataManager、.CubicPacketDataManager,
即同时支持区块存档、封包同步与 cubic-chunks 封包。
存档格式
| 常量 | 值 | 作用 |
|---|---|---|
LIGHT_VERSION |
2 |
磁盘布局版本;区块只有存的值匹配才加载其光照 |
NBT_VERSION |
"v" |
版本标记键 |
NBT_SCALAR |
"sc" |
标量 ↔ RGB 转换标记 |
NBT_MIN_SECTION |
"ms" |
section 下界 |
NBT_SCALAR 的用途写在类注释:存档格式与运行模式不匹配时做
标量↔RGB 转换。NBT_MIN_SECTION 持久化 section 下界,
使下界变更时丢弃光照而不是整体垂直平移。
版本标记缺失或过期 → 强制重新计算光照。
封包尺寸
| 常量 | 值 |
|---|---|
MAX_PACKET_BYTES |
16 * (1 + 3 * SWMRNibbleArray.ARRAY_SIZE) = 16 * (1 + 3 * 2048) = 98 320 |
MAX_PACKET_BYTES_CUBIC |
1 + 3 * 2048 = 6 145 |
即:1 字节标志 + 每 section 三通道 × 2048 字节 × 最多 16 个 section。
通道标志位
| 常量 | 值 | 含义 |
|---|---|---|
FLAG_R / FLAG_G / FLAG_B |
1 / 2 / 4 |
该通道有半字节数组 |
FLAG_R_DARK / FLAG_G_DARK / FLAG_B_DARK |
8 / 16 / 32 |
该通道为暗,无数据 |
数组键前缀:状态 {"sR","sG","sB"},section {"R","G","B"}。
PACKET_SCRATCH 是 ThreadLocal<byte[]>(大小 ARRAY_SIZE),避免每次封包分配。
类注释另注明:Chunk-level storage avoids empty per-section compounds
(区块级存储,避免每 section 一个空 compound)。
相关条目
- Supernova Data Manager — 方块光一侧
- SWMRNibbleArray —
ARRAY_SIZE定义处 - Supernova Chunk — 三个
getNibblesX访问器 - Supernova —
CommonProxy调用点
源码
src/main/java/com/mitchej123/supernova/storage/AbstractSupernovaDataManager.javasrc/main/java/com/mitchej123/supernova/storage/SupernovaDataManager.javasrc/main/java/com/mitchej123/supernova/storage/SupernovaSkyDataManager.java- 注册调用:
src/main/java/com/mitchej123/supernova/CommonProxy.java:33-34