diff options
author | Tahg <tahgtahv@gmail.com> | 2012-03-01 22:57:30 -0500 |
---|---|---|
committer | Tahg <tahgtahv@gmail.com> | 2012-03-01 23:02:59 -0500 |
commit | eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14 (patch) | |
tree | 7eca7fbd93a70a980e01bbc52b181edd4663b45b /src/main/java | |
parent | bcf979b2a6c35a4cef91b7966d87a350b23e300e (diff) | |
download | craftbukkit-eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14.tar craftbukkit-eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14.tar.gz craftbukkit-eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14.tar.lz craftbukkit-eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14.tar.xz craftbukkit-eddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14.zip |
Preserve data if possible when dropping Items from entities. Partial solution for BUKKIT-15
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 5c85f92c..abf81e09 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -288,7 +288,15 @@ public class CraftEventFactory { victim.expToDrop = event.getDroppedExp(); for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { - world.dropItemNaturally(entity.getLocation(), stack); + if (stack == null || stack.getType() == Material.AIR) continue; + + if (stack instanceof CraftItemStack) { + // Use the internal item to preserve possible data. + victim.a(((CraftItemStack) stack).getHandle(), 0.0f); + } + else { + world.dropItemNaturally(entity.getLocation(), stack); + } } return event; @@ -310,7 +318,13 @@ public class CraftEventFactory { for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { if (stack == null || stack.getType() == Material.AIR) continue; - world.dropItemNaturally(entity.getLocation(), stack); + if (stack instanceof CraftItemStack) { + // Use the internal item to preserve possible data. + victim.a(((CraftItemStack) stack).getHandle(), 0.0f); + } + else { + world.dropItemNaturally(entity.getLocation(), stack); + } } return event; |