java - 获取元数据 block 的实例

标签 java minecraft-forge

我正在编写 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/

相关文章:

java - 使用 Java 从 ArrayList 中删除所有空的 ArrayList

java - 我的 DamageReductionAmmounts 导致 Minecraft 崩溃

java - FML Gradle-失败:生成失败,出现异常

java - 为什么箭头会击中玩家?我的世界模组 1.8

java - 直接使用java在Oracle数据库中创建函数

java - Android - TextView 上的 NullPointerException

java - 将 MouseAdapter 列表的所有元素添加到 JComponent

java - 在 Swing 中打印度数符号 (°) 时出现问题

maven - Intellij IDEA Maven 导入问题

java - 我怎样才能给玩家一个随机 block ?谢谢! (我的世界 Forge 模组 1.15)