如何用Python将Minecraft基岩版mcstructure文件转换为字典
基岩版.mcstructure文件转Python字典解决方案
错误原因说明
基岩版.mcstructure采用未压缩小端序NBT存储,你之前使用的nbt/nbtlib/Python-nbt三个库默认适配Java版大端序gzip压缩NBT,参数不匹配才会出现gzip报错、读取乱码的问题。
可行实现方案
1. 依赖安装
选用专门适配基岩版NBT格式的amulet-nbt库,执行安装命令:pip install amulet-nbt
2. 转换代码示例
import amulet_nbt def mcstructure_to_dict(file_path: str) -> dict: # 加载基岩版未压缩小端NBT文件 nbt_object = amulet_nbt.load( file_path, little_endian=True, compressed=False ) # 递归转换NBT对象为Python原生数据类型 def parse_nbt(nbt_item): if isinstance(nbt_item, amulet_nbt.Compound): return {key: parse_nbt(value) for key, value in nbt_item.items()} elif isinstance(nbt_item, amulet_nbt.List): return [parse_nbt(item) for item in nbt_item] elif isinstance(nbt_item, (amulet_nbt.Byte, amulet_nbt.Short, amulet_nbt.Int, amulet_nbt.Long, amulet_nbt.Float, amulet_nbt.Double)): return nbt_item.value elif isinstance(nbt_item, amulet_nbt.String): return str(nbt_item) elif isinstance(nbt_item, (amulet_nbt.ByteArray, amulet_nbt.IntArray, amulet_nbt.LongArray)): return list(nbt_item.value) else: return nbt_item return parse_nbt(nbt_object)
3. 后续使用说明
- 若读取的是特殊压缩过的
.mcstructure文件,将compressed参数改为True即可 - 转换后的Python字典完全匹配基岩版结构数据规范,可直接遍历其中的方块调色板和方块索引字段统计各材料数量,实现材料清单生成功能
内容的提问来源于stack exchange,提问作者DaNubCoding
相关产品推荐
相关产品推荐

