summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2012-11-17 10:03:16 -0600
committerTravis Watkins <amaranth@ubuntu.com>2012-11-17 15:00:14 -0600
commitdca54ff187fa10f37523ff744b765b66d177967e (patch)
tree4f4bbed6473be8963281698cf35694b811ad9f0e /src/main/java
parent0c78ce40e595243617e8093388ab5622bea3be32 (diff)
downloadcraftbukkit-dca54ff187fa10f37523ff744b765b66d177967e.tar
craftbukkit-dca54ff187fa10f37523ff744b765b66d177967e.tar.gz
craftbukkit-dca54ff187fa10f37523ff744b765b66d177967e.tar.lz
craftbukkit-dca54ff187fa10f37523ff744b765b66d177967e.tar.xz
craftbukkit-dca54ff187fa10f37523ff744b765b66d177967e.zip
Fire BlockSpreadEvent for vine growth. Fixes BUKKIT-1097
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/BlockVine.java30
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java13
2 files changed, 36 insertions, 7 deletions
diff --git a/src/main/java/net/minecraft/server/BlockVine.java b/src/main/java/net/minecraft/server/BlockVine.java
index 5fc654e2..7217e32f 100644
--- a/src/main/java/net/minecraft/server/BlockVine.java
+++ b/src/main/java/net/minecraft/server/BlockVine.java
@@ -2,6 +2,8 @@ package net.minecraft.server;
import java.util.Random;
+import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
+
public class BlockVine extends Block {
public BlockVine(int i) {
@@ -201,7 +203,11 @@ public class BlockVine extends Block {
}
if (l1 > 0) {
- world.setTypeIdAndData(i, j + 1, k, this.id, l1);
+ // CraftBukkit start - fire BlockSpreadEvent
+ org.bukkit.block.Block source = world.getWorld().getBlockAt(i, j, k);
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j + 1, k);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, i2);
+ // CraftBukkit end
}
}
} else {
@@ -220,24 +226,34 @@ public class BlockVine extends Block {
} else {
i2 = k1 + 1 & 3;
j2 = k1 + 3 & 3;
+ // CraftBukkit start - fire BlockSpreadEvent
+ org.bukkit.block.Block source = world.getWorld().getBlockAt(i, j, k);
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(i + Direction.a[k1], j, k + Direction.b[k1]);
if ((i1 & 1 << i2) != 0 && this.e(world.getTypeId(i + Direction.a[k1] + Direction.a[i2], j, k + Direction.b[k1] + Direction.b[i2]))) {
- world.setTypeIdAndData(i + Direction.a[k1], j, k + Direction.b[k1], this.id, 1 << i2);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, 1 << i2);
} else if ((i1 & 1 << j2) != 0 && this.e(world.getTypeId(i + Direction.a[k1] + Direction.a[j2], j, k + Direction.b[k1] + Direction.b[j2]))) {
- world.setTypeIdAndData(i + Direction.a[k1], j, k + Direction.b[k1], this.id, 1 << j2);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, 1 << j2);
} else if ((i1 & 1 << i2) != 0 && world.isEmpty(i + Direction.a[k1] + Direction.a[i2], j, k + Direction.b[k1] + Direction.b[i2]) && this.e(world.getTypeId(i + Direction.a[i2], j, k + Direction.b[i2]))) {
- world.setTypeIdAndData(i + Direction.a[k1] + Direction.a[i2], j, k + Direction.b[k1] + Direction.b[i2], this.id, 1 << (k1 + 2 & 3));
+ block = world.getWorld().getBlockAt(i + Direction.a[k1] + Direction.a[i2], j, k + Direction.b[k1] + Direction.b[i2]);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, 1 << (k1 + 2 & 3));
} else if ((i1 & 1 << j2) != 0 && world.isEmpty(i + Direction.a[k1] + Direction.a[j2], j, k + Direction.b[k1] + Direction.b[j2]) && this.e(world.getTypeId(i + Direction.a[j2], j, k + Direction.b[j2]))) {
- world.setTypeIdAndData(i + Direction.a[k1] + Direction.a[j2], j, k + Direction.b[k1] + Direction.b[j2], this.id, 1 << (k1 + 2 & 3));
+ block = world.getWorld().getBlockAt(i + Direction.a[k1] + Direction.a[j2], j, k + Direction.b[k1] + Direction.b[j2]);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, 1 << (k1 + 2 & 3));
} else if (this.e(world.getTypeId(i + Direction.a[k1], j + 1, k + Direction.b[k1]))) {
- world.setTypeIdAndData(i + Direction.a[k1], j, k + Direction.b[k1], this.id, 0);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, 0);
}
+ // CraftBukkit end
}
} else if (j > 1) {
l1 = world.getTypeId(i, j - 1, k);
if (l1 == 0) {
i2 = world.random.nextInt(16) & i1;
if (i2 > 0) {
- world.setTypeIdAndData(i, j - 1, k, this.id, i2);
+ // CraftBukkit start - fire BlockSpreadEvent
+ org.bukkit.block.Block source = world.getWorld().getBlockAt(i, j, k);
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j - 1, k);
+ CraftEventFactory.handleBlockSpreadEvent(block, source, this.id, i2);
+ // CraftBukkit end
}
} else if (l1 == this.id) {
i2 = world.random.nextInt(16) & i1;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 370980ed..73945848 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -288,6 +288,19 @@ public class CraftEventFactory {
return event;
}
+ public static void handleBlockSpreadEvent(Block block, Block source, int type, int data) {
+ BlockState state = block.getState();
+ state.setTypeId(type);
+ state.setRawData((byte) data);
+
+ BlockSpreadEvent event = new BlockSpreadEvent(block, source, state);
+ Bukkit.getPluginManager().callEvent(event);
+
+ if (!event.isCancelled()) {
+ state.update(true);
+ }
+ }
+
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim) {
return callEntityDeathEvent(victim, new ArrayList<org.bukkit.inventory.ItemStack>(0));
}