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(/*...*/)
,而编译器运行:
- 有
new
,所以我希望有一个构造函数
- 有
AbstractBlock.
东西所以接下来一定有一个嵌套类型
- 有
Properties.
东西所以接下来一定有一个嵌套类型
- 有
create(...)
肯定是构造函数,create
一定是嵌套类型
- 没有名为
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)));
}
}
我正在制作锻造 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(/*...*/)
,而编译器运行:
- 有
new
,所以我希望有一个构造函数 - 有
AbstractBlock.
东西所以接下来一定有一个嵌套类型 - 有
Properties.
东西所以接下来一定有一个嵌套类型 - 有
create(...)
肯定是构造函数,create
一定是嵌套类型 - 没有名为
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)));
}
}