Minecraft Forge 添加新方块

Minecraft Forge 添加新方块

新建方块类

添加方块和添加物品大同小异。

可以创建 block.ModBlocks 类并将方块放在这里

定义方块变量

1
2
public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(ForgeRegistries.BLOCKS, TutorialMod.MODID);

注册方块

方块的注册比物品多了几步:

  1. 要把方块以物品形式进行一次注册,用来放入物品栏里面的材质
  2. 将方块以方块形式注册一次,定义一些性质和信息

同样的定义几个辅助方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block, CreativeModeTab tab) {
RegistryObject<T> toRet = BLOCKS.register(name, block);
registerBlockItem(name, toRet, tab);
return toRet;
}

private static <T extends Block> RegistryObject<Item> registerBlockItem(String name, RegistryObject<T> block, CreativeModeTab tab) {
return ModItems.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties().tab(tab)));
}


public static void register(IEventBus eventBus) {
BLOCKS.register(eventBus);
}

之后注册方块,为这个类增加成员

1
2
3
4
5
6
public static final RegistryObject<Block> BEAR_BLOCK = registerBlock(
"bear_block",
() -> new Block(BlockBehaviour.Properties.of(Material.STONE)
.strength(1f).requiresCorrectToolForDrops()),
ModCreativeTab.tutorialmod_tab
);

在这个方块中,方块的注册名称是 bear_block ,属性使用石头材料,硬度设置为 1,需要正确的工具才能让他有掉落物

最后在主类的构造方法中,注册方块

1
ModBlocks.register(modEventBus);

绑定材质

新建 blockstate/bear_block.json,写入

1
2
3
4
5
6
7
{
"variants": {
"": {
"model": "tutorialmod:block/bear_block"
}
}
}

新建 models/block/bear_block.json 写入

1
2
3
4
5
6
{
"parent": "block/cube_all",
"textures": {
"all": "tutorialmod:block/bear_block"
}
}

这个文件把每个面都设置成同样的图片

新建 models/item/bear_block.json

1
2
3
{
"parent": "tutorialmod:block/bear_block"
}

之后把材质图片放进 textures/block/bear_block.png

绑定翻译

在翻译文件中增加一条

1
2
3
{
"block.tutorialmod.bear_block": "Bear Block"
}

中文同理

之后就可以启动了

image-20240714200638830