web-dev-qa-db-ja.com

Minecraftの.mcaファイルを編集するにはどうすればよいですか?

前書き

個別のMinecraftの世界を1つの世界に統合したいのですが、それは比較的簡単なことのように思えましたが、研究を進めるうちに、カスタムプログラムを作成する必要性に発展しました。

闘争

最初にリージョンファイルをシフトし、それらを1つのリージョンフォルダーに結合することから始めました。これは明白な解決策のように見え、ほとんど機能しました。 注:ファイルを開いたところ、エンティティ全体ではなくセクター全体の座標が保存されているようです。そのため、地形自体が地域のファイル名と空間的に一致していません。

そのため、クライアントを開いたときにかなりの遅延が発生し、リージョンをレンダリングできませんでした。私はAnvilファイル形式を読み、NBTファイルを読み取るためのスキームを想像しました。私は手動でバイトを読み取って編集できると思っていましたが、継続的な調査で、リージョンファイルがgzip圧縮されているかどうかに関して矛盾する回答を得ました。

生のバイトを読み取るのに十分なコードを完成させましたが、バイト値が期待どおりに出力されませんでした。

私がNBTファイルについて持っている情報によると、それらはすべてCompoundTagで始まり、CompoundTagは10またはx0Aの単一バイトとして始まります。これは私が私のフォーマット情報を得た場所です: https://minecraft.gamepedia.com/NBT_format

これが実際に出てきたもののスクリーンショットです:

Byte-reading code in Java and Output

注:スクリーンショットのクラスの説明は正確ではありません。 UI関数を具体化するのではなく、バイトを読み取るのに十分なだけすばやく入力しました。

これらのバイトが意味のないものとして出力されるのは、ファイルが圧縮されていることを示していると思います。これがgzipの問題の始まりであることがわかりました: http://gnuwin32.sourceforge.net/packages/gzip.htm

これをインストールできたら、この.mcaファイルが解凍され、期待どおりにバイトを読み取ることができると思いますが、インストール手順がわかりません。 「シェルコマンド、「設定」、「作成」、「作成インストール」」を使用すると書かれています。私にはUnixのように聞こえますが、ダウンロードしたファイルはWindows用ですか? exeはありませんが、Cファイルはかなり多くあります。 Cコンパイラを持っていません。 。 。

注:まだgzipソフトウェアが動作していません。

ポストスクリプト

同様の質問がここで行われるのを見たことがありますが、それらはすべて古い(2016年のもの)で、以前は機能していたソフトウェアへのリンクが無効になっているか、最近の回答がありませんでした。この質問の特定のコピーが5か月前に尋ねられたのを見つけましたが、コメントするにはアカウントを作成する必要がありました。ここにリンクがあります: pythonで個々のブロックを抽出できるようにMinecraft .mcaファイルを読み取るにはどうすればよいですか? 彼の質問はPython実装。彼はPython用のNBTライブラリを見つけたが、MCAファイルがnot-gzippedであることを拒否していたと述べた。

私はNBTExplorerのソースコード(私が投稿した回答を参照)を持っているので、問題を理解するためのリードを得ましたが、それがどのように機能するかについて更新する必要があります。私の世界を修正する限り、私は今、実行可能な解決策を持っていると思います。

完成したJavaライブラリ、ソースコード付きのライブラリを誰かが私に指摘できるとしたら、それは.mcaを開くか、このトピックに関連するディスカッション掲示板を開きます。これはすばらしいことです。ファイル圧縮は機能しますが、これはおそらくこの質問の範囲外です。これは、バグやエラーに直接関連するものではないことを理解しています。 それは さらに、このタスクを実行するコードを作成するために実行する追加の手順がわかりませんでした。

更新

これを行う他の誰かのプログラムを見つけて回答として投稿しましたが、ファイルがバイトから使用可能な情報に変換される方法を知りたいです。私が投稿した回答の手動編集方法を使用すると、最大で241,664の手動編集が必要になるため、より良い解決策が必要です。

6
Cakemate

エディタを見つけました!

editできるようになりましたが、editの仕組みがわかりません。私は何も学習していませんが、最終的に他の誰かの編集者を見つけました。自分でこれを行う方法を知りたいと思っていたので、私が欲しかったものはまったくありません。

更新:このソフトウェアを使用して領域を修正するには、2つのフィールドを最大32x32のチャンクまで手動で編集する必要があり、修正が必要な118の領域。 **これは、241,664の潜在的な手動編集です!この解決策は妥当なタイムスケールでは実行可能ではありませんが、これまでのところ最高です。

私はこのページを見つけました: https://fileinfo.com/extension/mca

このページへのリンク: https://fileinfo.com/software/nbtexplorer/nbtexplorer

このページへのリンク: https://github.com/jaquadro/NBTExplorer/releases

私はソフトウェアをインストールし、それは自動的に.minecraftフォルダーにリンクされました、これはGUIのスクリーンショットです:

enter image description here

明るい面として、アプリケーションのダウンロードページにもソースのダウンロードリンクがあるので、それを読んでみようと思います。これまでに2つのファイルを開いて一見したところ、コメントはありませんでした。また、これまでに見たことのないC#でも記述されていますが、Javaに非常に似ていると聞いたので、おそらくその言語も学びます。

1
Cakemate

まず、私が知る限り、「チャンクの場所」に関する情報は、リージョンファイルに保存されていません。 1つのリージョンファイル内に32(x方向)* 32(z方向)= 1024チャンクが格納されており、各チャンクはファイル内のデータの位置を持っています。したがって、チャンクはファイル自体内で番号が付けられ、最初の8192バイトは、その特定のチャンクに関するデータがあるかどうかに関係なく、ファイル内のどこにあり、最後に更新された日時です。完全なリージョン(1024チャンク)がワールド内に配置されている場所は、xとz方向にリージョン自体に番号が付けられているファイル名内で解決できます。

したがって、あなたの場合、元の世界と同じように一緒にとどまるようにリージョンファイルの名前を変更でき、それらを一緒にマージできるはずです。

次に、データをデコードするときに、NBT形式を最初に確認する必要はありません。まず、リージョンファイルには独自の構造があります: https://minecraft.gamepedia.com/Region_file_format そして、Zlibを使用して実際のデータにアクセスするとき( RFC1950)複雑になっています...

とにかく、デコード方法の詳細情報が必要な場合は、いくつか情報を提供できます(ファイル から)https://www.rfc-editor.org/rfc/rfc1950.htmlhttps://tools.ietf.org/html/rfc1951 Zlib(RFC1950)についての理解が難しい方法で書かれている-少なくともそれは私のためでした)。しかし、私自身が今苦労している点があるので、この質問に出くわしました。

1
M4niboy