如何解码 Minecraft 原理图 (nbt) 文件中的数据(即块状态)字节?
How to decode Data (ie block state) bytes in Minecraft schematic (nbt) file?
我正在用 following structure
解析 schematic file
The .schematic file format was created by the community to store sections of a Minecraft world for use with third-party programs. Schematics are in NBT format
The Named Binary Tag (NBT) file format is an extremely simple structured binary format used by the Minecraft game for a variety of things
方块 Data Value
s 定义 Minecraft 中的部分地形。
我正在检索 the block data
of every Minecraft Block, and need to figure out how to decode these bytes. This is an example for the Stairs
Minecraft Block
我可以使用 nbt-js 来解析整个原理图文件,这使我能够像这样访问块数据:
var b = schem.value.Data.value[index];
我用以下代码楼梯块数据位数据解码
var facing = b & 0x03;
var half = (b >> 2) & 0x01;
var shape = (b >> 3) & 0x03;
这些配置值对于确定楼梯块的渲染方式至关重要。比如我用面值来旋转方块:
block.rotateX(facing);
但是,对于每种块类型,这些位的解释都不同,而且在我能找到的任何地方都没有定义。
不存在适用于所有块的映射
你只需要处理它
这就是为什么 1.13 和扁平化完全删除元数据导致所有块状态在序列化时编码为字符串的全部原因(NBT 是一种序列化数据格式,用于在达到 Anvil 格式之前的几乎所有内容)。在运行时,这些状态被解析并转化为真实的 Object
实例,避免了对魔法值的需要。
所以你不必计算 facing = b & 0x03;
你会得到 {"facing":"east"}
不幸的是,如果您在 1.13 以下工作,您将不得不处理元数据魔法值,并且没有解决方案,除非您可以运行时访问游戏并且可以调用 getStateFromMeta()
(1.10 到 1.12;不确定 1.8 和 1.9 在哪里,因为我从来没有为这些版本修改过。
我正在用 following structure
解析schematic file
The .schematic file format was created by the community to store sections of a Minecraft world for use with third-party programs. Schematics are in NBT format
The Named Binary Tag (NBT) file format is an extremely simple structured binary format used by the Minecraft game for a variety of things
方块 Data Value
s 定义 Minecraft 中的部分地形。
我正在检索 the block data
of every Minecraft Block, and need to figure out how to decode these bytes. This is an example for the Stairs
Minecraft Block
我可以使用 nbt-js 来解析整个原理图文件,这使我能够像这样访问块数据:
var b = schem.value.Data.value[index];
我用以下代码楼梯块数据位数据解码
var facing = b & 0x03;
var half = (b >> 2) & 0x01;
var shape = (b >> 3) & 0x03;
这些配置值对于确定楼梯块的渲染方式至关重要。比如我用面值来旋转方块:
block.rotateX(facing);
但是,对于每种块类型,这些位的解释都不同,而且在我能找到的任何地方都没有定义。
不存在适用于所有块的映射
你只需要处理它
这就是为什么 1.13 和扁平化完全删除元数据导致所有块状态在序列化时编码为字符串的全部原因(NBT 是一种序列化数据格式,用于在达到 Anvil 格式之前的几乎所有内容)。在运行时,这些状态被解析并转化为真实的 Object
实例,避免了对魔法值的需要。
所以你不必计算 facing = b & 0x03;
你会得到 {"facing":"east"}
不幸的是,如果您在 1.13 以下工作,您将不得不处理元数据魔法值,并且没有解决方案,除非您可以运行时访问游戏并且可以调用 getStateFromMeta()
(1.10 到 1.12;不确定 1.8 和 1.9 在哪里,因为我从来没有为这些版本修改过。