本站文本内容除另有声明外,转载时均必须注明出处,并遵守CC BY-NC-SA 3.0协议。(转载须知)
本站是中文Minecraft Wiki的镜像站,与Mojang Studios、Weird Gloop没有从属关系。(免责声明)

全站通知:

结构存储格式

刷 历
编

阅读

    

2026-08-26更新

    

最新编辑:中文mcwiki机器人

阅读:

  

更新日期:2026-08-26

  

最新编辑:中文mcwiki机器人

来自Minecraft WIKI
(重定向自结构模板)
跳到导航 跳到搜索
页面贡献者 :
中文Minecraft_Wiki
Disambig gray.svg本条目介绍的是用于游戏存储方块结构的存储格式。关于相似的用于社区程序的格式,请见“Schematic文件格式”。
Disambig gray.svg关于基岩版中由结构方块保存的类似文件,请见“基岩版结构文件”。
Information icon.svg
本条目所述内容仅适用于Java版。

结构存储文件,又称结构模板(Structure Template),是游戏存储方块结构的一种文件。它既作为游戏的基础数据,控制世界生成;也可以由玩家指定创建,保存在存档中。

存储格式

在游戏本体client.jar内,结构存储文件全部位于/data/minecraft/structure目录下。每个存档中,由玩家导出的结构存储文件位于<存档根目录>/generated/<命名空间>/structure/<名称>.nbt。在数据包中,结构存储文件位于data/<命名空间>/structure目录下。

当游戏引用结构模板时,会优先使用存档根目录下的结构模板,若无则使用数据包内的结构模板,否则使用游戏本体内置的结构模板。

结构存储文件使用GZip压缩的NBT文件格式保存,其内部有下列NBT结构:

  • NBT复合标签/JSON对象 根标签
    • 整型*DataVersion:保存此结构存储文件的游戏的数据版本。如果此项不存在则游戏认为此项是500(Java版1.9.4之后,Java版1.10快照之前)。
    • NBT列表/JSON数组*
      *
      blocks
      :方块结构内具有的方块。
      • NBT复合标签/JSON对象:一个方块结构内的方块。
        • NBT列表/JSON数组*
          *
          pos
          :方块相对于原点(方块结构范围的最小点)的坐标。内部有3个元素。
          • 整型:方块的X坐标。
          • 整型:方块的Y坐标。
          • 整型:方块的Z坐标。
        • NBT复合标签/JSON对象nbt:与此方块相关的方块实体的数据。
        • 整型*
          *
          state
          :映射到调色板内的下标。游戏将根据调色板内指定下标的数据获取此处要放置的方块状态。
    • NBT列表/JSON数组*
      *
      entities
      :方块结构内包含的实体的信息。
      • NBT复合标签/JSON对象:一个实体的信息。游戏在放置实体时将以结构生成的方式放置此实体。
        • NBT列表/JSON数组*
          *
          blockPos
          :实体相对于原点(方块结构范围的最小点)的方块坐标。此项用于检测实体是否在方块结构范围内,如果不在则不能放置。内部有3个元素。
          • 整型:方块坐标的X分量。
          • 整型:方块坐标的Y分量。
          • 整型:方块坐标的Z分量。
        • NBT列表/JSON数组*
          *
          pos
          :实体相对于原点(方块结构范围的最小点)的坐标。内部有3个元素。
          • 双精度浮点数:实体的X坐标。
          • 双精度浮点数:实体的Y坐标。
          • 双精度浮点数:实体的Z坐标。
        • NBT复合标签/JSON对象*
          *
          nbt
          :实体的数据。
    • NBT列表/JSON数组palette:(与NBT列表/JSON数组palettes中必须存在一个)方块调色板,即定义数字与方块状态的映射,以降低文件体积。
    • NBT列表/JSON数组palettes:(与NBT列表/JSON数组palette中必须存在一个)方块调色板集合,游戏在放置方块结构时随机挑选其中一种调色板进行放置。此项与NBT列表/JSON数组palette互斥,且此项加载更加优先。
    • NBT列表/JSON数组*
      *
      size
      :方块结构的大小。内部有3个元素。
      • 整型:方块结构在X轴上的长度。
      • 整型:方块结构在Y轴上的高度。
      • 整型:方块结构在Z轴上的长度。

SNBT格式

结构模板具有独特的SNBT格式,使用SNBT文件格式保存。

SNBT格式的结构模板目前可以由数据生成器转换NBT格式的结构模板得到。游戏在执行NBT与SNBT的转换时,会对结构模板进行额外处理,与方块集合相关的标签不完全符合NBT与SNBT的转换规则。而整型DataVersion、NBT列表/JSON数组entities和NBT列表/JSON数组size会正常转换,以下不再写出。

