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

Alpha世界格式

出自Minecraft Wiki
前往: 導覽搜尋
Nether Reactor Core Revision 1.png
該頁面所介紹的內容已被從遊戲中移除。
這些特性只存在於舊版本的Minecraft。
Information icon.svg
此特性為Java版獨有。

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

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

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

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

世界資料夾最多可包含64個子資料夾,每個子資料夾最多包含64個子資料夾。這些資料夾包含保存世界的地形和實體的區塊文件。 每個區塊文件由其區塊位置xPos和zPos標識。區塊文件名稱的不同部分是通過獲取xPos和zPos的base36表示來獲得的。放置區塊文件的資料夾的名稱可以通過獲取xPos和zPos,模除64(或按63進行位AND運算)和轉換為base36來找到。負坐標必須通過wikipedia:zh:有符號數處理#補碼按位解釋為正數。因此,-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, 每一個用於區塊中的每個實體。

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