Minecraft Java版26.1以降のワールド/NBTファイルを、複数の言語で同じように読み書きするライブラリのドキュメントです。
まずどこを読むかは次のとおりです。
| 目的 | 読むもの |
|---|---|
| 何ができるのか知りたい | 機能一覧 |
| とりあえず動かしたい | はじめに |
| 使い方を調べたい | ガイド |
| 他の言語版の対応するAPIを知りたい | API対応表 |
| 自分で実装・移植したい | 仕様 |
| なぜその設計なのか知りたい | 設計判断の記録 |
- 機能一覧: 機能 × 全言語の対応マトリクス
- 01. NBTの読み書き
- 02. SNBT
- 03. リージョンファイル (.mca)
- 04. ワールドとlevel.dat
- 05. ブロックとバイオーム
- 06. エラーと安全上限
- 07. バージョンポリシー
- 00. 共通規約
- 10. NBTバイナリ形式
- 11. SNBT
- 20. Anvilリージョン形式
- 30. チャンク形式
- 31. パレット付きコンテナとBitStorage
- 40. ワールドのディレクトリ構成
- 90. 適合性
- 実ワールドで検証する:
spec/tools/scan_world.py - 新しい言語を追加する
- リリース手順
- 変更履歴
- 0001. モノレポにする
- 0002. 命名は各言語のイディオムに従う
- 0003. ワールド形式で対応を判定する
- 0004. Heightmapと光源の再計算は行わない
- 0005. 全言語で共通のエラーモデルを使う
- 0006. SNBTはバイナリへ写せる範囲だけを扱う
- 0007. TypeScriptではi64にbigintを使う
- 0008.
session.lockの確認は言語ごとにベストエフォートとする - 0009. 公開APIの抽出はソースの静的解析で行い、API対応表は生成する
実装より先にspec/に仕様を書き、各言語はそれを実装しています。
どの言語版でも同じ入力から同じバイト列が出るかは適合性テストが確かめていて、機能一覧が実装からずれていないかもCIで見ています。
Rustのツールで書いたワールドをJavaのプラグインで読む、といった場面で、ライブラリごとの違いに悩まされずに済むのが狙いです。