<本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

Alpha世界格式

出自Minecraft Wiki
前往: 導覽搜尋
Rose (2D).png
該頁面所介紹的內容已從Minecraft中移除。

這些特性曾存在於遊戲中,但已被移除。

Information icon.svg
此特性為Java版獨有。

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

Java版Beta 1.3中,此格式被區域檔案格式取代,其中區塊以32×32一組存儲在區域檔案中。

世界資料夾結構[編輯 | 編輯原始碼]

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

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

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

  • 第一個資料夾名為base36(-13 % 64),也就是{{{1}}},即"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, 每一個用於區塊中的每個實體。

參見[編輯 | 編輯原始碼]