立方区块与列结构
基本信息
| 属性 | 值 |
|---|---|
| 立方体边长 | 16 格(ICube.SIZE = 16) |
| 立方体实现类 | com.cardinalstar.cubicchunks.world.cube.Cube |
| 立方体接口 | com.cardinalstar.cubicchunks.api.ICube |
| 立方体映射 | com.cardinalstar.cubicchunks.world.column.CubeMap |
| 列渲染高度图 | ServerHeightMap / ClientHeightMap / StagingHeightMap |
| 服务端供给器 | com.cardinalstar.cubicchunks.world.cube.CubeProviderServer(经 ICubeProviderServer) |
| 客户端供给器 | com.cardinalstar.cubicchunks.client.CubeProviderClient |
| 区块加载调度 | com.cardinalstar.cubicchunks.world.chunkloader.CubicChunkManager |
功能
CubicChunks 用两层结构替换原版的单层区块:
- 列(Column):XZ 方向 16×16,Y 方向无限延伸。它取代原版
Chunk作为"区块"的身份,持有ColumnTileEntityMap(方块实体)以及一个CubeMap。 - 立方体(Cube):16×16×16 的方块数组,由
Cube实现ICube。Cube的类注释明确说明其"边长为Cube#SIZE,按该长度的整数倍对齐,存储在列内"(world/cube/Cube.java:88),类声明见Cube.java:91。
CubeMap(world/column/CubeMap.java:43,implements Iterable<Cube>)以 cubeY 为键管理一个列内所有已加载立方体,提供 get/put/remove(int cubeY)(:74,:85,:60)、区间遍历 cubes(startY, endY)(:102)、all()(:149)与 isEmpty()(:158)。它还负责按 tick 收集可点亮方块(getTickableStorages(),:173)与排队补光照(enqueueRelightChecks(),:248)。
高度图按端分成三个实现(world/core/):服务端用 ServerHeightMap、客户端用 ClientHeightMap、转换期用 StagingHeightMap;另有 ClientHeightMap 之外的最小接口 IMinMaxHeight(world/api/IMinMaxHeight.java)。
加载调度方面,CubicChunkManager(world/chunkloader/CubicChunkManager.java)配合 ICubicTicket / ICubicTicketInternal(api/ICubicTicket.java、world/core/ICubicTicketInternal.java)管理立方体加载票据,并发出 ForceCubeEvent / UnforceCubeEvent(world/chunkloader/)让其它模组感知强加载。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 立方体边长 | 16 | api/ICube.java:55 |
| 立方体截断高度 | MIN_SUPPORTED_BLOCK_Y = −2147479552 |
CubicChunks.java:95 |
| 立方体顶端高度 | MAX_SUPPORTED_BLOCK_Y = 2147479552 |
CubicChunks.java:96 |
| 最大渲染距离常量 | 64 | CubicChunks.java:80 |
交互
| 触发 | 行为 |
|---|---|
| 玩家进入已加载立方体 | CubicChunkManager 通过票据加载所在 Cube,并沿 Y 方向按垂直视距预载 |
ForceCubeEvent |
其它模组请求某立方体保持强加载 |
UnforceCubeEvent |
撤销上述强加载 |
相关条目
- 高度与建筑限高 - 立方体 Y 范围与服务器限高的设定
- Vanilla + Cubic 世界类型 - 启用该结构的前提
- CubicChunk 存储格式 - 立方体数据如何落盘