Minecraft Wiki

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

了解更多

Minecraft Wiki
Advertisement
Disambig gray  本文章介紹的是自基岩版1.2.13以來的世界格式。關於以前的版本的世界格式,請見「基岩版世界格式/歷史」。關於Java版的世界格式,請見「Java版世界格式」。
Information icon
此特性為基岩版獨有。

基岩版使用了修改後的Google的LevelDB(Zlib壓縮格式)來儲存世界格式資料。

基於LevelDB的格式[]

Mojang的LevelDB格式[]

Mojang修改了谷歌的原始LevelDB以加入對Zlib壓縮格式和Windows系統的支持。代碼可以在Github頁面訪問,且編寫指引由Tommaso在此處提供。

對於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
43 2B + Data3D 新版的三維生態域和海拔高度
44 2C , Version 一個字節
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 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之後新版實體儲存格式下的實體摘要版本
110 6E n VersionEnchant 中國版獨有
111 6F o VersionMarkInsert 中國版獨有
118 76 v LegacyVersion 一個字節。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表示對齊區塊
    •  cheatsEnabled:是否啟用過作弊。
    •  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:是否使用了自訂的實驗性功能儲存的世界。[需要驗證]
      •  upcoming_creator_features:即將到來的創作者功能。
    •  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