Minecraft Forge 方块创建 1.16.5

Minecraft Forge block creation 1.16.5

我正在制作锻造 mod,目前正在尝试制作方块。我找不到任何关于如何创建块的文档,而且我正在观看的教程不起作用。这是我的代码:

public class ModBlocks {
    public static final RegistryObject<Block> SILVER_ORE = register("silver_ore", () ->
            new Block(new AbstractBlock.Properties.create(Material.STONE).requiresCorrectToolForDrops().sound(SoundType.STONE)));

    static void register() {}

    private static <T extends Block> RegistryObject<T> registerNoItem(String name, Supplier<T> block) {
        return Registration.BLOCKS.register(name, block);
    }

    private static <T extends Block> RegistryObject<T> register(String name, Supplier<T> block) {
        RegistryObject<T>  ret = registerNoItem(name, block);
        Registration.ITEMS.register(name, () -> new BlockItem(ret.get(), new Item.Properties().tab(ItemGroup.TAB_BUILDING_BLOCKS)));
    }
}

问题出在

 new Block(new AbstractBlock.Properties.create(Material.STONE).requiresCorrectToolForDrops().sound(SoundType.STONE)));

行。

提前致谢!

问题是,您正在调用 NEW AbstractBlock.Properties.create(/*...*/),而编译器运行:

  1. new,所以我希望有一个构造函数
  2. AbstractBlock.东西所以接下来一定有一个嵌套类型
  3. Properties.东西所以接下来一定有一个嵌套类型
  4. create(...)肯定是构造函数,create一定是嵌套类型
  5. 没有名为 AbstractBlock.Properties.create 的类型,所以肯定有错误

要解决此问题,只需删除 AbstractBlock 之前的 new,您不需要它。它有点被 create 函数取代,它是静态的并且 returns 新对象本身。

.create 方法已不复存在。您必须像这样使用供应商:
()-> new Block(AbstractBlock.Properties.of(Material.STONE).(*some preperties*)

这是映射。 AbstractBlock.Properties.create 在 MCP 映射中,AbstractBlock.Properties.of 在默认的“官方”映射中。有关如何更改映射的信息,请参阅 https://minecraft.fandom.com/wiki/Tutorials/Creating_Forge_mods 步骤 3-1/2。

您可以查看其他块,了解它们在添加到您的开发环境的反编译源代码中是如何做到的。结帐 net.minecraft.block.Blocks.java

试试这个:

public class ModBlocks {
    public static final RegistryObject<Block> SILVER_ORE = register("silver_ore", () ->
        new Block(new AbstractBlock.Properties.of(Material.STONE).requiresCorrectToolForDrops().sound(SoundType.STONE)));

    static void register() {}

    private static <T extends Block> RegistryObject<T> registerNoItem(String name, Supplier<T> block) {
        return Registration.BLOCKS.register(name, block);
    }

    private static <T extends Block> RegistryObject<T> register(String name, Supplier<T> block) {
        RegistryObject<T>  ret = registerNoItem(name, block);
        Registration.ITEMS.register(name, () -> new BlockItem(ret.get(), new Item.Properties().tab(ItemGroup.TAB_BUILDING_BLOCKS)));
    }
}