我正在编写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());
}
我目前的尝试是通过未定位的名称找到一个块。然后(这里是不工作的部分)将所有子块放入列表中,然后选择正确的子块。
如何从未定位的名称和元数据中获取具有指定元数据的块?
答案 0 :(得分:2)
在1.8及以上版本中,Minecraft使用IBlockState
系统来表示世界中某个区块的组合,因此您的字段GetBlock
应为IBlockState
而不是{{1}如果要准确表示具有特定元数据的块。您可以使用Block
获取与该元数据值对应的a.getStateFromMeta(Metadata)
。
旁注,您不应该使用非本地化名称,因为它们可能会随着另一个mod开发人员的突发奇想而改变。您应该使用注册表名称,这些名称在版本之间非常非常少地更改,因为它用于存储世界中的块。要使用字符串查找一个字符串,并使用IBlockState
。