summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server')
-rw-r--r--src/main/java/net/minecraft/server/BlockSkull.java19
-rw-r--r--src/main/java/net/minecraft/server/Explosion.java11
-rw-r--r--src/main/java/net/minecraft/server/ItemInWorldManager.java6
3 files changed, 23 insertions, 13 deletions
diff --git a/src/main/java/net/minecraft/server/BlockSkull.java b/src/main/java/net/minecraft/server/BlockSkull.java
index 968bd941..d5fd3ad3 100644
--- a/src/main/java/net/minecraft/server/BlockSkull.java
+++ b/src/main/java/net/minecraft/server/BlockSkull.java
@@ -78,8 +78,21 @@ public class BlockSkull extends BlockContainer {
return i;
}
- // CraftBukkit - drop the item like every other block
- // public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {}
+ // CraftBukkit start - special case dropping so we can get info from the tile entity
+ public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {
+ if (world.random.nextFloat() < f) {
+ ItemStack itemstack = new ItemStack(Item.SKULL.id, 1, this.getDropData(world, i, j, k));
+ TileEntitySkull tileentityskull = (TileEntitySkull) world.getTileEntity(i, j, k);
+
+ if (tileentityskull.getSkullType() == 3 && tileentityskull.getExtraType() != null && tileentityskull.getExtraType().length() > 0) {
+ itemstack.setTag(new NBTTagCompound());
+ itemstack.getTag().setString("SkullOwner", tileentityskull.getExtraType());
+ }
+
+ this.b(world, i, j, k, itemstack);
+ }
+ }
+ // CraftBukkit end
public void a(World world, int i, int j, int k, int l, EntityHuman entityhuman) {
if (entityhuman.abilities.canInstantlyBuild) {
@@ -92,7 +105,7 @@ public class BlockSkull extends BlockContainer {
public void remove(World world, int i, int j, int k, int l, int i1) {
if (!world.isStatic) {
- /* CraftBukkit start - don't special code dropping the item
+ /* CraftBukkit start - drop item in code above, not here
if ((i1 & 8) == 0) {
ItemStack itemstack = new ItemStack(Item.SKULL.id, 1, this.getDropData(world, i, j, k));
TileEntitySkull tileentityskull = (TileEntitySkull) world.getTileEntity(i, j, k);
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
index c91c9599..fae57de1 100644
--- a/src/main/java/net/minecraft/server/Explosion.java
+++ b/src/main/java/net/minecraft/server/Explosion.java
@@ -264,18 +264,13 @@ public class Explosion {
// CraftBukkit - stop explosions from putting out fire
if (l > 0 && l != Block.FIRE.id) {
- // 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 block = Block.byId[l];
if (block.a(this)) {
- block.dropNaturally(this.world, i, j, k, data, event.getYield(), 0);
+ // CraftBukkit
+ block.dropNaturally(this.world, i, j, k, this.world.getData(i, j, k), 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 389a3ed9..771c05f0 100644
--- a/src/main/java/net/minecraft/server/ItemInWorldManager.java
+++ b/src/main/java/net/minecraft/server/ItemInWorldManager.java
@@ -290,9 +290,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);
+ if (l == Block.SKULL.id && !this.isCreative()) {
+ Block.SKULL.dropNaturally(world, i, j, k, i1, 1.0F, 0);
+ return this.d(i, j, k);
}
// CraftBukkit end