SNBT格式的结构模板没有任何用处。虽然游戏内存在SNBT格式的结构模板的导出方法,但是全被禁用。

  • NBT复合标签/JSON对象 根标签
    • NBT列表/JSON数组*
      *
      data
      :方块结构内具有的方块。
      • NBT复合标签/JSON对象:一个方块结构内的方块。
        • NBT列表/JSON数组*
          *
          pos
          :方块相对于原点(方块结构范围的最小点)的坐标。内部有3个元素。
          • 整型:方块的X坐标。
          • 整型:方块的Y坐标。
          • 整型:方块的Z坐标。
        • 字符串*
          *
          state
          :此方块的详细数据,格式遵守<方块ID>{<方块属性>:<值>, ...}。
        • NBT复合标签/JSON对象nbt:与此方块相关的方块实体的数据。
    • NBT列表/JSON数组palette:方块调色板。
      • 字符串:调色板中的一个方块,格式遵守<方块ID>{<方块属性>:<值>, ...}。
    • NBT列表/JSON数组palettes:方块调色板集合。
      • NBT复合标签/JSON对象:一个方块调色板。
        • 字符串*
          *
          <方块ID>{<方块属性>:<值>, ...}
          :上述NBT列表/JSON数组data中的方块在此调色板下实际使用的方块,此标签内容的格式与标签名相同。

原版结构

下面为游戏本体内结构存储文件的位置及其作用:

  • NBT复合标签/JSON对象 empty.nbt

存储行为

结构存储文件可以使用结构方块和测试实例方块进行保存和加载。

在游戏内,部分结构使用结构存储文件生成一块块结构片段。这些结构存储文件中包含了用于标记的结构方块和拼图方块,游戏在放置这些方块结构时会进行后期处理以替换掉这些方块。部分结构也需要阻止方块被即将要放置的方块替换,即阻止方块的放置以保留原有的方块。

  • 雪屋、下界化石、海底废墟、废弃传送门和沉船使用结构存储文件时会对结构存储文件的内容进行部分修改,包括调整位置和修改方块等。
  • 末地城、雪屋、海底废墟、沉船、林地府邸会对方块结构内模式是数据模式的结构方块进行后处理,按照数据字符串metadata的值进行判断:
    • 末地城结构片段处理下列值:
      • Chest<任意字符串> - 设置此位置下方的箱子的战利品表为chests/end_city_treasure。
      • Elytra<任意字符串> - 将此位置替换为带有鞘翅的物品展示框。
      • Sentry<任意字符串> - 将此位置替换为一只潜影贝。
    • 雪屋结构片段处理下列值:
      • chest - 设置此位置下方的箱子的战利品表为chests/igloo_chest。
    • 海底废墟结构片段处理下列值:
      • chest - 将此位置替换为含水的箱子,且战利品表为chests/underwater_ruin_big(大型海底废墟)或chests/underwater_ruin_small(小型海底废墟)。
      • drowned - 将此位置替换为一只溺尸。如果成功生成,检查此处是否高于海平面,如果高于则此处替换为空气,否则替换为水。
    • 沉船结构片段处理下列值:
      • map_chest - 设置此位置下方的箱子的战利品表为chests/shipwreck_map。
      • supply_chest - 设置此位置下方的箱子的战利品表为chests/shipwreck_supply。
      • treasure_chest - 设置此位置下方的箱子的战利品表为chests/shipwreck_treasure。
    • 林地府邸结构片段处理下列值:
      • Chest<任意字符串> - 将此位置替换为箱子,面朝北方,战利品表为chests/woodland_mansion。
      • ChestEast - 将此位置替换为箱子,在面朝东方的基础上,被结构片段再次旋转获得最终朝向,战利品表为chests/woodland_mansion。
      • ChestNorth - 将此位置替换为箱子,在面朝北方的基础上,被结构片段再次旋转获得最终朝向,战利品表为chests/woodland_mansion。
      • ChestSouth - 将此位置替换为箱子,在面朝南方的基础上,被结构片段再次旋转获得最终朝向,战利品表为chests/woodland_mansion。
      • ChestWest - 将此位置替换为箱子,在面朝西方的基础上,被结构片段再次旋转获得最终朝向,战利品表为chests/woodland_mansion。
      • Group of Allays - 将此位置替换为1-3只悦灵。
      • Mage - 将此位置替换为一只唤魔者。
      • Warrior - 将此位置替换为一只卫道士。
  • 对于末地城、雪屋、下界化石、海底废墟、废弃传送门、沉船和林地府邸,方块结构内的拼图方块会被替换为对应的字符串final_state。
  • 所有使用结构存储文件的结构均阻止结构方块被放置。
  • 使用legacy_single_pool_element的结构模板阻止空气被放置。
  • 使用single_pool_element或legacy_single_pool_element的结构模板会展开放置拼图方块内的拼图结构。
  • 使用处理器列表字符串NBT复合标签/JSON对象NBT列表/JSON数组processors可以后处理结构模板内的方块。

历史

Java版
1.16pre1现在结构存储文件放置时会自动填充可生成战利品容器的长整型LootTableSeed。
1.2124w21a将数据包的结构存储文件目录由structures移动到structure。

参考

导航