Minecraft Wiki

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

了解更多

Minecraft Wiki
註冊
Advertisement
可列印版不再被支援且可能有渲染錯誤。請更新您的瀏覽器書籤並改用瀏覽器預設的列印功能。

Paeonia (texture) TU1
該頁面所介紹的內容已從Minecraft中移除。

此世界格式已在Beta 1.3中被區域檔案格式取代。

Information icon
此特性為Java版獨有。

Infdev在開發過程中引入了新的資料儲存挑戰:由於其地圖的大小(地球表面積的幾倍),infdev中生成的地形有可能在記憶體中佔大約為235PB,即240,640TB。 因此,為了減少檔案大小和記憶體使用,Notch決定將地形分成16×128×16塊,並在不可見時將它們儲存在磁盤上。此外,地形僅在玩家視角的顯示距離內生成,大大減少了儲存大小,因為大多數玩家只能在合理的時間範圍內搜尋地圖的一小部分。Alpha使用了這種技術,而因為其成功,BetaJava版1.0.0仍然使用這一般概念。

世界資料夾結構

Alpha世界實際上是一個包含至少一個名為level.dat的檔案的資料夾。還有一個session.lock檔案,以確保一次只有一個Minecraft打開該世界。

世界資料夾最多可包含64個子資料夾,每個子資料夾最多包含64個子資料夾。這些資料夾包含儲存世界的地形和實體的區塊檔案。 每個區塊檔案由其區塊位置xPos和zPos標識。區塊檔案名稱的不同部分是透過取得xPos和zPos的base36表示來獲得的。放置區塊檔案的資料夾的名稱可以透過取得xPos和zPos,模除64(或按63進行位AND運算)和轉換為base36來找到。負座標必須透過補碼按位解釋為正數。因此,-13被視為243(如果它的大小為一個字節)。

例如,要查找位置為(-13,44)處的區塊:

  • 第一個資料夾名為base36(-13 % 64),也就是,即"1f"。
  • 第二個資料夾名為base36(44 % 64)。也就是base36(44),即"18"。
  • 區塊檔案名為"c." + base36(-13) + "." + base36(44) + ".dat"。計算得"c.-d.18.dat"。
  • 所以位於(-13,44)的區塊檔案儲存在"1f/18/c.-d.18.dat"。

每個區塊都會獨立於檔案和資料夾名稱記住其位置。請參閱下文,了解如何從檔案資料中讀取區塊的位置。

維度

其他維度的儲存方式與普通世界相同,但不是將世界檔案混合在儲存資料夾中,而是將檔案儲存在具有自己的區域和方塊資料的其他子資料夾中。它們的名稱以DIM開頭,後跟維度ID。

在Alpha中使用這些維度ID:

ID 資料夾 維度
0 saves/[世界]/ 正常世界(主世界),總是儲存在不帶DIM的世界資料夾中
-1 saves/[世界]/DIM-1/ 地獄,在萬聖節更新中加入

session.lock格式

此檔案包含了該世界最後一次進入時的時間戳。檔案為一64位元組以大端字節序格式的整值資料,為自1970年(標準時區)開始的以百為單位的毫秒數。

與典型的lock檔案不同,這一檔案確保了最後存取這一世界的程式有讀取和修改的權限。該過程通常如下所示:

  1. 程式打開session.lock
  2. 程式在session.lock寫入目前時間戳
  3. 程式對session.lock的變化進行監控
  4. 如果session.lock內容發生變化,則程式中斷並鎖定世界。

level.dat Format

level.dat檔案是一個GZip壓縮的NBT檔案,用於儲存全局級別資料(時間、玩家生命、背包、速度和地圖中的位置等)。最重要的是,它儲存了地形生成器用於在執行中無縫生成更多地形的隨機種子。

這個檔案有這個結構:

  • 根標籤。
    •  Data: 全局世界資料。
      •  LastPlayed: 當玩家儲存遊戲時,儲存Unix時間戳(以毫秒為單位)。
      •  SizeOnDisk: 估計整個世界的大小(以字節為單位)。
      •  RandomSeed: 為地形提供隨機種子的隨機數。
      •  SpawnX: 世界的生成位置的X座標。
      •  SpawnY: 世界的生成位置的Y座標。
      •  SpawnZ: 世界的生成位置的Z座標。
      •  Time: 以刻為單位儲存目前「一天中的時間」。每個實際秒數有20刻,每個Minecraft晝夜更替有24000刻,使整個週期長度為20分鐘。0是白天的開始,12000是日落的開始,13800是夜晚的開始,22200是日出的開始,24000又是白天的開始。 儲存在level.dat中的值總是在增加,並且可以大於24000,但「時間」總是模除「時間」字段值的24000。
      •  Player: 世界的的單人遊戲玩家。
        •  Dimension: 玩家所在的維度。0是主世界,1是地獄
        •  Pos: 3個TAG_Doubles的列表,用於玩家的X,Y和Z位置。
        •  Rotation: 2個TAG_Floats的列表,用於玩家視角的偏航(Yaw)和俯仰(Pitch)。
        •  Motion: 3個TAG_Doubles的列表,用於X,Y和Z運動,以米每刻為單位。
        •  OnGround: 1或0(true/false) — 如果玩家在地上為true。
        •  FallDistance: 玩家掉落了多遠。
        •  Health: 玩家擁有的生命值。20為10顆心。
        •  AttackTime: 玩家免受攻擊的刻數。
        •  HurtTime: 玩家被攻擊後紅色的刻數。
        •  DeathTime: 玩家死亡的刻數 — 用於控制死亡動畫。
        •  Air: 玩家開始溺水之前的刻數。從300開始。
        •  Fire: 當為負數時,玩家將被點燃之前的刻數。當為正數時,火撲滅前的刻數。
        •  Score: 玩家的得分。該分數從未在Alpha或甚至beta中使用,因此該值無關緊要。
        •  Inventory: TAG_Compounds的列表,表示玩家背包中的物品。
          • 背包物品
            •  Slot: 物品所在的槽。
            •  id: 物品ID。
            •  Damage: 物品的資料值,或工具的損傷值。
            •  Count: 棧中此物品的編號。範圍從-128到127。小於2的值不會在遊戲中顯示。

區塊格式

區塊檔案,如上所示,是GZip壓縮的NBT檔案。他們有這個結構:

  • 根標籤。
    •  Level: 該區塊的世界資料。
      •  xPos: X區塊座標。
      •  zPos: Z區塊座標。
      •  TerrainPopulated: 1 or 0 (true/false) — 若Minecraft在這個區塊中產生了特殊的功能,例如樹木、花朵、礦石、地牢,則為true。
      •  LastUpdate: 區塊最後載入時的刻。
      •  Blocks: 方塊ID為32768位元組,每個方塊8位元。
      •  Data: 方塊資料為16384位元組,每個方塊4位。
      •  BlockLight: 方塊光照為16384位元組,每個方塊4位。
      •  SkyLight: 天空光照為16384位元組,每個方塊4位。
      •  HeightMap: 高度地圖資訊為256位元組,每個XZ列4位。用於加快天空光照計算。
      •  Entities: List of TAG_Compounds, 每一個用於區塊中的每個實體。
      •  TileEntities: List of TAG_Compounds, 每一個用於區塊中的每個實體。

參見

語言

Advertisement