diff --git a/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java b/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java index 11d307b..0ef7779 100644 --- a/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java +++ b/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java @@ -1,5 +1,6 @@ package org.bukkit.event.block; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; @@ -45,7 +46,7 @@ */ public void setItem(ItemStack item) { - this.item = item; + this.item = item == null ? new ItemStack(Material.AIR) : item; } /** diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorDefaultDispenseItem.java b/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorDefaultDispenseItem.java index a6152fc..f833494 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorDefaultDispenseItem.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorDefaultDispenseItem.java @@ -10,6 +10,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; @@ -52,21 +53,24 @@ Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) return false; - entityitem.setEntityItemStack(CraftItemStack.asNMSCopy(event.getItem())); - entityitem.motionX = event.getVelocity().getX(); - entityitem.motionY = event.getVelocity().getY(); - entityitem.motionZ = event.getVelocity().getZ(); - if (!event.getItem().equals(craftItem)) + if (event.getItem().getType() != Material.AIR) { - ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); - IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); - if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem.getClass() != BehaviorDefaultDispenseItem.class) - ibehaviordispenseitem.dispense(iblocksource, eventStack); - else - world.spawnEntityInWorld(entityitem); - return false; + entityitem.setEntityItemStack(CraftItemStack.asNMSCopy(event.getItem())); + entityitem.motionX = event.getVelocity().getX(); + entityitem.motionY = event.getVelocity().getY(); + entityitem.motionZ = event.getVelocity().getZ(); + if (!event.getItem().equals(craftItem)) + { + ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); + IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); + if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem.getClass() != BehaviorDefaultDispenseItem.class) + ibehaviordispenseitem.dispense(iblocksource, eventStack); + else + world.spawnEntityInWorld(entityitem); + return false; + } + world.spawnEntityInWorld(entityitem); } - world.spawnEntityInWorld(entityitem); return true; } } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorProjectileDispense.java b/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorProjectileDispense.java index 378e9ce..04d103c 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorProjectileDispense.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/dispenser/MixinBehaviorProjectileDispense.java @@ -11,6 +11,7 @@ import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.bukkit.util.Vector; @@ -51,6 +52,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBoat.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBoat.java index 2c45eac..3c5eb1f 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBoat.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBoat.java @@ -62,6 +62,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == org.bukkit.Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBucket.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBucket.java index 5b7368a..1c19111 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBucket.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapBucket.java @@ -57,6 +57,8 @@ return itemStack; if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == org.bukkit.Material.AIR) + return itemStack; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem != this) diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapDye.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapDye.java index 2d58b5a..508f7d8 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapDye.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapDye.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -42,6 +43,8 @@ return itemStack; if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem != this) diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireCharge.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireCharge.java index a0b07e2..a5ddf06 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireCharge.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireCharge.java @@ -9,6 +9,7 @@ import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -48,6 +49,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireworks.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireworks.java index c9f2fc1..e867d41 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireworks.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFireworks.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -39,6 +40,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFlintAndSteel.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFlintAndSteel.java index ab64622..d6e99e2 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFlintAndSteel.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapFlintAndSteel.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -38,6 +39,12 @@ return itemStack; if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + { + if (itemStack.attemptDamageItem(1, world.rand)) + itemStack.stackSize = 0; + return itemStack; + } ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem != this) diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapSpawnEggs.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapSpawnEggs.java index 8db9bae..160b379 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapSpawnEggs.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapSpawnEggs.java @@ -10,6 +10,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -42,6 +43,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapTNT.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapTNT.java index d0f0eb3..7b16964 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapTNT.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapTNT.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Mixin; @@ -40,6 +41,8 @@ } if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return itemStack; itemStack.stackSize++; ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapWaterLavaBucket.java b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapWaterLavaBucket.java index 7cb3dde..14eb63f 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapWaterLavaBucket.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/init/MixinBootstrapWaterLavaBucket.java @@ -11,6 +11,7 @@ import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import org.bukkit.Material; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; import org.spongepowered.asm.mixin.Final; @@ -50,6 +51,8 @@ return itemStack; if (!event.getItem().equals(craftItem)) { + if (event.getItem().getType() == Material.AIR) + return new ItemStack(Items.bucket); ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); IBehaviorDispenseItem ibehaviordispenseitem = (IBehaviorDispenseItem) BlockDispenser.dispenseBehaviorRegistry.getObject(eventStack.getItem()); if (ibehaviordispenseitem != IBehaviorDispenseItem.itemDispenseBehaviorProvider && ibehaviordispenseitem != this)