--- ../src_base/common/net/minecraft/src/SlotCrafting.java
+++ ../src_work/common/net/minecraft/src/SlotCrafting.java
@@ -1,4 +1,8 @@
 package net.minecraft.src;
+
+import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
 
 import cpw.mods.fml.common.registry.GameRegistry;
 
@@ -122,9 +126,15 @@
 
                 if (var3.getItem().hasContainerItem())
                 {
-                    ItemStack var4 = new ItemStack(var3.getItem().getContainerItem());
+                    ItemStack var4 = var3.getItem().getContainerItemStack(var3);
+                    
+                    if (var4.isItemStackDamageable() && var4.getItemDamage() >= var4.getMaxDamage())
+                    {
+                        MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(thePlayer, var4));
+                        var4 = null;
+                    }
 
-                    if (!var3.getItem().doesContainerItemLeaveCraftingGrid(var3) || !this.thePlayer.inventory.addItemStackToInventory(var4))
+                    if (var4 != null && (!var3.getItem().doesContainerItemLeaveCraftingGrid(var3) || !this.thePlayer.inventory.addItemStackToInventory(var4)))
                     {
                         if (this.craftMatrix.getStackInSlot(var2) == null)
                         {

--- ../src_base/common/net/minecraft/src/SlotCrafting.java
+++ ../src_work/common/net/minecraft/src/SlotCrafting.java
@@ -1,4 +1,8 @@
 package net.minecraft.src;
+
+import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
 
 import cpw.mods.fml.common.registry.GameRegistry;
 
@@ -122,9 +126,15 @@
 
                 if (var3.getItem().hasContainerItem())
                 {
-                    ItemStack var4 = new ItemStack(var3.getItem().getContainerItem());
+                    ItemStack var4 = var3.getItem().getContainerItemStack(var3);
+                    
+                    if (var4.isItemStackDamageable() && var4.getItemDamage() > var4.getMaxDamage())
+                    {
+                        MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(thePlayer, var4));
+                        var4 = null;
+                    }
 
-                    if (!var3.getItem().doesContainerItemLeaveCraftingGrid(var3) || !this.thePlayer.inventory.addItemStackToInventory(var4))
+                    if (var4 != null && (!var3.getItem().doesContainerItemLeaveCraftingGrid(var3) || !this.thePlayer.inventory.addItemStackToInventory(var4)))
                     {
                         if (this.craftMatrix.getStackInSlot(var2) == null)
                         {

Change the Crafting damage check to be the same as the usage damage check. (>= -> >)
Change the Crafting damage check to be the same as the usage damage check. (>= -> >)
