在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)的參數,看看會發生什麼事吧!