diff options
author | Nathan Adams <dinnerbone@dinnerbone.com> | 2012-01-15 12:00:38 +0000 |
---|---|---|
committer | Nathan Adams <dinnerbone@dinnerbone.com> | 2012-01-15 12:01:11 +0000 |
commit | 65f30fd99d2a31d5980eafda3ac70028208f08af (patch) | |
tree | 4ff14fef200511049f0f96d2e0c8cb22a25b707a | |
parent | 233de0de2cc02150c57936b151981bd99ac2e8c6 (diff) | |
download | craftbukkit-65f30fd99d2a31d5980eafda3ac70028208f08af.tar craftbukkit-65f30fd99d2a31d5980eafda3ac70028208f08af.tar.gz craftbukkit-65f30fd99d2a31d5980eafda3ac70028208f08af.tar.lz craftbukkit-65f30fd99d2a31d5980eafda3ac70028208f08af.tar.xz craftbukkit-65f30fd99d2a31d5980eafda3ac70028208f08af.zip |
Dragons now throw events when creating portals
-rw-r--r-- | src/main/java/net/minecraft/server/EntityEnderDragon.java | 45 | ||||
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java | 29 |
2 files changed, 61 insertions, 13 deletions
diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java index 99ffd2f2..77416b8e 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -9,8 +9,13 @@ import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.Location; +import org.bukkit.event.entity.EntityCreatePortalEvent; import java.util.ArrayList; +import org.bukkit.PortalType; +import org.bukkit.block.BlockState; +import org.bukkit.craftbukkit.util.BlockStateListPopulator; // CraftBukkit end public class EntityEnderDragon extends EntityComplex { @@ -584,6 +589,10 @@ public class EntityEnderDragon extends EntityComplex { BlockEnderPortal.a = true; byte b0 = 4; + + // CraftBukkit start - Replace any "this.world" in the following with just "world"! + EntityCreatePortalEvent event = new EntityCreatePortalEvent(this.getBukkitEntity(), new ArrayList<BlockState>(), PortalType.ENDER); + BlockStateListPopulator world = new BlockStateListPopulator(this.world.getWorld(), event.getBlocks()); for (int l = k - 1; l <= k + 32; ++l) { for (int i1 = i - b0; i1 <= i + b0; ++i1) { @@ -595,29 +604,39 @@ public class EntityEnderDragon extends EntityComplex { if (d2 <= (double) b0 - 0.5D) { if (l < k) { if (d2 <= (double) (b0 - 1) - 0.5D) { - this.world.setTypeId(i1, l, j1, Block.BEDROCK.id); + world.setTypeId(i1, l, j1, Block.BEDROCK.id); } } else if (l > k) { - this.world.setTypeId(i1, l, j1, 0); + world.setTypeId(i1, l, j1, 0); } else if (d2 > (double) (b0 - 1) - 0.5D) { - this.world.setTypeId(i1, l, j1, Block.BEDROCK.id); + world.setTypeId(i1, l, j1, Block.BEDROCK.id); } else { - this.world.setTypeId(i1, l, j1, Block.ENDER_PORTAL.id); + world.setTypeId(i1, l, j1, Block.ENDER_PORTAL.id); } } } } } - this.world.setTypeId(i, k + 0, j, Block.BEDROCK.id); - this.world.setTypeId(i, k + 1, j, Block.BEDROCK.id); - this.world.setTypeId(i, k + 2, j, Block.BEDROCK.id); - this.world.setTypeId(i - 1, k + 2, j, Block.TORCH.id); - this.world.setTypeId(i + 1, k + 2, j, Block.TORCH.id); - this.world.setTypeId(i, k + 2, j - 1, Block.TORCH.id); - this.world.setTypeId(i, k + 2, j + 1, Block.TORCH.id); - this.world.setTypeId(i, k + 3, j, Block.BEDROCK.id); - this.world.setTypeId(i, k + 4, j, Block.DRAGON_EGG.id); + world.setTypeId(i, k + 0, j, Block.BEDROCK.id); + world.setTypeId(i, k + 1, j, Block.BEDROCK.id); + world.setTypeId(i, k + 2, j, Block.BEDROCK.id); + world.setTypeId(i - 1, k + 2, j, Block.TORCH.id); + world.setTypeId(i + 1, k + 2, j, Block.TORCH.id); + world.setTypeId(i, k + 2, j - 1, Block.TORCH.id); + world.setTypeId(i, k + 2, j + 1, Block.TORCH.id); + world.setTypeId(i, k + 3, j, Block.BEDROCK.id); + world.setTypeId(i, k + 4, j, Block.DRAGON_EGG.id); + + this.world.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + for (BlockState state : event.getBlocks()) { + state.update(true); + } + } + // CraftBukkit end + BlockEnderPortal.a = false; } diff --git a/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java b/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java new file mode 100644 index 00000000..eb83172e --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java @@ -0,0 +1,29 @@ +package org.bukkit.craftbukkit.util; + +import java.util.List; +import org.bukkit.World; +import org.bukkit.block.BlockState; + +public class BlockStateListPopulator { + private final World world; + private final List<BlockState> list; + + public BlockStateListPopulator(World world, List<BlockState> list) { + this.world = world; + this.list = list; + } + + public void setTypeId(int x, int y, int z, int type) { + BlockState state = world.getBlockAt(x, y, z).getState(); + state.setTypeId(type); + list.add(state); + } + + public List<BlockState> getList() { + return list; + } + + public World getWorld() { + return world; + } +} |