本站文本內容除另有聲明外,轉載時均必須註明出處。(詳情…本站文本內容除另有聲明外,轉載時均必須註明出處。(詳情…中文Minecraft Wiki是完全公開的。請勇於擴充與修正內容!中文Minecraft Wiki是完全公開的。請勇於擴充與修正內容!Minecraft中文Wiki微博正在更新!或許有興趣去看看Minecraft中文Wiki微博正在更新!或許有興趣去看看想與其他用戶進行編輯上的溝通?社區專頁正是為此創建的。想與其他用戶進行編輯上的溝通?社區專頁正是為此創建的。翻譯或創建頁面之前,不妨看看譯名標準化Wiki條例頁面。翻譯或創建頁面之前,不妨看看譯名標準化Wiki條例頁面。需要管理員的協助?在管理員告示板留言也許可以幫到您。需要管理員的協助?在管理員告示板留言也許可以幫到您。
各位用戶:為了讓我們能更好了解您的需求,提供更優良的服務,請幫助我們填寫一份問卷。編者問卷讀者問卷(需要花費7分鐘左右)

Hi Gamepedia users and contributors! Please complete this survey to help us learn how to better meet your needs in the future. We have one for editors and readers. This should only take about 7 minutes!

Alpha世界格式

出自 Minecraft Wiki
前往: 導覽搜尋
Grass Block Revision 2.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, 每一個用於區塊中的每個實體。

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