我正在编写 1.11.2 Minecraft mod,我需要获取具有特定元数据的 block 的实例。
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());
}
我当前尝试执行此操作发现了一个未本地化名称的 block 。然后(这是不起作用的部分)将所有子 block 放入列表中,然后选择正确的子 block 。
如何从未本地化的名称和元数据中获取具有指定元数据的 block ?
最佳答案
在 1.8 及更高版本中,Minecraft 使用 IBlockState
系统来代表世界中一个方 block 的组合,所以你的领域GetBlock
应该是 IBlockState
不是Block
如果你想用特定的元数据准确地表示一个 block 。您可以使用a.getStateFromMeta(Metadata)
获得 IBlockState
对应于该元数据值。
旁注,您不应该为此使用未本地化的名称,因为它们可能会因其他模组开发人员的突发奇想而发生更改。您应该使用注册表名称,该名称在版本之间很少发生变化,因为它用于存储世界上的 block 。要通过字符串及其注册表名称查找 block ,请使用 ForgeRegistries.BLOCKS.getValue(new ResourceLocation(registryName))
.
关于java - 获取元数据 block 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43529816/