获取元数据块的实例
Get Instance of Metadata block
我正在编写 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.8 及以上版本中,Minecraft 使用 IBlockState
系统来表示世界中方块的组合,因此您的字段 GetBlock
应该是 IBlockState
而不是 Block
如果你想用特定的元数据准确地表示一个块。您可以使用 a.getStateFromMeta(Metadata)
获取对应于该元数据值的 IBlockState
。
旁注,您不应该为此使用未本地化的名称,因为它们可能会因另一位 mod 开发人员的心血来潮而更改。您应该使用在版本之间很少更改的注册表名称,因为它用于存储世界中的块。要通过带有注册表名称的字符串查找块,请使用 ForgeRegistries.BLOCKS.getValue(new ResourceLocation(registryName))
.
我正在编写 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.8 及以上版本中,Minecraft 使用 IBlockState
系统来表示世界中方块的组合,因此您的字段 GetBlock
应该是 IBlockState
而不是 Block
如果你想用特定的元数据准确地表示一个块。您可以使用 a.getStateFromMeta(Metadata)
获取对应于该元数据值的 IBlockState
。
旁注,您不应该为此使用未本地化的名称,因为它们可能会因另一位 mod 开发人员的心血来潮而更改。您应该使用在版本之间很少更改的注册表名称,因为它用于存储世界中的块。要通过带有注册表名称的字符串查找块,请使用 ForgeRegistries.BLOCKS.getValue(new ResourceLocation(registryName))
.