获取元数据块的实例

时间:2017-04-20 21:00:12

标签: java minecraft-forge

我正在编写1.11.2 Minecraft mod,我需要获取具有特定元数据的块的实例。

public BIGOre(String CustomOreDictName, String UnlocalizedBlockName, int Metadata, String Mod)
{
    Block a;
    a = Block.getBlockFromName(UnlocalizedBlockName);

    NonNullList<ItemStack> SubBlocks = NonNullList.create();
    a.getSubBlocks(Item.getItemFromBlock(a), a.getCreativeTabToDisplayOn(), SubBlocks);
    this.GetBlock = Block.getBlockFromItem(SubBlocks.get(Metadata).getItem());
}

我目前的尝试是通过未定位的名称找到一个块。然后(这里是不工作的部分)将所有子块放入列表中,然后选择正确的子块。

如何从未定位的名称和元数据中获取具有指定元数据的块?

1 个答案:

答案 0 :(得分:2)

在1.8及以上版本中,Minecraft使用IBlockState系统来表示世界中某个区块的组合,因此您的字段GetBlock应为IBlockState而不是{{1}如果要准确表示具有特定元数据的块。您可以使用Block获取与该元数据值对应的a.getStateFromMeta(Metadata)

旁注,您不应该使用非本地化名称,因为它们可能会随着另一个mod开发人员的突发奇想而改变。您应该使用注册表名称,这些名称在版本之间非常非常少地更改,因为它用于存储世界中的块。要使用字符串查找一个字符串,并使用IBlockState