Constants
基本信息
| 属性 | 值 |
|---|---|
| 类名 | com.gtnewhorizons.neid.Constants |
| 角色 | NEID 全部硬编码上限的唯一定义点(vanilla vs NEID 数值并列) |
| 调用方 | 所有 Mixin / ASM transformer / Hooks 通过静态字段引用 |
方块 ID 上限
| 常量 | 值 | 说明 |
|---|---|---|
BITS_PER_ID |
16 |
NEID 方块 ID 总位数(short 容器) |
VANILLA_BITS_PER_ID |
12 |
原版方块 ID 总位数 |
MAX_BLOCK_ID |
32767 |
NEID 实际可用最大方块 ID((1 << (BITS_PER_ID - 1)) - 1,1 位预留给符号) |
VANILLA_MAX_BLOCK_ID |
4095 |
原版最大方块 ID |
BLOCK_ID_MASK |
0xFFFF |
NEID 方块 ID 位掩码(16 位) |
VANILLA_BLOCK_ID_MASK |
4095 |
原版方块 ID 位掩码 |
Metadata 上限
| 常量 | 值 | 说明 |
|---|---|---|
BITS_PER_METADATA |
16 |
NEID Metadata 总位数 |
VANILLA_BITS_PER_METADATA |
4 |
原版 Metadata 总位数 |
METADATA_COUNT |
65536 |
NEID Metadata 数量 (1 << 16) |
VANILLA_METADATA_COUNT |
16 |
原版 Metadata 数量 |
METADATA_MASK |
0xFFFF |
NEID Metadata 位掩码 |
区块 / EBS 字节尺寸
| 常量 | 值 | 说明 |
|---|---|---|
BLOCKS_PER_EBS |
4096 |
一个 ExtendedBlockStorage 容纳的方块数(与原版相同) |
BYTES_PER_EBS |
20480 |
NEID 单 EBS 总字节 (16 LSB + 0 MSB + 16 meta + 4 sky + 4 block) |
VANILLA_BYTES_PER_EBS |
12288 |
原版单 EBS 总字节 (8 + 4 + 4 + 4 + 4) |
BYTES_PER_CHUNK |
327936 |
NEID 单区块总字节 (16 * 20480 + 256 biome) |
VANILLA_BYTES_PER_CHUNK |
196864 |
原版单区块总字节 (16 * 12288 + 256) |
BYTES_PER_EBS_MINUS_LIGHTING_BUT_INCLUDE_MSB |
18432 |
NEID S26PacketMapChunkBulk 用的 EBS 字节 (16 + 0.5 + 16 = 32.5 bits/block × 4096),含 MSB padding |
VANILLA_BYTES_PER_EBS_MINUS_LIGHTING_BUT_INCLUDE_MSB |
8192 |
原版 S26PacketMapChunkBulk 用的 EBS 字节 |
DataWatcher 上限
| 常量 | 值 | 说明 |
|---|---|---|
MAX_DATA_WATCHER_ID |
127 |
NEID DataWatcher 索引上限(启用 ExtendDataWatcher 后生效,vanilla 为 31) |
关键设计:1 位预留给符号
MAX_BLOCK_ID = (1 << (BITS_PER_ID - 1)) - 1 = 32767:尽管容器是 short(16 位),由于 short 是有符号类型,理论最高 32767。vanilla 不预留是因为它的 BLOCK_ID_MASK 直接是 4095;NEID 的 BLOCK_ID_MASK = 0xFFFF = 65535(用于位运算),但实际写入短变量时被符号位约束到 32767。
跨条目引用
- MixinExtendedBlockStorage - 直接读
MAX_BLOCK_ID/BLOCKS_PER_EBS - MixinAnvilChunkLoader - 写入
Blocks16/Data16时尺寸引用 - MixinS21PacketChunkData - 改写
BYTES_PER_CHUNK/BYTES_PER_EBS - MixinS26PacketMapChunkBulk - 改写
BYTES_PER_EBS_MINUS_LIGHTING_BUT_INCLUDE_MSB - MixinBlock -
MAX_BLOCK_ID决定 BlockFire 数组大小 - MixinDataWatcher -
MAX_DATA_WATCHER_ID = 127