--- ../src-base/minecraft/net/minecraft/item/ItemShears.java
+++ ../src-work/minecraft/net/minecraft/item/ItemShears.java
@@ -21,13 +21,12 @@
 
     public boolean func_179218_a(ItemStack p_179218_1_, World p_179218_2_, Block p_179218_3_, BlockPos p_179218_4_, EntityLivingBase p_179218_5_)
     {
-        if (p_179218_3_.func_149688_o() != Material.field_151584_j && p_179218_3_ != Blocks.field_150321_G && p_179218_3_ != Blocks.field_150329_H && p_179218_3_ != Blocks.field_150395_bd && p_179218_3_ != Blocks.field_150473_bD && p_179218_3_ != Blocks.field_150325_L)
+        if (p_179218_3_.func_149688_o() != Material.field_151584_j && p_179218_3_ != Blocks.field_150321_G && p_179218_3_ != Blocks.field_150329_H && p_179218_3_ != Blocks.field_150395_bd && p_179218_3_ != Blocks.field_150473_bD && p_179218_3_ != Blocks.field_150325_L && !(p_179218_3_ instanceof net.minecraftforge.common.IShearable))
         {
             return super.func_179218_a(p_179218_1_, p_179218_2_, p_179218_3_, p_179218_4_, p_179218_5_);
         }
         else
         {
-            p_179218_1_.func_77972_a(1, p_179218_5_);
             return true;
         }
     }
@@ -41,4 +40,71 @@
     {
         return p_150893_2_ != Blocks.field_150321_G && p_150893_2_.func_149688_o() != Material.field_151584_j ? (p_150893_2_ == Blocks.field_150325_L ? 5.0F : super.func_150893_a(p_150893_1_, p_150893_2_)) : 15.0F;
     }
+
+
+    @Override
+    public boolean func_111207_a(ItemStack itemstack, net.minecraft.entity.player.EntityPlayer player, EntityLivingBase entity)
+    {
+        if (entity.field_70170_p.field_72995_K)
+        {
+            return false;
+        }
+        if (entity instanceof net.minecraftforge.common.IShearable)
+        {
+            net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)entity;
+            BlockPos pos = new BlockPos(entity.field_70165_t, entity.field_70163_u, entity.field_70161_v);
+            if (target.isShearable(itemstack, entity.field_70170_p, pos))
+            {
+                java.util.List<ItemStack> drops = target.onSheared(itemstack, entity.field_70170_p, pos,
+                        net.minecraft.enchantment.EnchantmentHelper.func_77506_a(net.minecraft.enchantment.Enchantment.field_77346_s.field_77352_x, itemstack));
+
+                java.util.Random rand = new java.util.Random();
+                for(ItemStack stack : drops)
+                {
+                    net.minecraft.entity.item.EntityItem ent = entity.func_70099_a(stack, 1.0F);
+                    ent.field_70181_x += rand.nextFloat() * 0.05F;
+                    ent.field_70159_w += (rand.nextFloat() - rand.nextFloat()) * 0.1F;
+                    ent.field_70179_y += (rand.nextFloat() - rand.nextFloat()) * 0.1F;
+                }
+                itemstack.func_77972_a(1, entity);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player)
+    {
+        if (player.field_70170_p.field_72995_K)
+        {
+            return false;
+        }
+        Block block = player.field_70170_p.func_180495_p(pos).func_177230_c();
+        if (block instanceof net.minecraftforge.common.IShearable)
+        {
+            net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)block;
+            if (target.isShearable(itemstack, player.field_70170_p, pos))
+            {
+                java.util.List<ItemStack> drops = target.onSheared(itemstack, player.field_70170_p, pos,
+                        net.minecraft.enchantment.EnchantmentHelper.func_77506_a(net.minecraft.enchantment.Enchantment.field_77346_s.field_77352_x, itemstack));
+                java.util.Random rand = new java.util.Random();
+
+                for(ItemStack stack : drops)
+                {
+                    float f = 0.7F;
+                    double d  = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
+                    double d1 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
+                    double d2 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
+                    net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.field_70170_p, (double)pos.func_177958_n() + d, (double)pos.func_177956_o() + d1, (double)pos.func_177952_p() + d2, stack);
+                    entityitem.func_174869_p();
+                    player.field_70170_p.func_72838_d(entityitem);
+                }
+
+                itemstack.func_77972_a(1, player);
+                player.func_71064_a(net.minecraft.stats.StatList.field_75934_C[Block.func_149682_b(block)], 1);
+            }
+        }
+        return false;
+    }
 }
