Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement
Information icon.svg
此特性为基岩版独有。
Disambig gray.svg  本文章介绍的是自基岩版1.2.13以来的世界格式。关于以前的版本的世界格式,请见“基岩版世界格式/历史”。关于Java版的世界格式,请见“Java版世界格式”。

基岩版使用了修改后的Google的LevelDB(Zlib压缩格式)来储存世界格式资料。

基于LevelDB的格式[]

Mojang的LevelDB格式[]

Mojang修改了谷歌的原始LevelDB以加入了对Zlib压缩格式和Windows系统的支持。代码可以在Github页面访问,且编写指引由Tommaso在https://twitter.com/_tomcc/status/477950809427427328提供。

对于Java版的LevelDB + Zlib,请见此Github页面

Google的leveldb库自从Mojang在发布Minecraft后得到了极大的改变,但Mojang自己修改后的版本仍然可以独立运作,但代码需要一些小修改来实现兼容性:

  • db/snappy_compressor.cc应该引用<snappy.h>而不是<snappy/snappy.h>
  • table/table_test.cc包含两个无法解析但不相关的snappy引用:port::Snappy_Compressleveldb::SnappyCompressor。如果被简单地注释掉,其余的代码仍可以正常运行。

数据库储存在db或基岩版世界的子目录。传递给LevelDB API的数据库路径是这个路径,而不是其中任何文件的路径,而且这似乎也是存储地形生成的位置。这是因为可以通过将其db文件夹替换为来自无限世界类型的文件夹来将旧世界类型变为无限。

区块键值格式[]

有关区块数据的数据库键是以下内容的并列:

  • 两个带符号的32位小端序整数(x和z分别位于区块坐标中)。
  • 可选的第三个32位小端序整数(1为下界,2为末地,忽略掉则为主世界)。
  • 一个单字节标签,指定键所代表的记录类型(见表),以及……
  • (对于SubChunkPrefix记录)一个字节的子区块索引(从0到15)。

因此,这些键值应当为9、10、13或14字节长度。对于指定的区块而言,并非所有子区块都需要存在。

BlockEntityEntityPendingTicks记录代表了NBT变种中的串联根标签序列,它以短整数格式存储长度和多字节整数类型,而不是Java版或原始 NBT规范使用的大端序格式。

Version中的零值用于记录旧世界格式,更高的值被无限世界类型使用。

键值类型标签
标签字节 名称 描述
Dec Hex ASCII
44 2C , ChunkVersion 一个字节
45 2D - Data2D 生物群系和海拔高度
46 2E . Data2DLegacy
47 2F / SubChunkPrefix 16×16×16子区块的地形
48 30 0 LegacyTerrain 整个区块的地形
49 31 1 BlockEntity 方块实体数据(小端序NBT)
50 32 2 Entity 实体数据(小端序NBT)
51 33 3 PendingTicks 计划刻数据(小端序NBT)
52 34 4 BlockExtraData 不再使用
53 35 5 BiomeState
54 36 6 FinalizedState 32位小端序整数
55 37 7 ? 不再使用
56 38 8 BorderBlocks 教育版特性
57 39 9 HardCodedSpawnAreas 以二进制格式存储的结构生成的边界框
58 3A : RandomTicks 随机刻数据(小端序NBT)
59 3B ; Checksums 其他区块记录的xxHash校验码
118 76 v ChunkVersion 一个字节。1.16.100为44。

其余键值[]

实体数据存在特殊键值~local_player来储存本地玩家实体数据。如果这里存在实体数据,则它优先于存储在level.dat中的玩家数据。与~local_player关联的数据值使用NBT格式在父级根目录里有且只有一个复合标签。

同时存在一个用于远程控制玩家的特殊键值,它由两个部分组成。第一个部分是前缀player_,第二部分是客户端ID,包含了远程遥控玩家的clientid.txt文件。例如,player_-12345678是使用客户端ID为-12345678的控制远程客户端的键值。与前缀player_键值关联的值是一个NBT结构文件,并且在根级别只有一个复合标签。

