跳转至

区块

区块(Chunk)是Minecraft基岩版中世界数据的基本管理和加载单元。世界被划分为一个个16×16方块宽的纵向柱体,每个这样的柱体即为一个区块。区块是游戏进行地形生成、数据存储、加载与卸载的基本粒度。

概述

基岩版的世界在水平方向上理论可以无限延伸,但在任意时刻,游戏仅加载和维护玩家周围有限范围内的区块。区块的加载状态直接决定了方块是否可被交互、实体是否参与更新、红石电路是否运行等核心游戏行为。

每个区块在水平面上覆盖从(chunkX × 16, chunkZ × 16)(chunkX × 16 + 15, chunkZ × 16 + 15)的方块范围。区块坐标可以通过方块坐标整除16得到。

子区块

子区块(Subchunk)是区块在垂直方向上的分段。每个子区块的尺寸为16×16×16方块。基岩版中主世界的建筑范围从Y=-64到Y=319,共覆盖24个子区块。

子区块是存档中方块数据存储的最小单元。每个子区块使用一套分层的调色板化存储(Palettized Storage)方案来记录方块数据:

  • 每个子区块包含若干个存储层,通常第一层为方块层,第二层为含水层。
  • 每个存储层维护一个方块置换的调色板,子区块中的每个方块位置存储一个指向该调色板的索引。
  • 调色板中的条目以NBT格式记录方块的标识符和方块状态属性。

当一个子区块内所有方块均为空气时,该子区块不会被存储,以节省空间。

区块加载

区块围绕每个玩家以一定半径加载。该半径在游戏设置中通过模拟距离(Simulation Distance)渲染距离(Render Distance)两个参数分别控制:

模拟距离
决定以玩家为中心多少个区块范围内的区块会被完全模拟。在模拟范围内,实体会更新、红石会运行、随机刻会触发、方块更新会传播。
渲染距离
决定以玩家为中心多少个区块范围内的区块会被渲染显示。渲染距离通常大于或等于模拟距离。超出模拟距离但在渲染距离内的区块仅被渲染,不参与游戏逻辑更新。

常加载区域

常加载区域(Ticking Area)是一种无论玩家是否在附近都保持加载和模拟的区块区域。常加载区域通过/tickingarea命令创建,用于使特定区域的游戏逻辑(如红石装置、作物生长、实体行为等)在无玩家在场时仍持续运行。

每个维度可创建的常加载区域数量有上限,默认为10个。每个常加载区域最多包含100个区块。

区块与存档

区块的数据存储在存档的LevelDB数据库中,以区块坐标和维度作为键的一部分。存储的数据包括:

  • 子区块的方块数据(按子区块索引分条存储)
  • 方块实体数据(该区块内所有方块实体的NBT数据列表)
  • 实体数据(该区块内所有实体的NBT数据列表)
  • 计划刻数据
  • 生物群系数据
  • 区块版本和完成状态标志