summaryrefslogtreecommitdiffstats
path: root/src/main/java/net
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2012-10-29 12:38:34 -0500
committerTravis Watkins <amaranth@ubuntu.com>2012-10-29 12:54:16 -0500
commit216cddb2ab1473c642c40b9f09b612fa0877a13b (patch)
tree0ff5ab825a04bdf550c9bc8ae8699299ffde1c07 /src/main/java/net
parent14f4bd9024cfdeb3a7d04c1ce3e688e38038722d (diff)
downloadcraftbukkit-216cddb2ab1473c642c40b9f09b612fa0877a13b.tar
craftbukkit-216cddb2ab1473c642c40b9f09b612fa0877a13b.tar.gz
craftbukkit-216cddb2ab1473c642c40b9f09b612fa0877a13b.tar.lz
craftbukkit-216cddb2ab1473c642c40b9f09b612fa0877a13b.tar.xz
craftbukkit-216cddb2ab1473c642c40b9f09b612fa0877a13b.zip
Get skull data before destroying block. Fixes BUKKIT-2723
Skull blocks store their type in a tile entity and use their block data as rotation. When breaking a block the block data is used for determining what item to drop. Simply changing this to use the skull method for getting their drop data is not enough because their tile entity is already gone. Therefore we have to special case skulls to get the correct data _and_ get that data before breaking the block.
Diffstat (limited to 'src/main/java/net')
-rw-r--r--src/main/java/net/minecraft/server/Explosion.java10
-rw-r--r--src/main/java/net/minecraft/server/ItemInWorldManager.java5
2 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
index fb30dc10..cf2108c6 100644
--- a/src/main/java/net/minecraft/server/Explosion.java
+++ b/src/main/java/net/minecraft/server/Explosion.java
@@ -264,8 +264,14 @@ public class Explosion {
// CraftBukkit - stop explosions from putting out fire
if (l > 0 && l != Block.FIRE.id) {
- // CraftBukkit
- Block.byId[l].dropNaturally(this.world, i, j, k, this.world.getData(i, j, k), event.getYield(), 0);
+ // CraftBukkit start - special case skulls, add yield
+ int data = this.world.getData(i, j, k);
+ if (l == Block.SKULL.id) {
+ data = Block.SKULL.getDropData(this.world, i, j, k);
+ }
+
+ Block.byId[l].dropNaturally(this.world, i, j, k, data, event.getYield(), 0);
+ // CraftBukkit end
if (this.world.setRawTypeIdAndData(i, j, k, 0, 0, this.world.isStatic)) {
this.world.applyPhysics(i, j, k, 0);
}
diff --git a/src/main/java/net/minecraft/server/ItemInWorldManager.java b/src/main/java/net/minecraft/server/ItemInWorldManager.java
index cb13808f..025c25a7 100644
--- a/src/main/java/net/minecraft/server/ItemInWorldManager.java
+++ b/src/main/java/net/minecraft/server/ItemInWorldManager.java
@@ -291,6 +291,11 @@ public class ItemInWorldManager {
int l = this.world.getTypeId(i, j, k);
if (Block.byId[l] == null) return false; // CraftBukkit - a plugin set block to air without cancelling
int i1 = this.world.getData(i, j, k);
+ // CraftBukkit start - special case skulls, their item data comes from a tile entity
+ if (l == Block.SKULL.id) {
+ i1 = Block.SKULL.getDropData(world, i, j, k);
+ }
+ // CraftBukkit end
this.world.a(this.player, 2001, i, j, k, l + (this.world.getData(i, j, k) << 12));
boolean flag = this.d(i, j, k);