- 状態: 採用
- 日付: 2026-08-31
当初は「対象は Java版 26.2 (DataVersion 4903) の 1 バージョンだけ」と決め、 それ以外は読み込み時に警告、書き込み時にエラーとしていた。
しかしこの決め方だと、Minecraft が更新されるたびに、 中身が何も変わっていなくても利用者に警告が出る。 ライブラリ側も追随して版を上げ続けることになる。
実際に調べたところ、いまのワールド形式は 26.1 で入ったもので、26.2 でも変わっていない。 26.3 のスナップショットにも形式変更は入っていない。 バージョン番号の一致を条件にしたのが間違いだった。
判定の基準を ワールドの形式 に変える。
- NBT レイヤ (レイヤ1) は完全にバージョン非依存。DataVersion を一切見ない
- 扱える形式の下限を
MIN_SUPPORTED_DATA_VERSION = 4786(26.1)とする - 読み込み:
4786以上なら何もしない。警告も出さない。 下限未満のときだけWarn(既定)/Error/Ignoreから選ぶ - 書き込み:
DataVersionは読んだ値をそのまま残す。書き換えない。 下限未満のチャンクは既定でUNSUPPORTED_DATA_VERSION。allow_foreign_data_version = trueで明示的に許可できる TARGET_DATA_VERSION = 4903は「動作を確かめたバージョン」として残す
- 形式が同じなら読み書きできる。できることに警告を出すと、 本当に見るべき警告が埋もれる
DataVersionを書き換えると、そのワールドを開いたゲーム側が アップグレードの要否を誤る。読んだ値を残すのが唯一の正解- 読み込みを厳格にすると、壊れたワールドの調査という有力な用途が塞がれる。 読むだけならデータを壊しようがない
- 書き込みを寛容にすると、形式の違うワールドを黙って上書きし、 利用者が気づかないうちに壊す。ここは既定で止めるべき
- 許可フラグの名前を
allow_foreign_data_versionとしているのは、 「変換する」ではなく「異物をそのまま許す」意味を名前で示すため
- 下限より古いワールドを新形式へ移行する用途には使えない。それは Minecraft 本体の仕事
- 形式が変わったことに気づかないまま新しいワールドを読むと、
黙って誤読する余地がある。構造が想定と違えば
MALFORMED_DATAで止まるが、 それをすり抜ける変更はありうる - 形式が変わったときは下限を上げる。扱えなくなるワールドが出るので、 バージョン番号のいちばん上の桁も上げる