结构¶
结构(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_version、size、structure和structure_world_origin等标签。structure复合标签内部包含方块索引、实体列表和调色板。方块索引以整数引用调色板中的方块状态,因而结构文件不需要为每个方块重复存储完整方块标识符与状态。
结构与世界生成¶
在附加包的地物系统中,结构地物(Structure Feature)允许在世界生成过程中放置结构。结构地物引用一个结构文件的名称,并可配置放置时的偏移、旋转等参数。
结构地物通过地物规则与特定的生物群系和放置条件关联,实现在世界生成时自动放置预构建的建筑或装饰物。原版游戏中的村庄、要塞、矿井等建筑均通过类似的机制生成。
在较新的世界生成体系中,结构还可以作为结构模板(Structure Template)参与拼图结构。拼图结构(Jigsaw Structure)由多个结构模板、模板池、处理器和结构集组合而成,用于生成更大型或更具随机性的建筑群。拼图结构的配置文件位于行为包的worldgen目录下,而被引用的结构模板可以继续使用.mcstructure文件。
结构空位¶
结构空位方块(Structure Void)是一种特殊方块,用于在结构中标记应被忽略的位置。当结构被加载时,结构空位所在位置的原有方块不会被覆盖,从而允许结构自然地融入周围环境。