.mcstructure
保存与加载¶
导出按钮会在结构方块中创建 .mcstructure
文件。这些文件必须放置在行为包中,以便在游戏中通过加载结构方块加载它们。路径决定了结构标识符,该标识符需输入到结构方块中以加载结构。
示例: BP/structures/house.mcstructure
→ mystructure:house
BP/structures/dungeon/entrance.mcstructure
→ dungeon:entrance
BP/structures/stuff/towers/diamond.mcstructure
→ stuff:towers/diamond
第一个子文件夹定义了命名空间,后续文件夹定义了路径,最后是结构文件的名称。
请注意,任何直接放在 structures
文件夹中的文件都将被赋予 mystructure
命名空间。如果在 structures
文件夹中存在一个结构,并且与 mystructure
文件夹中的结构同名,游戏将生成以下内容日志警告:
在这种情况下,mystructure
文件夹中的文件将“胜出”,导致直接在 structures
文件夹中的文件被忽略。
文件格式¶
mcstructure
文件是未压缩的 NBT 文件。与所有基岩版 NBT 文件一样,它们以小端格式存储。标签结构如下:
block_indices
:包含两个子列表的列表,每个层一个。这些包含结构中的方块。每个方块作为一个整数索引存储在调色板中(见下文)。从最低角落到最高角落按 ZYX 顺序进行。例如,如果结构大小为[2,3,4]
,则每个层列表中的 24(维度的乘积)个值表示位于[(0,0,0), (0,0,1), (0,0,2), (0,0,3), (0,1,0), (0,1,1), (0,1,2), (0,1,3), (0,2,0), (0,2,1), (0,2,2), (0,2,3), (1,0,0), (1,0,1), (1,0,2), (1,0,3), (1,1,0), (1,1,1), (1,1,2), (1,1,3), (1,2,0), (1,2,1), (1,2,2), (1,2,3)]
相对于原点的位置。索引值等于-1
表示没有方块,导致加载时任何现有方块保持不变。这发生在保存结构空洞时,并且是第二层中大多数方块的情况。两个层共享相同的调色板。的
entities
:作为 NBT 存储的实体列表,存储方式与世界文件中的实体完全相同。像Pos
和UniqueID
这样的标签被保存,但在加载时会被替换。
palette
:包含多个命名调色板,可能是为了支持同一结构的多个变体。然而,目前仅保存和加载default
。
block_palette
:方块状态列表。此列表包含方块索引所指向的有序条目。
name
:方块的标识符,例如minecraft:planks
。states
:方块的状态作为键值对。示例:wood_type:"acacia"
、bite_counter:3
、open_bit:1b
。值为状态的适当 NBT 类型:字符串用于枚举值,整数用于标量数字,字节用于布尔值。version
:此方块的兼容性版本号(截至撰写时为17959425
,在 1.19 中)。例如,17879555
是十六进制01 10 D2 03
,表示 1.16.210.03。
block_position_data
:包含结构中单个方块的附加数据。每个键是block_indices
中扁平化方块列表的整数索引。层是未指定的,因为它无关紧要。
block_entity_data
:作为 NBT 存储的方块实体数据,存储方式与世界文件中的方块实体完全相同。位置标签被保存,但在加载时会被替换。层是未指定的,因为多个方块实体不能共存于同一个方块空间中。
tick_queue_data
: Contains one more compounds of scheduled tick information. This is used for blocks like coral to make it die, water to make it flow, and other various scheduled updates.
tick_delay
: The amount of ticks remaining until this block should be updated. No other values seem to exist adjacent to this one at this time.
structure_world_origin
:包含三个整数的列表,描述结构最初保存时在世界中的位置。等于保存结构方块的位置,加上其偏移设置。这用于确定加载时实体应放置的位置。实体的新绝对位置等于其旧位置减去这些值,加上结构加载位置的原点。
如果发生…¶
测试修改后的结构文件加载时会发生什么的结果:
- 如果
size
中的维度超过原版保存限制64*256*64
,结构仍然可以按预期加载。 - 如果方块层列表中的值不是整数标签,所有值都将被视为
0
。 - 如果方块层列表中的值等于或大于调色板大小或小于
-1
,则放置一个空气方块。 - 如果
default
调色板不存在,加载结构将导致没有方块被放置。 - 如果任何具有常量名称的标签未指定或标签类型错误,结构加载失败,并出现以下内容日志错误:
- 如果
block_indices
不包含恰好两个值,结构加载失败,并出现以下内容日志错误:
[Structure][error]-加载结构 '<identifier>` 来自行为包: '<path>' | "block_indices" 字段应为包含 2 个数组的数组,而我们有 <count> 个数组。
- 如果
block_indices
中的值不列出标签,结构加载失败,并出现以下内容日志错误:
- 如果
block_indices
中的两个列表长度不相等,结构加载失败,并出现以下内容日志错误:
- 如果
block_indices
中的两个列表长度不等于结构维度的乘积,结构加载失败,并出现以下内容日志错误:
[Structure][error]-加载结构 '<identifier>` 来自行为包: '<path>' | "block_indices" 字段应具有与 "size" 字段定义的元素数量相同的元素。
NBT 编辑器¶
你可以在 这里 找到一些 NBT 编辑器的下载链接。