立方区块与列结构

基本信息

属性 值
立方体边长 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 撤销上述强加载

相关条目