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)。

相关条目

源码

  • src/main/java/com/mitchej123/supernova/storage/AbstractSupernovaDataManager.java
  • src/main/java/com/mitchej123/supernova/storage/SupernovaDataManager.java
  • src/main/java/com/mitchej123/supernova/storage/SupernovaSkyDataManager.java
  • 注册调用:src/main/java/com/mitchej123/supernova/CommonProxy.java:33-34