diff --git a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java index 2c71e77..87bfffe 100644 --- a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java +++ b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java @@ -125,7 +125,7 @@ reg(false, org.bukkit.event.inventory.CraftItemEvent.class); reg(true, org.bukkit.event.inventory.FurnaceBurnEvent.class); reg(false, org.bukkit.event.inventory.FurnaceExtractEvent.class); - reg(false, org.bukkit.event.inventory.FurnaceSmeltEvent.class); + reg(true, org.bukkit.event.inventory.FurnaceSmeltEvent.class); reg(false, org.bukkit.event.inventory.InventoryClickEvent.class); reg(false, org.bukkit.event.inventory.InventoryCloseEvent.class); reg(false, org.bukkit.event.inventory.InventoryCreativeEvent.class); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/tileentity/MixinTileEntityFurnace.java b/src/main/java/org/ultramine/mods/bukkit/mixin/tileentity/MixinTileEntityFurnace.java index e73a0bf..015c2ba 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/tileentity/MixinTileEntityFurnace.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/tileentity/MixinTileEntityFurnace.java @@ -3,10 +3,12 @@ import net.minecraft.block.BlockFurnace; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.inventory.FurnaceBurnEvent; +import org.bukkit.event.inventory.FurnaceSmeltEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -24,8 +26,6 @@ @Shadow public abstract boolean isBurning(); - @Shadow public abstract void smeltItem(); - /** * @author CraftBukkit Team */ @@ -107,4 +107,51 @@ this.markDirty(); } } + + /** + * @author CraftBukkit Team + */ + @Overwrite + public void smeltItem() + { + if (this.canSmelt()) + { + ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); + + // CraftBukkit start - fire FurnaceSmeltEvent + CraftItemStack source = CraftItemStack.asCraftMirror(this.furnaceItemStacks[0]); + org.bukkit.inventory.ItemStack result = CraftItemStack.asBukkitCopy(itemstack); + + FurnaceSmeltEvent furnaceSmeltEvent = new FurnaceSmeltEvent(((IMixinWorld) this.worldObj).getWorld().getBlockAt(this.xCoord, this.yCoord, this.zCoord), source, result); + ((IMixinWorld) this.worldObj).getServer().getPluginManager().callEvent(furnaceSmeltEvent); + + if (furnaceSmeltEvent.isCancelled()) + { + return; + } + + result = furnaceSmeltEvent.getResult(); + itemstack = CraftItemStack.asNMSCopy(result); + + if (itemstack != null) + { + if (this.furnaceItemStacks[2] == null) + { + this.furnaceItemStacks[2] = itemstack.copy(); + } + else if (CraftItemStack.asCraftMirror(this.furnaceItemStacks[2]).isSimilar(result)) + { + this.furnaceItemStacks[2].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items + } + } + // CraftBukkit end + + --this.furnaceItemStacks[0].stackSize; + + if (this.furnaceItemStacks[0].stackSize <= 0) + { + this.furnaceItemStacks[0] = null; + } + } + } }