跳转到主要内容

区块与区块加载

Minecraft 是一个近乎无限的世界,这个世界不可能随时都处于“激活”状态。
于是 Minecraft 引入了区块这一概念,来让世界可以有选择的进行“激活”,我们称之为“加载”。


Minecraft 的世界结构

打开存档文件夹,我们通常能看到这样的文件(部分文件是模组创建的):

image-1593773456602.png

为消除歧义,本文中的世界指整个“存档”,维度指主世界、下界、末地等独立“世界”。

Minecraft 在 1.18 中将世界高度从 256 提升值了 384,文中出现 Y 轴时请自行根据版本替换。

第一层:世界

世界[World] 指指游戏内单独的“存档”。
存档文件夹本身,包括一个 Minecraft 存档中的所有信息。

第二层:维度

维度[Dimension] 是 Minecraft 中的独立“世界”。
每一个维度都有自己的文件夹,相互独立存储互不干扰。
主世界的文件直接储存在存档文件夹根目录中,其他维度则拥有独立的文件夹,如:DIM1 是末地、DIM-1 是下界。
每个维度文件夹中都会有:

  • level.dat(存储关于世界的全局信息)
  • playerdata(存储这一世界内玩家所有的个人信息)
  • region(维度内的所有区域文件)

等等,但其他文件不是今天我们要讲的,略过。
部分服务端的储存方式可能会略有不同,Paper 服务端会将每个维度保存为单独的的文件夹,如:world、world_nether、world_the_end 等。

第三层:区域

区域文件[Region] 是储存世界信息的文件,整个 Minecraft 世界的方块数据都被保存于 .mca 文件中。
每个区域文件中储存了 32x32=1024 个区块,即包括 512x512=262144 个方块范围(忽略高度)。
在 1.17 以下的版本,实体信息也保存在区域文件中,1.17 以上的版本的实体信息将单独保存于 entity 文件夹中。

文件命名格式为 r.x.z.mca,x 和 z 是区域坐标,如 r.0.0.mca 中包括 0,0,0 至 31,15,31 的区块,即方块范围为 0,0,0 至 511,384,511。
区域、区块、方块坐标包含关系可以通过 dinnerbone 的坐标计算器计算

区域文件是最小文件保存单位,无法单独保存区块或方块,而是必须包括在区域文件中,未载入过的区块会保持空白。

无法作为游戏内操作单位。

使用 NBT 查看器打开区域文件

image.png

可以使用 NBTExplorer 打开并编辑区域文件。
从图中可以看到每个独立的区块,以及区块内的信息。

第四层:区块

区块[Chunk] 是 Minecraft 世界里一个大小为 16x256x16 (1.2.1 - 1.17) 或 16×384×16 (1.18+) 的部分。
区块中会存储地形和实体信息。区块也会同时储存预先计算好的光照、高度图数据及其他元数据信息,以加快游戏处理。

一个世界最多可能有超过 14 万亿个区块,同时加载这些区块肯定是不现实的。
所以游戏仅会选择一些区块进行加载,未加载的区块中不会进行运算。
也无法直接生成一整个世界,而是根据玩家探索范围来逐步生成。

是很多操作的基本操作单位,如:删除区块、加载区块、生成区块。

第五层:子区块

子区块[Section] 是一个区块的一部分,大小为 16x16x16,子区块 0 是最底部的部分,子区块 15 是最高的部分(1.2.1 - 1.17)。
这是为了节省储存空间而设计的,完全为空气的子区块将不会被保存,因此很少会用到此概念。
无法作为游戏内操作单位。

第六层:方块

方块[Block] 是 Minecraft 中的最小单位,无法被真正删除,而是被设置为空气方块。
无法独立保存或加载,你只能加载某一个区块,而不能加载某一个方块。











附录

Minecraft 坐标系
  • X 轴的正方向为东,其坐标反映了玩家距离原点在东(+)西(-)方向上的距离。
  • Z 轴的正方向为南,其坐标反映了玩家距离原点在南(+)北(-)方向上的距离。
  • Y 轴的正方向为上,其坐标反映了玩家位置的高低程度(其中海平面为 62),另见海拔高度
  • 坐标系的单位长度为一个方块长,基于测量方法,每一方块为1立方米。

Minecraft 地图上的坐标


主要参考

部分段落直接引用自 Minecraft Wiki,根据 CC BY-NC-SA 3.0 许可证许可。