
在Minecraft世界裡,為了生存下去,會需要採集各種的材料來合成。在官方的首個十分鐘教學,材料需要從河邊、陸地上、甚至是地下挖掘取得。為了要讓我們的挖掘工作快而有效率,今天我們就要讓使用者自帶破壞礦石有爆炸效果 - 我們稱之為 - 爆破礦工
,因為今天要做的爆破功能一樣會在打破方塊類別發生時處理,所以我們今天需要的是新增一個方法。
@SubscribeEvent
public void explode(BreakEvent event) {
}
 @SubscribeEvent
 public void explode(BreakEvent event) {
     // 爆炸的來源需要實體,這裡指定玩家 (需要import net.minecraft.entity.player.EntityPlayer)
     EntityPlayer player = event.getPlayer();
     // 爆破的威力 (2代表兩個方塊長的爆炸範圍)
     float power = 2;
     // 爆炸是否要損毀方塊
     boolean destroyBlocks = true;
     // 建立爆破
     event.world.createExplosion(
             // 爆炸來源為玩家
             player,
             // 藉由打破方塊事件的位置來建立爆破
             event.pos.getX(),
             event.pos.getY(),
             event.pos.getZ(),
             power,
             destroyBlocks
     );
 }

 
到這裡可能你會有個疑問了:我們要做的不是爆破礦工嗎?怎麼感覺好像成了破壞王了?
這邊就是設計模組需要注意的地方 - 需要判斷觸發條件。

@SubscribeEvent
public void explodeOre(BreakEvent event) {
    // 透過事件取得被破壞的方塊,若方塊不為礦石方塊(BlockOre),則不做任何事情(return)
    // 這裡需要import net.minecraft.block.BlockOre
    if (!(event.state.getBlock() instanceof BlockOre)) return;
    // 爆炸的來源需要實體,這裡指定玩家 (需要import net.minecraft.entity.player.EntityPlayer)
    EntityPlayer player = event.getPlayer();
    // 爆破的威力 (2代表兩個方塊長的爆炸範圍)
    float power = 2;
    // 爆炸是否要損毀方塊
    boolean destroyBlocks = true;
    // 建立爆破
    event.world.createExplosion(
            // 爆炸來源為玩家
            player,
            // 藉由打破方塊事件的位置來建立爆破
            event.pos.getX(),
            event.pos.getY(),
            event.pos.getZ(),
            power,
            destroyBlocks
    );
}
 
今日額外課題:請試著修改爆炸威力(power)與損毀方塊(destroyBlocks)的參數,看看會發生什麼事吧!