Teach EnderDragon how to throw EntityExplosionEvents when it breaks blocks

We also teach CraftWorld how to explode an event, taken from
Explosion.a(boolean) (the code that breaks blocks and drops them on the ground).

The EnderDragon has a flag that slows it down when it hits unbreakable blocks:
Obsidian, White Stone or Bedrock. It might be useful to extend the event so that
plugins can set this.

Letting the API set the default yield for an explosion event has been
deprecated, so we now set the default yield using the appropriate constructor.

By: Andrew Ardill <andrew.ardill@gmail.com>
This commit is contained in:
CraftBukkit/Spigot 2011-12-08 00:23:06 +11:00
parent e1c6569f8e
commit 927bd1f45d

View file

@ -895,4 +895,21 @@ public class CraftWorld implements World {
public File getWorldFolder() {
return ((WorldNBTStorage)world.getDataManager()).getDirectory();
}
public void explodeBlock(Block block, float yield) {
// First of all, don't explode fire
if (block.getType().equals(Material.FIRE)) {
return;
}
int blockId = block.getTypeId();
int blockX = block.getX();
int blockY = block.getY();
int blockZ = block.getZ();
// following code is lifted from Explosion.a(boolean), and modified
net.minecraft.server.Block.byId[blockId].dropNaturally(this.world, blockX, blockY, blockZ, block.getData(), yield, 0);
block.setType(org.bukkit.Material.AIR);
// not sure what this does, seems to have something to do with the 'base' material of a block.
// For example, WOODEN_STAIRS does something with WOOD in this method
net.minecraft.server.Block.byId[blockId].a_(this.world, blockX, blockY, blockZ);
}
}