创建简单方块

在学习了创建物品之后,我们还要学习创建方块。创建方块和物品有些类似,但还是有一些不同。因为我们平时在物品栏中的方块,其实都是物品,只有放在世界中的方块才是真正的方块。因此,我们创建方块时,不仅要注册这个方块,还需要注册这个方块的物品形态。例如末地传送门,它只能放在世界中,却不能拿在手上,就是因为末地传送门只注册了方块,而没有注册它的物品形态

直接开始

实例化并创建方块的部分和物品差不多,代码如下:

src/main/java/xyz/bzstudio/modderguide/block/MGBlocks.java (部分)

public static final DeferredRegister<Block> BLOCKS = new DeferredRegister<>(ForgeRegistries.BLOCKS, ModderGuide.MODID);
public static final RegistryObject<Block> TEST_BLOCK = BLOCKS.register("test_block", () -> {
    return new Block(Block.Properties.create(...));
});

区别就在于Properties,这里的Properties与物品的有区别,需要使用create()方法进行创建,还需要传入一个Material

Material,顾名思义,就是方块的材质。Minecraft会通过Material来判定方块的一些属性。例如,如果读者传入Material.WOOD,那么该方块将具有类似于木头的属性,例如可燃烧、可使用斧头加快挖掘速度等。在本文则以Material.ROCK (岩石) 为例。

new Block(Block.Properties.create(Material.ROCK));

别忘了Properties的其它方法,例如sound()hardnessAndResistance()等方法。至于意思,你应该能理解。

最后,别忘了在主类添加事件监听。

打开游戏,你应该可以通过/setblock指令放置方块了。

方块的物品形态

但你会发现,我们的方块无法拿在手上。因为我们没有注册它的物品形态。

Minecraft提供了一个叫BlockItem的类,这个类其实就是个Item,但它充当着沟通物品与方块的角色。我们只要在MGItems里注册即可。

src/main/java/com/github/modderguide/item/MGItems (部分)

public static final RegistryObject<Item> TEST_BLOCK = ITEMS.register("test_block", () -> {
    return new BlockItem(MGBlocks.TEST_BLOCK.get(), new Item.Properties().group(MGItemGroup.MODDERGUIDE));
});

方块的战利品表

但你应该会发现,我们在生存模式时挖掉该方块却不会掉落物品。这是因为我们的方块还没有战利品表。战利品表就是掉落物表,不仅方块的掉落物要靠战利品表指定,实体的掉落物也要靠它。

Minecraft的方块的战利品表存放在data/minecraft/loot_tables/blocks,因此我们也在src/main/resources下新建目录data/<modid>/loot_tables/blocks,然后我们参考原版的写法,自己写一个战利品表即可。

src/main/resources/data/modderguide/loot_tables/blocks/test_block.json

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "modderguide:test_block"
        }
      ],
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ]
    }
  ]
}

现在打开游戏,我们的方块应该已经成功创建了~

results matching ""

    No results matching ""