NBT解析器:Minecraft的mca文件不是一个gzipped文件错误。

5
我尝试使用NBT 1.4.1模块(命名二进制标签读写器)从文件系统和.mca区域/铁砧文件中读取Minecraft世界,该模块可以读取Minecraft使用的NBT格式。对于诸如level.dat之类的文件,它可以正常工作,但是对于像r.0.0.mca这样的区域文件,则会抛出错误。
编辑:我指的是Minecraft存储在.minecraft/saves/"MyWorld"/文件夹中的自动生成的世界文件。例如level.dat(可以工作)以及存储在.minecraft/saves/"MyWorld"/region/文件夹中的mca文件,例如r.0.0.mca无法工作。我上传了来自我的一个世界的两个示例文件。
代码: from nbt import nbt level_file = nbt.NBTFile("level.dat", "rb") # 可行 region_file = nbt.NBTFile("r.0.0.mca", "rb")# 不可行
错误信息:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 508, in __init__
    self.parse_file()
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 532, in parse_file
    type = TAG_Byte(buffer=self.file)
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 85, in __init__
    self._parse_buffer(buffer)
  File "/usr/local/lib/python3.5/dist-packages/nbt/nbt.py", line 90, in _parse_buffer
    self.value = self.fmt.unpack(buffer.read(self.fmt.size))[0]
  File "/usr/lib/python3.5/gzip.py", line 274, in read
    return self._buffer.read(size)
  File "/usr/lib/python3.5/_compression.py", line 68, in readinto
    data = self.read(len(byte_view))
  File "/usr/lib/python3.5/gzip.py", line 461, in read
    if not self._read_gzip_header():
  File "/usr/lib/python3.5/gzip.py", line 409, in _read_gzip_header
    raise OSError('Not a gzipped file (%r)' % magic)
OSError: Not a gzipped file (b'\x00\x00')

有什么建议可以让这个工作起来吗?


你好,欢迎来到Stack Overflow!请确保你的问题是自包含的,这样别人才能够重现这个问题。具体而言,你能提供一下如何获取你所指的特定数据文件的信息吗? - etov
感谢您的反馈,我已经指定了相关的文件,并上传了一个正常工作的样本文件和一个不正常工作的样本文件并将它们链接在一起。 - Torben545
2个回答

1

r.0.0.mca 绝对没有被压缩。大约80%的字节都是零。


1

事实证明,NBT库只支持约6年前被.mca文件取代的.mcr区域文件。然而,mcedit是用Python编写的,并支持这些文件。由于Minecraft保存格式的变化,内容的解释需要进行调整,但仍然可以成功读取这些文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接