跳转至

结构

结构(Structure)是Minecraft基岩版中用于存储和加载一段三维方块排列的数据格式。结构可以通过结构方块保存和放置,也作为世界生成中地物系统的一部分用于在世界中生成建筑物。

概述

结构以文件形式存储一个矩形区域内的所有方块、方块实体和实体信息。在游戏内,结构方块(Structure Block)提供了保存、加载、检测和导出结构的功能。在附加包中,结构文件可以被地物系统引用,用于世界生成时在特定位置放置预构建的建筑。

结构方块

结构方块是用于管理结构的特殊方块,拥有四种模式:

保存模式(Save)
将指定区域内的方块和实体保存为结构。需要指定结构名称和要保存的区域范围。结构方块会保存方块状态、方块实体数据以及被包含的实体数据。普通保存通常存入当前世界的结构数据中;部分平台还提供保存到磁盘的能力。
加载模式(Load)
从当前世界或已导入的结构文件中加载指定名称的结构,并放置到世界中。支持设置旋转、镜像、是否包含实体等参数。
检测模式(Corner)
与另一个检测模式的结构方块配对,自动计算两者之间的区域范围,方便保存大型结构。
3D导出模式(3D Export)
将结构导出为.glb格式的三维模型文件,可供外部三维工具使用或用于3D打印。该模式产出的是三维模型文件,与下文.mcstructure结构文件无关。

结构方块保存区域存在尺寸上限。Microsoft Learn当前说明,保存区域的最大尺寸为X轴64、Y轴257、Z轴64;超过上限的输入会被调整为允许的最大值。结构方块的偏移以结构方块自身位置为基准,要求对应区域已经加载。

结构文件

结构文件使用NBT格式存储,文件扩展名为.mcstructure。在行为包中,普通结构文件存放在 structures目录下,并通过结构名称或结构地物引用。

结构文件路径会影响结构标识符。直接位于 structures目录下的文件通常属于默认的mystructure命名空间;位于 structures/<命名空间>目录下的文件则以第一层子目录作为命名空间,后续子目录和文件名构成路径。例如, structures/dungeon/entrance.mcstructure可以作为dungeon:entrance引用。

.mcstructure文件中包含以下主要数据:

  • 方块数据:区域内所有方块的标识符和方块状态,使用调色板(Palette)化存储方式。
  • 方块实体数据:区域内所有方块实体的完整NBT数据。
  • 实体数据:区域内所有实体的完整NBT数据(可选)。
  • 尺寸信息:结构在三个轴向上的尺寸。

从文件结构看,.mcstructure的根通常包含format_versionsizestructurestructure_world_origin等标签。structure复合标签内部包含方块索引、实体列表和调色板。方块索引以整数引用调色板中的方块状态,因而结构文件不需要为每个方块重复存储完整方块标识符与状态。

结构与世界生成

在附加包的地物系统中,结构地物(Structure Feature)允许在世界生成过程中放置结构。结构地物引用一个结构文件的名称,并可配置放置时的偏移、旋转等参数。

结构地物通过地物规则与特定的生物群系和放置条件关联,实现在世界生成时自动放置预构建的建筑或装饰物。原版游戏中的村庄、要塞、矿井等建筑均通过类似的机制生成。

在较新的世界生成体系中,结构还可以作为结构模板(Structure Template)参与拼图结构。拼图结构(Jigsaw Structure)由多个结构模板、模板池、处理器和结构集组合而成,用于生成更大型或更具随机性的建筑群。拼图结构的配置文件位于行为包的 worldgen目录下,而被引用的结构模板可以继续使用.mcstructure文件。

结构空位

结构空位方块(Structure Void)是一种特殊方块,用于在结构中标记应被忽略的位置。当结构被加载时,结构空位所在位置的原有方块不会被覆盖,从而允许结构自然地融入周围环境。