summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTahg <tahgtahv@gmail.com>2012-03-01 22:57:30 -0500
committerTahg <tahgtahv@gmail.com>2012-03-01 23:02:59 -0500
commiteddefa6c507b54e71f5a4c31ff27ba1aeb6ffe14 (patch)
tree7eca7fbd93a70a980e01bbc52b181edd4663b45b /src
parentbcf979b2a6c35a4cef91b7966d87a350b23e300e (diff)
downloadcraftbukkit-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')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java18
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;