如何在Minecraft中获取和设置块物品的元数据值?

3

我正在使用Minecraft Forge编写一个Minecraft模块。

我可以使用以下方法从世界中获取一个方块对象:

Block b = world.getBlock(x,y,z);

然而,现在我有了这个方块,如何找出元数据呢?如果这个方块是StoneSteps方块,那么我想知道它的方向,这个信息保存在元数据中。

同样地,我该如何设置这个值呢?我可以很容易地创建一个新的方块:

Block b = Blocks.stone_stairs;

但是,我现在该如何将这个方块设置为特定的方向呢?我知道在创建ItemStack时可以这样做,但在这种情况下,我想要一个可以传递给world.setBlock()的Block对象。

我找不到任何获取和设置此值的方法。


为了未来的观众着想:这是Forge 1.7和Forge 1.8明显不同的情况。在1.7下,您有world.getBlock(int.int,int)world.getBlockMetadata(int,int,int)。然而,在1.8下,您只有world.getBlockState(BlockPos)。'state'是一个新的MC1.8对象,它结合了块类型、数据值,甚至是相应瓦片实体的方面。然后,您可以从状态中提取DV;要设置,您需要从块类型和元数据创建一个新的块状态,然后使用setBlockState() - Steve Shipway
2个回答

1
您可以通过以下方式旋转该块:
yourBlock.rotateBlock(World someWorld, int x, int y, int z, ForgeDirection axis);

来自文档:

旋转方块。对于普通方块,它会围绕传入的轴进行旋转(通常应该是被击中的“面”)。 注意:对于 mod 方块,这取决于方块和 mod 制作者。并不强制要求它围绕面进行旋转,但可以是旋转以定位到该面,或者访问可能的旋转方式。 如果旋转成功,该方法应返回 true。


这看起来是我需要的大部分内容。我假设它旋转世界中的方块,而不是yourBlock对象中的元数据?此外,尽管它指定了围绕其旋转的轴,但似乎没有指定旋转多远...... 此外,这对于例如获取和设置羊毛块的颜色并没有帮助,只能用于方向。 - Steve Shipway
@SteveShipway 方块的旋转不是由易失性的元数据设置的,每次重新加载都会被删除,而是由损伤值控制,这正是问题所在。按照这个答案所说的去做,停止假设。 - Unihedron
似乎我可能使用了错误的术语。我正在尝试获取/设置的值是4位损坏值,或者可能是数据值。然而,函数world.getBlockMetadata(x,y,z)返回它,所以也许它也被称为元数据。文档不清楚...这个函数返回方块方向和羊毛颜色,这正是我想要的,虽然rotateBlock函数也非常有用。 - Steve Shipway

1

你可以在Minecraft 1.8中使用world.getBlockState(BlockPos);,或者在Minecraft 1.7.10中使用getBlockMetadata(int x, int y, int z);


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