如何读取 Minecraft .mca 文件以便在 python 中提取单个块?

How can read Minecraft .mca files so that in python I can extract individual blocks?

我找不到可以在 python

中使用的读取 Minecraft 世界文件的方法

我在互联网上四处寻找,但没有找到任何教程,只有少数库声称可以做到这一点,但从未真正起作用

from nbt import *
nbtfile = nbt.NBTFile("r.0.0.mca",'rb')

我原以为这会起作用,但我却收到关于文件未被压缩或类似问题的错误

OSError: 不是 gzip 文件 (b'\x00\x00')

全部错误: raceback(最后一次通话): 文件 "C:\Users\rober\Desktop\MinePy\MinecraftWorldReader.py",第 2 行,位于 nbtfile = nbt.NBTFile("r.0.0.mca",'rb') init 中的文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py",第 628 行 self.parse_file() 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py",第 652 行,在 parse_file 中 类型 = TAG_Byte(缓冲区=self.file) 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py",第 99 行,在 init 中 self._parse_buffer(缓冲区) 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nbt\nbt.py",第 105 行,在 _parse_buffer 中 self.value = self.fmt.unpack(buffer.read(self.fmt.size))[0] 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\gzip.py",第 276 行,已读 return self._buffer.read(尺寸) 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib_compression.py",第 68 行,在读入中 数据 = self.read(len(byte_view)) 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\gzip.py",第 463 行,已读 如果不是 self._read_gzip_header(): 文件 "C:\Users\rober\AppData\Local\Programs\Python\Python36-32\lib\gzip.py",第 411 行,在 _read_gzip_header 中 提高 OSError('Not a gzipped file (%r)' % 魔法) OSError: 不是压缩文件 (b'\x00\x00') [0.2 秒内完成]

如有任何帮助,我们将不胜感激,

Robert

使用 anvil 解析器。 (安装 pip install anvil-parser

Reading

import anvil

region = anvil.Region.from_file('r.0.0.mca')

# You can also provide the region file name instead of the object
chunk = anvil.Chunk.from_region(region, 0, 0)

# If `section` is not provided, will get it from the y coords
# and assume it's global
block = chunk.get_block(0, 0, 0)

print(block) # <Block(minecraft:air)>
print(block.id) # air
print(block.properties) # {}

https://pypi.org/project/anvil-parser/