基岩版存档格式
世界规则 Java 不适用;Java 版使用另一套存档格式 基岩版 支持;当前格式自基岩版 1.2.13 以来使用

基岩版存档格式

Bedrock Edition Level Format

基岩版存档格式是 Minecraft 基岩版用于保存世界数据的文件与数据库结构。它以修改过的 LevelDB(Zlib 压缩)储存区块和实体等数据,并使用带额外头部的 level.dat 保存世界设置与规则。

该格式不同于 Java 版存档:区块数据主要在 db 目录的 LevelDB 中,关键 NBT 数据使用小端序变体;level.dat 开头额外包含两个 4 字节整数,分别记录存储工具版本和 NBT 数据大小。

机制说明

基岩版世界的核心数据位于世界目录下的 db 数据库和 level.dat 文件中。db 目录是传给 LevelDB API 的数据库路径,不能把其中某个单独文件当作完整世界数据库读取。

Mojang 在 LevelDB 基础上加入了 Zlib 压缩支持,区块、子区块、生物群系、高度、实体、方块实体和随机刻等记录通过键值对保存。读取这些数据时需要同时理解 LevelDB 键格式、维度编号、标签字节和基岩版 NBT 小端序差异。

区块键由小端序区块坐标、可选维度、记录标签和可选子区块索引组成,常见长度为 9、10、13 或 14 字节。不是每个区块都必须具备所有子区块或所有记录类型。

level.dat 本身也是 NBT,但文件前部多出两个 4 字节整数:第一个是基岩版存储工具版本,当前为 10;第二个是后续 level.dat NBT 数据大小。该文件集中保存世界名称、种子、游戏规则、实验性玩法、出生点、难度、版本兼容和多人联机设置等信息。

LOG 文件位于世界的 db 目录中,是 LevelDB 自身日志机制的一部分,用于数据库恢复和 LDB 压缩文件之间的衔接。

完整内容

LevelDB 数据库

基岩版使用经过修改的 Google LevelDB 保存世界数据库,修改点包括 Zlib 压缩支持。源页同时指向 Mojang 的 leveldb 仓库,以及社区的 Java 版 LevelDB + Zlib 解析实现。

世界地形主要存储在 db 目录中;旧世界类型曾可通过替换 db 文件夹转换为无限世界类型,这也说明地形数据与世界根目录中的其他元数据相互分离。

  • 数据库路径是世界目录下的 db 或对应子目录,不是 db 目录里的单个 .ldb、LOG 或 MANIFEST 文件。
  • 区块键里的维度整数为可选值:省略表示主世界,1 表示下界,2 表示末地。
  • BlockEntity、Entity、PendingTicks、RandomTicks 等记录包含基岩版小端序 NBT 数据。

区块键值结构

区块相关键值由坐标、维度、标签和子区块索引拼接而成。只要能从键中拆出这些部分,就能判断该记录属于哪个区块、哪个维度,以及保存的是地形、实体、校验码还是其他状态。

  • x、z 区块坐标均为带符号 32 位小端序整数。
  • 维度编号是可选的第三个 32 位小端序整数。
  • 标签字节决定记录类型;SubChunkPrefix 记录还会额外带 1 字节子区块索引。
  • Version 的零值用于旧世界格式,更高值用于无限世界类型。

level.dat 与世界规则

level.dat 集中保存世界级设置。除了世界名、种子、时间、出生点和难度,它还包含作弊、命令、多人联机、实验性玩法、资源包锁定、模板世界、教育版特性和游戏规则等大量开关。

lastOpenedWithVersion 和 MinimumCompatibleClientVersion 均使用 5 个整数描述版本,常见结构可理解为固定前缀、主版本、次版本、修订版本和开发版本标识。

  • StorageVersion 当前为 10,与文件头中的存储工具版本对应。
  • Generator 标记世界生成类型,例如旧世界、无限、超平坦或虚空。
  • Time 可以持续增长,游戏日通常可由 Time 除以 14400 推算。
  • FlatWorldLayers 使用 JSON 字符串描述超平坦世界层。

基础数据

分类
世界规则
适用版本
基岩版;Java 版另有独立存档格式
主数据库
db 目录中的 Mojang LevelDB(Zlib 压缩)
主元数据文件
level.dat,带 2 个额外 4 字节整数头部
键长度
区块键通常为 9、10、13 或 14 字节
维度编号
省略为主世界;1 下界;2 末地
NBT 特性
实体、方块实体等记录使用基岩版小端序 NBT
当前存储工具版本
10

机制表与对照数据

区块键组成

组成 格式 取值 / 长度 说明
区块 X 坐标 32 位小端序有符号整数 4 字节 区块坐标中的 x
区块 Z 坐标 32 位小端序有符号整数 4 字节 区块坐标中的 z
维度编号 32 位小端序整数 可选;1 下界、2 末地、省略为主世界 存在时键长度会增加 4 字节
记录标签 单字节 见“区块键值类型标签” 决定键值保存的数据类型
子区块索引 单字节 仅 SubChunkPrefix 使用,通常 0-15 指向 16x16x16 子区块
完整键长度 拼接结果 9、10、13 或 14 字节 取决于是否包含维度和子区块索引

区块键值类型标签

