summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Adams <dinnerbone@dinnerbone.com>2012-01-15 12:00:38 +0000
committerNathan Adams <dinnerbone@dinnerbone.com>2012-01-15 12:01:11 +0000
commit65f30fd99d2a31d5980eafda3ac70028208f08af (patch)
tree4ff14fef200511049f0f96d2e0c8cb22a25b707a
parent233de0de2cc02150c57936b151981bd99ac2e8c6 (diff)
downloadcraftbukkit-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.java45
-rw-r--r--src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java29
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;
+ }
+}