Rework skull dropping. Fixes BUKKIT-2930 and BUKKIT-2820

Skulls need their tile entity in order to create an item correctly when
broken unlike every other block. Instead of sprinkling special cases all
over the code just override dropNaturally for skulls to read from their
tile entity and make sure everything that wants to drop them calls this
method before removing the block. There is only one case where this wasn't
already true so we end up with much less special casing.
This commit is contained in:
Travis Watkins
2012-11-14 19:52:40 -06:00
parent 092800af26
commit df69ea8814
5 changed files with 24 additions and 22 deletions

View File

@@ -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);
}