summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/DispenseBehaviorItem.java
diff options
context:
space:
mode:
authorJames Clarke <jamesrtclarke@me.com>2012-11-08 00:26:35 +0000
committerTravis Watkins <amaranth@ubuntu.com>2012-11-17 15:06:18 -0600
commita575e6b075ec9e63e942111657d6869e00ad42b5 (patch)
treec49d5e51e40de83fa9d547b8d67af7f67e8f373c /src/main/java/net/minecraft/server/DispenseBehaviorItem.java
parent293474d99b4802bd38e6794b484d91212e8893c8 (diff)
downloadcraftbukkit-a575e6b075ec9e63e942111657d6869e00ad42b5.tar
craftbukkit-a575e6b075ec9e63e942111657d6869e00ad42b5.tar.gz
craftbukkit-a575e6b075ec9e63e942111657d6869e00ad42b5.tar.lz
craftbukkit-a575e6b075ec9e63e942111657d6869e00ad42b5.tar.xz
craftbukkit-a575e6b075ec9e63e942111657d6869e00ad42b5.zip
Use correct itemstack for dispenser behavior chaining. Fixes BUKKIT-2886
When an event changes the item to be dispensed we check to see if the new item has special behavior for dispensing and if so pass it on to that behavior handler. However, we are actually checking the old itemstack and passing the new itemstack so this check fails.
Diffstat (limited to 'src/main/java/net/minecraft/server/DispenseBehaviorItem.java')
-rw-r--r--src/main/java/net/minecraft/server/DispenseBehaviorItem.java23
1 files changed, 7 insertions, 16 deletions
diff --git a/src/main/java/net/minecraft/server/DispenseBehaviorItem.java b/src/main/java/net/minecraft/server/DispenseBehaviorItem.java
index 9cf23dd9..1337fefe 100644
--- a/src/main/java/net/minecraft/server/DispenseBehaviorItem.java
+++ b/src/main/java/net/minecraft/server/DispenseBehaviorItem.java
@@ -65,30 +65,21 @@ public class DispenseBehaviorItem implements IDispenseBehavior {
entityitem.motX = event.getVelocity().getX();
entityitem.motY = event.getVelocity().getY();
entityitem.motZ = event.getVelocity().getZ();
- // CraftBukkit end
-
- world.addEntity(entityitem);
- // CraftBukkit start
if (!event.getItem().equals(bukkitItem)) {
- if (event.getItem().getTypeId() == Item.BUCKET.id) {
- int x = isourceblock.getBlockX() + enumfacing.c();
- int y = isourceblock.getBlockY();
- int z = isourceblock.getBlockZ() + enumfacing.e();
- Material material = world.getMaterial(x, y, z);
- int data = world.getData(x, y, z);
- if (!(Material.WATER.equals(material) || Material.LAVA.equals(material)) || data != 0) {
- return true;
- }
- }
// Chain to handler for new item
- IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.a.a(itemstack.getItem());
+ ItemStack eventStack = CraftItemStack.createNMSItemStack(event.getItem());
+ IDispenseBehavior idispensebehavior = (IDispenseBehavior) BlockDispenser.a.a(eventStack.getItem());
if (idispensebehavior != IDispenseBehavior.a && idispensebehavior.getClass() != DispenseBehaviorItem.class) {
- idispensebehavior.a(isourceblock, CraftItemStack.createNMSItemStack(event.getItem()));
+ idispensebehavior.a(isourceblock, eventStack);
+ } else {
+ world.addEntity(entityitem);
}
return false;
}
+ world.addEntity(entityitem);
+
return true;
// CraftBukkit end
}