如何从 Minecraft 编辑 .mca 文件?

Cak*_*ate 6 java compression file-format minecraft

介绍

我想将我独立的 Minecraft 世界合并成一个单一的世界,这似乎是一个相对容易的壮举,但随着我的研究,它演变成需要制作自定义程序。

斗争

我首先移动区域文件并将它们组合在一个区域文件夹中,这似乎是显而易见的解决方案,而且几乎奏效。注意:我打开了文件,似乎整个扇区都存储了它们的坐标,而不是实体,因此地形本身在空间上与区域文件名不匹配。

当我打开客户端并且区域无法渲染时,这导致了相当多的延迟。我阅读了 Anvil 文件格式,并设想了一个读取 NBT 文件的方案。我想我可以手动读出字节并编辑它们,但在我继续研究中,我得到了关于区域文件是否被 gzip 压缩的相互矛盾的答案。

我完成了足够的代码来读取一些原始字节,但字节值没有按我预期的那样出现。

根据我关于 NBT 文件的信息,它们都以 CompoundTag 开头,而 CompoundTag 以单个字节开头,值为 10 或 x0A。这是我获得格式信息的地方:https : //minecraft.gamepedia.com/NBT_format

这是实际出现的屏幕截图:

Java 中的字节读取代码和输出

注意:截图中的类描述不准确。我只是快速填充足够读取字节,而不是充实 UI 功能。

我认为这些字节作为无意义出现是文件被压缩的标志。我发现这是 gzip 问题的开始:http : //gnuwin32.sourceforge.net/packages/gzip.htm

我想如果我能安装它,它会解压缩这个 .mca 文件,我可以按预期读取字节,但我不明白安装说明。它说使用“​​Shell 命令,‘configure’,‘make’和‘make install’”。对我来说这听起来像 Unix,但我下载的文件是用于 Windows 的?没有任何exe文件,但有相当多的C文件。我没有 C 编译器。. .

注意:我仍然没有让 gzip 软件工作。

发布脚本

我在这里看到过类似的问题,但所有这些问题要么是旧的(2016 年),要么是与曾经工作过的软件的死链接,要么是最近的并且没有得到答复。我在 5 个月前发现了这个问题的一个特定副本,但我必须注册一个帐户才能发表评论。这是链接:如何读取 Minecraft .mca 文件以便在 python 中我可以提取单个块?他的问题是关于 Python 实现的。他说他找到了一个 Python 的 NBT 库,但它拒绝了他的 MCA 文件,因为它没有被压缩

因为我有 NBTExplorer 源代码(请参阅我发布的答案),所以我在理解这个问题方面有领先优势,但我必须更新它是如何解决的。至于修复我的世界,我想我现在有一个可行的解决方案。

如果有人能给我指出一个带有源代码的完整 Java 库,它会打开 .mca 或与此主题相关的讨论板,那会很酷。我仍然对文件压缩的​​工作方式感兴趣,但这可能超出了这个问题的范围。我意识到这与错误或错误没有直接关系;更重要的是,我不知道要采取哪些进一步的步骤来制作完成此任务的代码。

更新

我找到了其他人的程序来执行此操作并将其作为答案发布,但我仍然想知道文件是如何从字节转换为可用信息的。使用我贴出的答案的手动编辑方法,我最多需要241,664个手动编辑,所以我仍然需要更好的解决方案。

Cak*_*ate 1

我找到编辑了!

现在我可以编辑,但我不知道编辑是如何进行的。我什么也没学到,但我终于找到了别人的编辑。不完全是我想要的,因为我想知道自己如何做到这一点。

更新:要使用此软件修复区域,我必须手动编辑 2 个字段,最多 32x32 块,并且我需要修复118 个区域。**这是 241,664 次潜在的手动编辑!这个解决方案在合理的时间范围内不可行,但它是迄今为止我拥有的最好的解决方案:

我找到了这个页面: https: //fileinfo.com/extension/mca

链接到此页面:https://fileinfo.com/software/nbtexplorer/nbtexplorer

链接到此页面:https://github.com/jaquadro/NBTExplorer/releases

我安装了该软件,它自动链接到 .minecraft 文件夹,这是 GUI 的屏幕截图:

在此输入图像描述

好的一面是,应用程序下载页面还有一个源代码的下载链接,所以我打算阅读它!到目前为止我已经打开了两个文件看了一下,它们根本没有评论。它们也是用 C# 编写的,我以前从未见过,但我听说它与 Java 非常相似,所以也许我也会学习该语言。