Dec Hex ASCII 名称 数据含义
43 2B + Data3D 三维生物群系与高度数据
44 2C , Version 一个字节的区块版本记录
45 2D - Data2D 二维生物群系与高度数据
46 2E . Data2DLegacy 旧版二维生物群系与高度数据
47 2F 打开词条 SubChunkPrefix 16x16x16 子区块地形数据
48 30 0 LegacyTerrain 旧版整区块地形数据
49 31 1 BlockEntity 方块实体数据,小端序 NBT
50 32 2 Entity 旧版实体数据,小端序 NBT
51 33 3 PendingTicks 计划刻数据,小端序 NBT
52 34 4 LegacyBlockExtraData 旧版方块额外数据
53 35 5 BiomeState 生物群系状态
54 36 6 FinalizedState 32 位小端序整数
55 37 7 ConversionData 转换器提供的运行时辅助数据
56 38 8 BorderBlocks 教育版边界方块数据
57 39 9 HardcodedSpawners 结构生成边界框的二进制数据
58 3A : RandomTicks 随机刻数据,小端序 NBT
59 3B ; Checksums 其他区块记录的 xxHash 校验码
60 3C < GenerationSeed 生成种子相关记录
61 3D = GeneratedPreCavesAndCliffsBlending 不再使用
62 3E > BlendingBiomeHeight 不再使用
63 3F ? MetaDataHash 元数据哈希
64 40 @ BlendingData 混合数据
65 41 A ActorDigestVersion 1.18.30 之后新版实体存储格式的实体摘要版本
118 76 v LegacyVersion 旧版版本字节;1.16.100 为 44
119 77 w AabbVolumes 试炼密室相关体积数据

非区块特殊键值

键 / 前缀 用途 值格式 说明
~local_player 本地玩家实体数据 根级单个复合标签 NBT 存在时优先于 level.dat 中的玩家数据
player_<clientid> 远程控制玩家数据 根级单个复合标签 NBT clientid 来自远程客户端的 clientid.txt
structuretemplate_<namespace:name> 保存的结构模板 结构相关数据 未写命名空间时通常按默认命名空间处理
game_flatworldlayers 超平坦世界层 ASCII 数组文本 示例形态如 [7,3,3,2]
VILLAGE_*_DWELLERS 村庄居民列表 实体 / 生物 ID 集合 包括村民、铁傀儡和猫等
VILLAGE_*_INFO 村庄信息 村庄边界数据 描述村庄范围
VILLAGE_*_POI 兴趣点与工作站点 村民、工作站点和事件数据 包含 InitEvent、UseAABB、SoundEvent 等字段
VILLAGE_*_PLAYERS 村庄玩家声望 玩家 ID 与声望值 记录单个玩家在村庄中的声望

level.dat 文件头与版本字段

字段 类型 / 位置 含义 常见说明
文件头第 1 个整数 4 字节整数 基岩版存储工具版本 当前为 10
文件头第 2 个整数 4 字节整数 level.dat NBT 数据大小 用于定位后续 NBT 数据长度
StorageVersion int 基岩版存储工具版本 目前为 10
WorldVersion int 基岩版存档版本 默认值为 1
lastOpenedWithVersion list<int> 最后一次打开该世界的游戏版本 格式为 5 个整数,例如 1.x.x.x.x
MinimumCompatibleClientVersion list<int> 最低兼容客户端版本 客户端版本低于该值时不能打开目标存档
InventoryVersion string 物品栏使用的游戏版本 客户端低于该值时可能无法打开存档
NetworkVersion int 网络协议版本号 影响联机加入兼容性

常用 level.dat 字段

字段 类型 数据范围 / 示例 用途
LevelName string 世界名称 存档显示名称
RandomSeed long 世界种子 世界生成种子号
GameType int 0 生存、1 创造、2 冒险 玩家游戏模式
ForceGameType byte 0 生存、1 创造、2 冒险 强制使用的游戏模式
Difficulty int 0 和平、1 简单、2 普通、3 困难 世界难度
Generator int 0 旧世界、1 无限、2 超平坦、5 虚空 世界生成格式
Dimension int 0 主世界、1 下界、2 末地 玩家所在维度
SpawnX / SpawnY / SpawnZ int 默认 Y 常见为 32767 世界出生点坐标
Time long 刻数;14400 刻为一个基岩版游戏日 游戏内时间
currentTick long 当前游戏刻 世界运行进度计数
LastPlayed long Unix 时间戳(秒) 最后退出游戏时间
cheatsEnabled / commandsEnabled byte 0 或 1 作弊与管理员命令开关
experiments compound 多个实验性玩法 byte 字段 保存创作者、相机、数据驱动内容等实验选项
serverChunkTickRange int 模拟距离 控制世界模拟范围
randomtickspeed int 默认值 1 随机刻速度
playersleepingpercentage int 0 到大于 100 均有特殊含义 跳过夜晚所需入睡玩家比例
FlatWorldLayers string JSON 字符串 超平坦世界层定义
worldTemplateUUID / worldTemplateVersion string UUID / 版本号 市场或模板世界来源信息

关键历史节点

版本 变化 影响
携带版 Alpha 0.2.0 level.dat 成为 NBT 文件,player.dat 合并到 level.dat 世界元数据开始集中保存
携带版 Alpha 0.3.2 Entities.dat 用于保存方块实体数据 实体与方块实体存储继续调整
携带版 Alpha 0.9.0 build 1 加入新的世界存储格式和基于 LevelDB 1.17 的 Zlib 压缩支持 旧世界打开后会自动转换
携带版 1.0.0 / 0.17.0.1 每个子区块分别存储在不同 LevelDB 键中 子区块成为主要地形存储单元
基岩版 1.2.13 子区块改用托管/调色板格式 成为当前基岩版存档格式的重要基础

站内关联词条

下列词条与当前机制直接相关,已优先关联到站内本地百科页面。

返回列表

同分类条目

下面这些条目和当前主题属于同一分类,方便继续浏览。

返回列表