此外,也有一个名为game_flatworldlayers的长度为20的键值,被超平坦世界使用。与此键关联的值是一组ASCII文本格式的数字。与game_flatworldlayers键关联的值的例子是[7,3,3,2],值长度为9。

一些键值与村民有关:

  • VILLAGE_[0-9a-f\\-]+_DWELLERS
    • 主要由实体/生物ID组成。包括村民、铁傀儡和猫。
  • VILLAGE_[0-9a-f\\-]+_INFO
    • 包含了村庄边界。
  • VILLAGE_[0-9a-f\\-]+_POI
    • 包含了村民和工作站点之间的映射。床位分配似乎没有被存储。
  • VILLAGE_[0-9a-f\\-]+_PLAYERS

基岩版leveldb解析器示例[]

基岩版存档数据库解析器的例子可以在minecraft_mmccoo找到。用于实现遍历所有方块、实体或生物、海拔和村庄相关项目的NBT文件。

NBT结构[]

下列页面记录了方块实体和实体的NBT结构文档:

level.dat[]

level.dat为NBT格式。斜体表示为推测内容,可能并不准确。

NBT结构[]

  • :世界格式根目录。
    •  abilities:玩家权限或能力。
      •  attackmobs:玩家是否能攻击生物。
      •  attackplayers:玩家是否能攻击其他玩家。
      •  build:玩家是否能放置方块。
      •  doorsandswitches:玩家是否能打开或关闭、打开或关闭拉杆等方块。
      •  flying:玩家是否处于飞行状态。
      •  instabuild:玩家是否能瞬间破坏方块。
      •  invulnerable:玩家是否无敌。
      •  lightning:玩家是否能被闪电劈中。
      •  mayfly:玩家是否能飞行。
      •  mine:玩家是否能挖掘方块。
      •  mute:玩家是否被禁言。
      •  noclip:玩家是否拥有自由视角。
      •  op:玩家是否拥有管理员权限。
      •  opencontainers:玩家是否能打开容器(例如箱子)。
      •  teleport:玩家是否能瞬移。
      •  permissionsLevel:世界主人的权限等级。
      •  playerPermissionsLevel:其他玩家的权限等级。
      •  flySpeed:玩家的飞行速度。
      •  walkSpeed:玩家的移动速度。
    •  lastOpenedWithVersion:最后一次打开的游戏版本。格式为x.x.x.x.x,x为下列整数的值,例如基岩版1.18.21.18.2.3.0
      •  0:主版本号。
      •  1:次版本号。
      •  2:补丁版本号。
      •  3:修订版本号。
      •  4:测试版本号。
    •  MinimumCompatibleClientVersion:最小可兼容的客户端版本。若游戏客户端版本低于此值,则不能打开目标存档。格式为x.x.x.x.x,x为下列整数的值,例如基岩版1.18.101.18.10.0.0
      •  0:主版本号。
      •  1:次版本号。
      •  2:补丁版本号。
      •  3:修订版本号。
      •  4:测试版本号。
    •  allowdestructiveobjects:在教育版中是否允许破坏性物体(如TNT)出现。
    •  allowmobs:在教育版中是否允许生物生成。
    •  bonusChestEnabled:是否允许生成奖励箱
    •  bonusChestSpawned:是否在出生点处生成奖励箱。
    •  CenterMapsToOrigin:玩家创建的地图是否总是以玩家为中心,0表示对齐区块
    •  codebuilder:在教育版中是否开启Code Builder权限。
    •  commandblockoutput:是否展示命令方块输出信息。
    •  commandblocksenabled:是否允许使用命令方块
    •  commandsEnabled:是否允许使用管理员权限的命令
    •  ConfirmedPlatformLockedContent是否已经确认平台锁定的内容。
    •  dodaylightcycle:是否启用昼夜更替。
    •  doentitiydrops:非生物实体是否有掉落物。
    •  dofiretick:火是否蔓延及自然熄灭。
    •  doimmediaterespawn:玩家死后是否瞬间重生。
    •  doinsomnia幻翼是否生成。
    •  domobloot:生物是否携带战利品表生成。
    •  domobspawning:是否可以生成生物。不影响刷怪笼生成生物。
    •  dotiledrops:方块被破坏时是否掉落物品。
    •  doweathercycle:天气是否变化。
    •  drowningdamage:玩家是否承受窒息伤害。
    •  educationFeaturesEnabled:是否启用教育版特性。
    •  experimentalgameplay:是否启用实验性玩法特性。在1.16.100.55及之后版本中会被替换为 experiments
    •  experiments实验性玩法选项。
      •  data_driven_biomes:自定义生物群系。
      •  data_driven_items:其他数据型驱动功能。
      •  experimental_molang_features:实验性Molang功能。
      •  experiments_ever_used:存档是否使用过实验性功能。
      •  gametest:GameTest框架。
      •  saved_with_toggled_experiments是否使用了自定义的实验性功能储存的世界。
      •  scripting是否允许使用脚本功能。
      •  upcoming_creater_features:即将到来的创作者功能。
      •  vanilla_experiences:原版实验性功能。
      •  wild_update荒野更新内容。
    •  falldamage:是否受到坠落伤害。
    •  firedamage:是否受到火焰伤害。
    •  freezedamage:是否受到冰冻伤害。
    •  ForceGameType:强制使用的游戏模式。0为生存模式,1为创造模式,2为冒险模式。
    •  globalmute:在教育版中是否全体玩家禁言。
    •  hasBeenLoadedInCreative:是否已经在创造模式打开过。主要用于控制是否可以获得成就
    •  hasLockedBehaviorPack:是否包含已经锁定的行为包
    •  hasLockedResourcePack:是否包含已经锁定的资源包
    •  immutableWorld:是否开启无World Builder权限玩家不能放置或破坏方块的世界。
    •  isFromLockedTemplate:存档是否为锁定的模板世界。
    •  isFromWorldTemplate:存档是否为世界模板。
    •  isSingleUseWorld:教育版中是否为单学生游戏。
    •  isWorldTemplateOptionLocked:该模板世界是否解锁全部选项。
    •  keepinventory:玩家死后是否保留物品栏。
    •  LANBroadcast:是否允许开放局域网联机。
    •  LANBroadcastIntent:是否开启开放局域网联机。
    •  mobgriefing:生物是否能够进行破坏性行为。详见游戏规则
    •  MultiplayerGame:是否允许进行多人联机游戏。
    •  MultiplayerGameIntent:是否开启局域网和Xbox多人游戏。
    •  naturalregeneration:玩家是否能在饥饿值足够时自然恢复生命值(不影响外部治疗效果,如金苹果生命恢复状态效果等)。
    •  pvp:是否允许玩家互相攻击。
    •  requiresCopiedPackRemovalCheck是否需要去除复制过的资源包/行为包才能加载世界。
    •  sendcommandfeedback:玩家执行命令的返回信息是否在聊天框中显示。
    •  showcoordinates:是否在GUI左上角显示坐标。
    •  showdeathmessages:是否展示死亡信息。
    •  showtags:是否在玩家头顶显示用户名。
    •  spawnMobs:控制生物生成。
    •  SpawnV1Villagers:是否生成旧版村民
    •  startWithMapEnabled:玩家是否携带地图首次生成。
    •  texturePacksRequired:是否需要携带特定纹理包生成。
    •  tntexplodes:TNT是否能够破坏地形。
    •  useMsaGamertagsOnly:是否在仅在游戏中使用玩家的Xbox代号。本地存档默认为0,Realms世界默认为1。
    •  Difficulty:世界难度。0为和平,1为简单,2为普通,3为困难。
    •  eduOffer:是否为教育版独有世界。设置为1时只能由教育版客户端打开。
    •  functioncommandlimit数据包的命令限制数量。
    •  Dimension:玩家所在的维度。0为主世界,1为下界,2为末地。
    •  GameType:玩家的游戏模式。0为生存模式,1为创造模式,2为冒险模式。
    •  Generator:世界格式。0为旧世界,1为无限,2为超平坦
    •  lightningTime:下一次闪电出现前的剩余时间(刻)。
    •  LimitedWorldOriginX:有限(旧)世界生成开始的X坐标。
    •  LimitedWorldOriginY:有限(旧)世界生成开始的Y坐标。
    •  LimitedWorldOriginZ:有限(旧)世界生成开始的Z坐标。
    •  maxcommandchainlength:连锁型命令方块执行命令的数量限制。默认值为65535。
    •  NetherScale:下界与主世界的比例尺。默认值为8。
    •  NetworkVersion:网络协议版本号。用于控制联机时其余玩家是否可以加入该世界。
    •  Platform:世界时使用何种平台保存的,值总为2。
    •  PlatformBroadcastIntent:在平台间开放游戏,值总为3。
    •  rainTime:下一次进入下雨或下雪天气前的剩余时间(刻)。
    •  randomtickspeed: 随机刻速度。默认值为1。
    •  serverChunkTickRange:渲染距离。
    •  spawnradius:玩家出生点的坐标。
    •  SpawnX: 玩家出生点坐标X轴,默认值为0。
    •  SpawnY:玩家出生点坐标Y轴,默认值为64。
    •  SpawnZ: 玩家出生点坐标Z轴,默认值为0。
    •  StorageVersion:基岩版存储工具版本,目前为8。
    •  XBLBroadcastIntent:允许什么用户进行Xbox联机。1为仅邀请,2为仅好友,3为允许好友的好友。
    •  currentTick:当前的游戏
    •  LastPlayed:玩家在最后一次退出游戏时的Unix时间戳(秒)。
    •  RandomSeed:世界的种子号
    •  Time:以刻数形式储存的游戏内时间(游戏日)。1秒20刻,完成一次昼夜更替需要14400刻(12分钟,比标准情况下20分钟还要快)。0为早晨时间,7200为日落时间,8280为晚上时间,13320为日出时间,14400是下一次早晨的时间。level.dat内储存的数值会持续增加,且可以大于14400,但“游戏日”始终是Time字段值整除14400的结果。
    •  worldStartCount最后一次打开存档时的时间(时间戳)。
    •  lightningLevel:雷暴天气的强度。
    •  rainLevel:下雨天气的强度。
    •  baseGameVersion:世界模板使用的基础客户端版本。默认值为*
    •  BiomeOverride:需要进行转换的生物群系。包含了在1.18.0移除的生物群系。
    •  FlatWorldLayers:控制超平坦世界生成的JSON文件。预设值:{"biome_id":1,"block_layers":[{"block_data":0,"block_id":7,"count":1},{"block_data":0,"block_id":3,"count":2},{"block_data":0,"block_id":2,"count":1}],"encoding_version":3,"structure_options":null}
    •  InventoryVersion:物品栏使用的游戏版本。若游戏客户端版本低于此值,则不能打开目标存档。例如在基岩版1.18.10.26中创建的世界为1.18.10-beta26
    •  LevelName:存档的名称。
    •  prid世界模板的产品ID,由市场自动分配。
    •  worldTemplateUUID:世界模板的UUID。
    •  worldTemplateVersion:世界模板的版本号。
    •  world_policies世界的使用政策。

LOG[]

LOG日志文件位于存档的/db路径里,并且是leveldb格式的一部分,用于在LDB压缩文件之间使用。类似于程序的日志文件:

YYYY /MM/DD-Hour/Minute/Second.StepName "Info"

示例:

2014/07/24-22:20:08.400488 4a3638 Recovering log #3

历史[]

携带版Alpha
0.2.0level.dat现在是一个NBT格式文件。
player.dat被合并到level.dat里。
加入了entities.dat文件。
0.3.2Entities.dat现在用于储存方块实体数据。
0.9.0build 1加入了新的世界储存格式和基于LevelDB 1.17的Zlib压缩格式支持。旧世界在新版本打开后会自动转换。
携带版
1.0.00.17.0.1现在每个子区块会被分别储存在不同的leveldb键中。
基岩版
1.2.13?子区块现在使用托管。[1]

参见[]

参考[]

Advertisement