Infdevで開発中に新しいデータストレージチャレンジが導入された:マップの大きさ(表面積は地球の数倍)により、Infdevで生成された地形がメモリに格納された際の大きさがほぼ235ペタバイト(240640テラバイト)になる可能性がある。したがって、ファイルサイズとメモリ使用量を軽減するため、Notchは地形を16×128×16のチャンクに分割し、表示されない場合はディスクに保存することを決めた。さらに、地形はプレーヤーの視点の描画範囲内にあるときにのみ生成されるようにし、保存サイズが大幅に削減された。これは、ほとんどのプレーヤーが妥当な時間枠内でマップのごく一部しか探索できなかったからである。Alphaはこの手法を使用するが、BetaとMinecraft 1.0は両方ともその成功のためまだ一般的な概念を使用している
Minecraft Beta 1.3では、この形式はRegionファイルフォーマットに置き換えられた。これでは、チャンクが32×32のグループでRegionファイルに保存される。
ワールドフォルダ構造[]
Alphaレベルは実際にはlevel.datという名前のファイルを1つ以上もつ単一のフォルダーである。また、1つのMinecraftのみが一度にレベルを開けるようにするsession.lockファイルもある。
レベルフォルダには最大64個の追加サブフォルダーがある最大64個のサブフォルダが存在する。これらのフォルダには、レベルの地形とエンティティを保存するチャンクファイルが含まれている。各チャンクファイルは、そのチャンク位置xPosとzPosによって識別される。PosおよびzPosのbase36を取得するとチャンクファイルの名前の様々な部分を取得できる。xPosとzPosをモジュロ64(または63とのビット単位のAND)を取り、base36に変換することでチャンクファイルが置かれているフォルダの名前を見つけられる。負の座標は、2の補数を介しビット単位で製の数として解釈する必要がある。したがって、-13は243として処理される(サイズがバイトの場合)
例、位置(-13, 44)でチャンクを見つけるには:
- 最初のフォルダ名はbase36(-13 % 64)。これはbase36(243 % 64 = 51)で"1f"。
- 2つ目のフォルダ名はbase36(44 % 64)。これはbase36(44)で"18"。
- チャンクファイルの名前は"c."+"base36(-13) + "。" + base36(44) + ".dat"。これは"c.-d.18.dat"と評価される
- したがって、(-13, 44)のチャンクは"1f/18/c.-d.18.dat"に格納される
各チャンクは、ファイルやフォルダー名とは無関係にその位置を記憶する。ファイルデータからチャンクの位置を読み取る方法については、以下を参照。
ディメンション[]
ディメンションは通常のワールドと同じ方法で保存されるが、保存フォルダ内のワールドファイルを混合する代わりに、ファイルは独自のRegionとチャンクデータを持つ追加サブフォルダーに保存される。名前はDIM
で始まり、その後にIDが続く。
これらのディメンションIDはAlphaで使用されたものである:
ID | フォルダ | ディメンション |
---|---|---|
0 | saves/[World]/ |
ノーマルワールド(オーバーワールド)常にDIM なしでワールドフォルダに保存される
|
-1 | saves/[World]/DIM-1/ |
ハロウィン・アップデートで追加されたネザー |
session.lockフォーマット[]
session.lockには、ワールドに最後に触れた際のタイムスタンプが含まれる。ファイルの長さは8バイトで、ビッグエンディアン形式の単一の64ビット符号付き整数が含まれている。この整数の値はタイムスタンプであり、1970年から経過したミリ秒数としてUTCで保存される。
典型的なロックファイルとは異なり、session.lockは、ワールドを開く最後のプログラムが所有する物である。手順は次のようである:
- プログラムがsession.lockを開く
- プログラムがsession.lockにタイムスタンプを書き込む
- プログラムがsession.lockの変更を監視する
- session.lockの内容が変更されるとプログラムは異常終了し、ワールドのロックを放棄する
level.datフォーマット[]
level.datファイルは、グローバルレベルのデータ(時刻、プレーヤーの体力、インベントリ、速度、マップ内の位置など)を格納するGZipされたNBTファイルである。地形ジェネレーターがより多くの地形をその場で滑らかに生成するのに使用するランダムシードを格納することが最も重要である。
このファイルの構造:
- ルートタグ
- Data: グローバルレベルデータ
- LastPlayed: プレーヤーがゲームを保存した際のUnixタイムスタンプ(ミリ秒)を保存する
- SizeOnDisk: 全ワールドの推定サイズ(バイト単位)
- RandomSeed: 地形にランダムシードを備え付ける乱数
- SpawnX: レベルのスポーン地点のX座標
- SpawnY: レベルのスポーン地点のY座標
- SpawnZ: レベルのスポーン地点のZ座標
- Time: 現在の"time of day"をティック単位で保存。1秒当たり20ティック、Minecraftの昼夜サイクルごとに24000ティック。サイクル全体の長さは20分。0は昼間の開始、12000は日没の開始、13800は夜間の開始、22200は日の出の開始、24000は翌日の昼間の開始。level.datに格納されている値は常に増加しており、24000を超える事があるが、"time of day"は常に”Time"フィールド値の24000を基にしている
- Player: レベルのシングルプレーヤーのプレーヤー
- Dimension: プレーヤーのいるディメンション。0はオーバーワールド-1はネザー。
- Pos: プレーヤーのX,Y,Z座標の3つのTAG_Doubleのリスト。
- Rotation: プレーヤーの視点の偏揺れ角と傾きの2つのTAG_Doubleのリスト。
- Motion: ティックごとのX,Y,Zモーションの3つのTAG_Doubleのリスト(メートル単位)。
- OnGround: 1/0 (true/false) - プレーヤーが地面に接している場合はtrue。
- FallDistance: プレーヤーの落ちた高さ
- Health: プレーヤーが持っているヒットポイントの数。20は♥10個分。
- AttackTime: プレーヤーが攻撃を受けないティック数
- HurtTime: プレーヤーが攻撃されてから赤くなっているティック数
- DeathTime: プレーヤーが死んだティック数 - 死亡アニメーションの制御に使用。
- Air: プレーヤーが溺れ始めるまでのティック数。300から始まる。
- Fire: 負の場合、プレーヤーが燃えるまでのティック数。正の場合、火が消えるまでのティック数。
- Score: プレーヤーのスコア。スコアはAlphaやBetaでも使用されなかったため、この値は無関係。
- Inventory: プレーヤーのインベントリ内のアイテムを表すTAG_Compoundsのリスト。
- Data: グローバルレベルデータ
Chunkフォーマット[]
Chunk files, as described above, are GZip'd NBT files. They have this structure:
- ルートタグ
- Level: チャンクのデータ。
- xPos: そのチャンクの X座標。
- zPos: そのチャンクの Z座標。
- TerrainPopulated: 1/0 (true/false) - Minecraftが木、花、鉱石、ダンジョンなど個のチャンクに特別な機能を生成した場合はtrue。
- LastUpdate: そのチャンクが最後にセーブされたときのティック。
- Blocks: 32768バイトのブロックID、ブロックごとに8ビット。
- Data: 16384バイトのブロックデータ、ブロックごとに4ビット。
- BlockLight: 16384バイトのブロックの光、ブロックごとに4ビット。
- SkyLight: 16384バイトの日光、ブロックごとに4ビット。
- HeightMap: 256バイトの高さマップ情報、XZ列ごとに8ビット。日光の計算の高速化に使用。
- Entities: TAG_Compoundsのリスト、チャンク内のエンティティごとに1つ。
- エンティティ。
- Chunkフォーマット→エンティティのフォーマットを参照 - すべての情報がMinecraft Alphaに適用されるわけではない
- エンティティ。
- TileEntities: TAG_Compoundsのリスト、チャンク内のタイルエンティティごとに1つ。
- タイルエンティティ。
- Chunkフォーマット→エンティティのフォーマットを参照 - すべての情報がMinecraft Alphaに適用されるわけではない
- タイルエンティティ。
- Level: チャンクのデータ。
こちらも参照[]
デモ版 | |||||||
---|---|---|---|---|---|---|---|
開発 |
| ||||||
技術的情報 |
| ||||||
マルチプレイ | |||||||
ゲームのカスタマイズ |