存檔基礎資料儲存格式

出自Minecraft Wiki
於 2025年2月19日 (三) 03:39 由 Weipolix留言 | 貢獻 所做的修訂 (IPE.→‎存储格式
跳至導覽 跳至搜尋
  本條目介紹的是Java版的存檔基礎資料儲存格式。關於基岩版中有類似功能的檔案及格式,請見「基岩版存檔格式 § level.dat」。
本文章所述內容僅適用於Java版

存檔基礎資料儲存檔案是存檔的核心檔案,儲存各種存檔基礎資訊、維度資訊和世界生成資訊。

儲存格式

存檔基礎資料儲存檔案位於<存檔根目錄>/level.dat。在不同情況下,此檔案會有多個副本,見下文§ 儲存行為

存檔基礎資料儲存檔案使用GZip壓縮的NBT檔案格式儲存,其內部有下列NBT結構:

  • NBT複合標籤/JSON物件 根標籤
    • NBT複合標籤/JSON物件*
      *
      Data
      :存檔基礎資料。
      • 整型*DataVersion:儲存此存檔基礎資料儲存檔案的遊戲的資料版本。如果此項不存在則遊戲認為此項是-1。
      • 布林型*allowCommands:存檔是否啟用指令。如果此項不存在,則遊戲判斷整型GameType是否為1(創造模式)。如果是則為true,否則為false
      • 倍精度浮點數*BorderCenterX:世界邊界中心的X座標。如果此項不存在則遊戲預設為0。
      • 倍精度浮點數*BorderCenterZ:世界邊界中心的Z座標。如果此項不存在則遊戲預設為0。
      • 倍精度浮點數*BorderDamagePerBlock:超出邊界安全區後,玩家每遠離安全區一格增加的傷害值。如果此項不存在則遊戲預設0.2。
      • 倍精度浮點數*BorderSafeZone:超出邊界後,玩家仍然不會受到傷害的安全區的寬度。如果此項不存在則遊戲預設為5。
      • 倍精度浮點數*BorderSize:邊界寬度。如果此項不存在則遊戲預設為59999968。
      • 倍精度浮點數*BorderSizeLerpTarget:邊界寬度過渡到的目標寬度。如果此項不存在則遊戲預設為59999968。
      • 長整型*BorderSizeLerpTime:邊界寬度的過渡時間。如果此項不存在則遊戲預設為0。
      • 倍精度浮點數*BorderWarningBlocks:玩家接近邊界繪製出現紅色警告框的最大距離。如果此項不存在則遊戲預設為5。
      • 倍精度浮點數*BorderWarningTime:當玩家接近邊界距離小於邊界過渡速度乘以此值時繪製出現紅色警告框。如果此項不存在則遊戲預設為15。
      • 整型*clearWeatherTime:存檔內世界晴天剩餘時間,在此期間天氣將保持晴天,但此值大於0不是晴天的必要條件。當此值不存在時遊戲預設為0。
      • NBT複合標籤/JSON物件CustomBossEvents:自訂Boss狀態條資料。
        • NBT複合標籤/JSON物件<Boss狀態條命名空間ID>:一項自訂Boss狀態條資料。
          • 字串*
            *
            Color
            :Boss狀態條的顏色代碼,可以為pink(粉色)、blue(藍色)、red(紅色)、green(綠色)、yellow(黃色)、purple(紫色)和white(白色)。
          • 布林型*
            *
            CreateWorldFog
            :Boss狀態條是否建立世界迷霧效果。
          • 布林型*
            *
            DarkenScreen
            :Boss狀態條是否會使天空變得黯淡。
          • 整型*
            *
            Max
            :Boss狀態條的最大值。
          • 字串*
            *
            Name
            :(文字元件)Boss狀態條所顯示的文字。
          • 字串*
            *
            Overlay
            :Boss狀態條的顯示樣式。可以的值有progress(完整進度條)、notched_6(進度條分為6段)、notched_10(進度條分為10段)、notched_12(進度條分為12段)和notched_20(進度條分為20段)。
          • 布林型*
            *
            PlayBossMusic
            :Boss狀態條是否播放boss音樂。
          • NBT陣列/JSON陣列*
            *
            Players
            :可以看見Boss狀態條的玩家列表。
            • 整型陣列: (UUID)一個玩家。
          • 整型*
            *
            Value
            :Boss狀態條的目前值。
          • 布林型*
            *
            Visible
            :Boss狀態條是否對列表中的玩家可見。
      • NBT複合標籤/JSON物件DataPacks:存檔啟用和停用的資料包。此值不存在時遊戲預設為僅啟用vanilla資料包。
        • NBT陣列/JSON陣列*
          *
          Disabled
          :停用的資料包。
          • 字串:資料包名稱。
        • NBT陣列/JSON陣列*
          *
          Enabled
          :啟用的資料包。
          • 字串:資料包名稱。
      • 長整型*DayTime:存檔中遊戲按照遊戲晝夜循環而非遊戲刻計算的遊戲時間,可以被/time修改。當此值不存在時遊戲預設為0。
      • 位元組型*Difficulty:存檔的遊戲難易度。0-3分別為和平、簡單、普通和困難。當此項不存在時遊戲預設為2,即普通。
      • 布林型*DifficultyLocked:此存檔難易度是否被鎖定。當此項不存在時遊戲預設為false
      • NBT複合標籤/JSON物件*DragonFight終界龍戰鬥資料。
        • 整型陣列Dragon:(UUID)目前終界龍的UUID。
        • 布林型DragonKilled:終界龍是否已經死亡。如果此項不存在遊戲預設為false
        • 整型陣列ExitPortalLocation:終界龍被擊敗後會飛往的地方,即返回傳送門的位置。內部包含3個整數,分別代表XYZ座標。
        • NBT陣列/JSON陣列Gateways:包含即將生成的終界折躍門的位置。剛建立世界時為20個數字,終界龍每死亡一次此列表長度減1,直到為全部清空後此項不再儲存。
          • 整型:折躍門的角度,0為東方,數字按順時針方向遞增。
        • 布林型IsRespawning:終界龍是否正在重生。如果此項不存在遊戲預設為false
        • 布林型*NeedsStateScanning:此世界是否沒有進入過終界。如果此項不存在遊戲預設為true
        • 布林型*PreviouslyKilled:終界龍是否被擊敗過,決定下次擊敗終界龍獲得的經驗值。如果此項不存在遊戲預設為false
      • NBT陣列/JSON陣列enabled_features:啟用的功能開關。此值不存在時遊戲預設為僅啟用vanilla功能開關。
        • 字串:(命名空間ID)一項功能開關。
      • NBT複合標籤/JSON物件*
        *
        GameRules
        :存檔的遊戲規則
        • 字串<遊戲規則名稱>:一項遊戲規則和對應的值。
      • 整型*GameType:存檔的預設遊戲模式,控制玩家進入世界或重生時的遊戲模式。0為生存模式,1為創造模式,2為冒險模式,3為旁觀者模式。如果此項不存在則遊戲預設為0,即生存模式。
      • 布林型*hardcore:存檔內玩家死亡後是否自動轉變為旁觀者模式。當此項不存在時遊戲預設為false
      • 布林型*initialized:存檔是否被正確初始化。如果此項為false,遊戲在載入存檔之後會重新尋找世界重生點並重新放置獎勵箱。當此項不存在時遊戲預設為true
      • 長整型*LastPlayed:上次儲存此存檔的時間戳。當此項不存在時預設為0。
      • 字串*LevelName:存檔的名稱。當此項不存在時遊戲預設為空字串。
      • NBT複合標籤/JSON物件Player:存檔儲存的玩家資訊。此資訊只在單人遊戲存檔中有效,且優先權高於玩家資料儲存檔案。獨立伺服器端存檔中無此資料。
      • 布林型*raining:目前存檔內世界是否正在降雨。如果此項不存在遊戲預設為false
      • 整型*rainTime:如果存檔內世界目前不處於降雨天氣,此值代表距離下一次降雨的時間。如果目前正處於降雨天氣,此值表示距離降雨結束的時間。此值按遊戲刻計算。如果此項不存在遊戲預設為0。
      • NBT陣列/JSON陣列removed_features:此項無遊戲邏輯作用,僅在崩潰中的Removed feature flags部分記錄。
        • 字串:一個字串。
      • NBT陣列/JSON陣列*
        *
        ScheduledEvents
        :存檔內未處理的計劃事件。
        • NBT複合標籤/JSON物件:一項計劃事件。
          • NBT複合標籤/JSON物件*
            *
            Callback
            :事件回調資料。
            • 字串*
              *
              Type
              :(命名空間ID)事件回調類型。
              如果字串Typefunction,則執行指定函數
            • 字串*
              *
              Name
              :(命名空間ID)要執行的函數。
              如果字串Typefunction_tag,則執行帶有指定函數標籤的函數。
            • 字串*
              *
              Name
              :(命名空間ID)要執行的函數標籤。
          • 字串*
            *
            Name
            :此事件的名稱。
          • 長整型*
            *
            TriggerTime
            :此事件的觸發時間。以遊戲時間作為基準。
      • NBT陣列/JSON陣列*ServerBrands:開啟過此存檔的伺服器端的銘牌列表。
        • 字串:一個伺服器端銘牌。
      • 單精度浮點數*SpawnAngle:存檔世界重生點出生時所看向的水平角度,以順時針角度計,為0時代表Z軸正方向(正南方)。如果此項不存在則遊戲預設為0。
      • 整型*SpawnX:存檔世界重生點的X座標。如果此項不存在則遊戲預設為0。
      • 整型*SpawnY:存檔世界重生點的Y座標。如果此項不存在則遊戲預設為0。
      • 整型*SpawnZ:存檔世界重生點的Z座標。如果此項不存在則遊戲預設為0。
      • 布林型*thundering:目前存檔內世界是否正處於暴風雨天氣。如果此項不存在遊戲預設為false
      • 整型*thunderTime:如果存檔內世界目前不處於暴風雨天氣,此值代表距離下一次暴風雨的時間。如果目前正處於暴風雨天氣,此值表示距離暴風雨結束的時間。此值按遊戲刻計算。如果此項不存在遊戲預設為0。
      • 長整型*Time:存檔的遊戲時間。此時間從存檔被建立開始計時,單位為遊戲刻。如果此項不存在則遊戲預設為0。
      • 整型*
        *
        version
        :存檔區塊檔案的版本,對於Anvil檔案格式(目前)為19133,對於MCRegion格式為19132,如果不為這兩個值遊戲取得存檔資訊時報錯Unknown data version: <16進位此值>
      • NBT複合標籤/JSON物件*
        *
        Version
        :儲存此存檔時遊戲的詳細版本資訊。
        • 整型*Id:遊戲的資料版本。如果此項不存在則使用目前正在載入此存檔的遊戲的資料版本。
        • 字串*Name:遊戲的版本名稱。如果此項不存在則使用目前正在載入此存檔的遊戲的版本名稱。
        • 字串*Series:開發系列,用於標識開發分支。一般正式版和快照為main。如果此項不存在則使用目前正在載入此存檔的遊戲的開發系列。
        • 布林型*Snapshot:表示此版本是否為快照版。如果此項不存在則使用目前正在載入此存檔的遊戲的類型。
      • 整型陣列WanderingTraderId:(UUID)上一次成功生成的流浪商人的UUID。
      • 整型*WanderingTraderSpawnChance:遊戲嘗試生成流浪商人的成功機率。遊戲載入時除以1000計算真實機率。如50表示5%的生成機率。如果此項不存在則遊戲預設為0。
      • 整型*WanderingTraderSpawnDelay:距下次嘗試生成流浪商人的時間,以遊戲刻為單位。如果此項不存在則遊戲預設為0。
      • 布林型*WasModded:存檔是否被修改過的用戶端或伺服器端載入並儲存。如果此項不存在遊戲預設為false
      • NBT複合標籤/JSON物件*
        *
        WorldGenSettings
        :此存檔的世界生成設定。
        • 布林型*bouns_chest:玩家首次進入遊戲時,是否在重生點附近生成獎勵箱。如果此項不存在遊戲預設為false
        • NBT複合標籤/JSON物件*
          *
          dimensions
          :定義存檔包含的所有維度及其世界生成設定。
          • NBT複合標籤/JSON物件<維度的命名空間ID>:定義維度和對應的資料。
            • NBT複合標籤/JSON物件*
              *
              generator
              :世界生成器資料。
            • 字串*
              *
              type
              :(命名空間ID)維度類型資料。
        • 布林型*generate_features:世界是否生成結構。如果此項不存在遊戲預設為true
        • 字串legacy_custom_options:對世界生成不起到任何作用。存在此標籤代表這個存檔曾使用舊版自訂設定調整世界生成,在載入此存檔時遊戲會給出警告。
        • 長整型*
          *
          seed
          :數字形式的種子碼

儲存行為

每個存檔都至少有一個存檔基礎資料儲存檔案。如果一個目錄下不存在level.datlevel.dat_old檔案,那麼這個目錄就不會被作為存檔識別。

遊戲有兩種讀取存檔基礎資料儲存檔案的方式:

  • 選擇世界選單中,遊戲會讀取遊戲存檔目錄,查找所有帶有存檔基礎資料儲存檔案的目錄作為存檔,並讀取這些檔案的部分基礎資訊顯示在選單內。
  • 在遊戲載入存檔時,遊戲會將存檔基礎資料儲存檔案的資料全部載入,並根據世界生成資料建立區塊生成器等。

由於存檔基礎資料儲存檔案是存檔最重要的檔案,此檔案在儲存時會留下一個備份以減少資料損壞的可能性:

  1. 先將新的資料寫入到level<隨機字串>.dat內。
  2. 將原先的level.dat移動到level.dat_old
  3. 刪除level.dat
  4. 將剛才寫入的level<隨機字串>.dat移動到level.dat
  5. 如果有任何一步出錯,都將level.dat_old移動回level.dat

備份檔案與主檔案的結構相同,當主檔案損壞時,遊戲會自動嘗試恢復:

  1. 先將原先的level.dat移動到level.dat_corrupted_<時間戳>
  2. 刪除level.dat
  3. level.dat_old移動到level.dat
  4. 如果有任何一步出錯,都將level.dat_corrupted_<時間戳>移動回level.dat

歷史

Java版
1.112w01a加入了字串generatorName
1.2?加入了整型generatorVersion
1.3.1?加入了布林型allowCommands
加入了布林型initialized
1.4.212w32a加入了NBT複合標籤/JSON物件GameRules
加入了長整型DayTime
12w36a加入了字串generatorOptions,內容為超平坦世界的預設碼。
1.814w02a加入了位元組型Difficulty布林型DifficultyLocked
14w07a加入了整型clearWeatherTime
14w17a加入了倍精度浮點數BorderCenterX倍精度浮點數BorderCenterZ倍精度浮點數BorderSize
現在字串generatorName可接受值customized,此時字串generatorOptions為舊版自訂世界的預設碼。
14w19a加入了倍精度浮點數BorderDamagePerBlock倍精度浮點數BorderSafeZone倍精度浮點數BorderSizeLerpTarget整型BorderSizeLerpTime倍精度浮點數BorderWarningBlocks倍精度浮點數BorderWarningTime
14w31aBorderSizeLerpTime的資料類型更改為長整型長整型
1.915w31a加入了NBT複合標籤/JSON物件DimensionData,終界龍戰鬥資料存於其NBT複合標籤/JSON物件1.DragonFight下。
15w32a加入了NBT複合標籤/JSON物件Version整型DataVersion
1.1317w43a加入了NBT複合標籤/JSON物件DataPacks
18w05a加入了NBT複合標籤/JSON物件CustomBossEvents
18w16a現在字串generatorName可接受值buffet,此時字串generatorOptions格式如下:{"biome_source":{"type":"minecraft:fixed","biomes":[<若干生態域ID>]},"chunk_generator":{"type":"<生成器ID>"}}
18w19a更改了字串generatorNamebuffet字串generatorOptions的格式。
pre8移除了字串generatorOptions,由NBT複合標籤/JSON物件generatorOptions代替。
加入了字串legacy_custom_options
1.1419w05a加入了整型WanderingTraderSpawnChance整型WanderingTraderSpawnDelay整型陣列WanderingTraderId
1.1620w17a加入了布林型BonusChest
20w20a將所有世界生成相關設定都集中到了NBT複合標籤/JSON物件WorldGenSettings內。
20w21a移除了長整型SizeOnDisk
終界龍戰鬥資料被移到NBT複合標籤/JSON物件Data下,而非NBT複合標籤/JSON物件Data.DimensionData.1下。
1.1821w37a加入了字串Series標識開發分支。
1.19.322w42a加入了NBT陣列/JSON陣列enabled_features
1.2023w12a加入了NBT陣列/JSON陣列removed_features

導覽