如何读取 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) # {}
我找不到可以在 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) # {}