diff --git a/forge/patches/minecraft/net/minecraft/src/Block.java.patch b/forge/patches/minecraft/net/minecraft/src/Block.java.patch
index cbfffae00..8b3382e8d 100644
--- a/forge/patches/minecraft/net/minecraft/src/Block.java.patch
+++ b/forge/patches/minecraft/net/minecraft/src/Block.java.patch
@@ -139,7 +139,7 @@
          {
              ItemStack itemstack = createStackedBlock(l);
              if(itemstack != null)
-@@ -805,6 +848,238 @@
+@@ -805,6 +848,248 @@
          return iblockaccess.isBlockNormalCube(i, j, k) ? 0.2F : 1.0F;
      }
  
@@ -151,11 +151,21 @@
 +
 +    /* FORGE: Implement and return true if you wish this block to behave
 +     * like a ladder when the player is inside.
++     *
++     * This is deprecated in favor of the more flexible version below.
 +     */
++    @Deprecated
 +    public boolean isLadder() {
 +	return false;
 +    }
 +
++    /* FORGE: Implement and return true if you wish this block to behave
++     * like a ladder when the player is inside.
++     */
++    public boolean isLadder(World world, int i, int j, int k) {
++	return isLadder();
++    }
++
 +    /* FORGE: Return true if the block is a normal, solid cube.  This
 +     * determines indirect power state, entity ejection from blocks, and a few
 +     * others.
diff --git a/forge/patches/minecraft/net/minecraft/src/BlockLadder.java.patch b/forge/patches/minecraft/net/minecraft/src/BlockLadder.java.patch
index 78010cb2a..d5da8578b 100644
--- a/forge/patches/minecraft/net/minecraft/src/BlockLadder.java.patch
+++ b/forge/patches/minecraft/net/minecraft/src/BlockLadder.java.patch
@@ -5,7 +5,7 @@
      }
  
 +    /* FORGE: Implemented base method, see Block.isLadder */
-+    public boolean isLadder() {
++    public boolean isLadder(World world, int i, int j, int k) {
 +	return true;
 +    }
 +
diff --git a/forge/patches/minecraft/net/minecraft/src/EntityLiving.java.patch b/forge/patches/minecraft/net/minecraft/src/EntityLiving.java.patch
index c452466fb..65bccb036 100644
--- a/forge/patches/minecraft/net/minecraft/src/EntityLiving.java.patch
+++ b/forge/patches/minecraft/net/minecraft/src/EntityLiving.java.patch
@@ -7,7 +7,7 @@
 -        return worldObj.getBlockId(i, j, k) == Block.ladder.blockID;
 +	Block block=Block.blocksList[worldObj.getBlockId(i,j,k)];
 +	if(block==null) return false;
-+	return block.isLadder();
++	return block.isLadder(worldObj,i,j,k);
      }
  
      public void writeEntityToNBT(NBTTagCompound nbttagcompound)
diff --git a/forge/patches/minecraft/net/minecraft/src/EntityPlayer.java.patch b/forge/patches/minecraft/net/minecraft/src/EntityPlayer.java.patch
index a23b43ffd..104d171a0 100644
--- a/forge/patches/minecraft/net/minecraft/src/EntityPlayer.java.patch
+++ b/forge/patches/minecraft/net/minecraft/src/EntityPlayer.java.patch
@@ -11,7 +11,15 @@
  import java.util.*;
  
  // Referenced classes of package net.minecraft.src:
-@@ -502,7 +506,16 @@
+@@ -166,6 +170,7 @@
+                 clearItemInUse();
+             } else
+             {
++		itemInUse.getItem().onUsingItemTick(itemInUse,this,itemInUseCount);
+                 if(itemInUseCount <= 25 && itemInUseCount % 4 == 0)
+                 {
+                     func_35201_a(itemstack, 5);
+@@ -502,7 +507,16 @@
  
      public void dropCurrentItem()
      {
@@ -29,7 +37,7 @@
      }
  
      public void dropPlayerItem(ItemStack itemstack)
-@@ -548,6 +561,8 @@
+@@ -548,6 +562,8 @@
          worldObj.spawnEntityInWorld(entityitem);
      }
  
@@ -38,7 +46,7 @@
      public float getCurrentPlayerStrVsBlock(Block block)
      {
          float f = inventory.getStrVsBlock(block);
-@@ -576,6 +591,45 @@
+@@ -576,6 +592,45 @@
          return f1;
      }
  
@@ -84,7 +92,7 @@
      public boolean canHarvestBlock(Block block)
      {
          return inventory.canHarvestBlock(block);
-@@ -774,6 +828,25 @@
+@@ -774,6 +829,25 @@
  
      protected void damageEntity(DamageSource damagesource, int i)
      {
@@ -110,7 +118,7 @@
          if(!damagesource.isUnblockable() && func_35162_ad())
          {
              i = 1 + i >> 1;
-@@ -825,7 +898,9 @@
+@@ -825,7 +899,9 @@
  
      public void destroyCurrentEquippedItem()
      {
@@ -120,7 +128,7 @@
      }
  
      public double getYOffset()
-@@ -957,6 +1032,10 @@
+@@ -957,6 +1033,10 @@
  
      public EnumStatus sleepInBedAt(int i, int j, int k)
      {
diff --git a/forge/patches/minecraft/net/minecraft/src/Item.java.patch b/forge/patches/minecraft/net/minecraft/src/Item.java.patch
index 2277b4b8f..7aa53de5f 100644
--- a/forge/patches/minecraft/net/minecraft/src/Item.java.patch
+++ b/forge/patches/minecraft/net/minecraft/src/Item.java.patch
@@ -47,7 +47,7 @@
      public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
      {
          return itemstack;
-@@ -278,6 +297,29 @@
+@@ -278,6 +297,34 @@
          return maxDamage > 0 && !hasSubtypes;
      }
  
@@ -73,11 +73,16 @@
 +		    EntityPlayer player) {
 +	    return false;
 +    }
++
++    /* FORGE: Called each tick while using an item.
++     */
++    public void onUsingItemTick(ItemStack ist, EntityPlayer player, int count) {
++    }
 +
      public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
      {
          return false;
-@@ -473,6 +515,32 @@
+@@ -473,6 +520,32 @@
      {
          return 0;
      }
diff --git a/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch b/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch
index 4ff735ce3..b0226e291 100644
--- a/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch
+++ b/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch
@@ -124,7 +124,7 @@
          {
              ItemStack itemstack = createStackedBlock(l);
              if(itemstack != null)
-@@ -725,6 +767,236 @@
+@@ -725,6 +767,246 @@
          return blockMaterial.getMaterialMobility();
      }
  
@@ -136,11 +136,21 @@
 +
 +    /* FORGE: Implement and return true if you wish this block to behave
 +     * like a ladder when the player is inside.
++     *
++     * This is deprecated in favor of the more flexible version below.
 +     */
++    @Deprecated
 +    public boolean isLadder() {
 +	return false;
 +    }
 +
++    /* FORGE: Implement and return true if you wish this block to behave
++     * like a ladder when the player is inside.
++     */
++    public boolean isLadder(World world, int i, int j, int k) {
++	return isLadder();
++    }
++
 +    /* FORGE: Return true if the block is a normal, solid cube.  This
 +     * determines indirect power state, entity ejection from blocks, and a few
 +     * others.
diff --git a/forge/patches/minecraft_server/net/minecraft/src/BlockLadder.java.patch b/forge/patches/minecraft_server/net/minecraft/src/BlockLadder.java.patch
index 2956eb84f..d5568a8f2 100644
--- a/forge/patches/minecraft_server/net/minecraft/src/BlockLadder.java.patch
+++ b/forge/patches/minecraft_server/net/minecraft/src/BlockLadder.java.patch
@@ -5,7 +5,7 @@
      }
  
 +    /* FORGE: Implemented base method, see Block.isLadder */
-+    public boolean isLadder() {
++    public boolean isLadder(World world, int i, int j, int k) {
 +	return true;
 +    }
 +
diff --git a/forge/patches/minecraft_server/net/minecraft/src/EntityLiving.java.patch b/forge/patches/minecraft_server/net/minecraft/src/EntityLiving.java.patch
index fcf04d4ff..f9ce54873 100644
--- a/forge/patches/minecraft_server/net/minecraft/src/EntityLiving.java.patch
+++ b/forge/patches/minecraft_server/net/minecraft/src/EntityLiving.java.patch
@@ -7,7 +7,7 @@
 -        return worldObj.getBlockId(i, j, k) == Block.ladder.blockID;
 +	Block block=Block.blocksList[worldObj.getBlockId(i,j,k)];
 +	if(block==null) return false;
-+	return block.isLadder();
++	return block.isLadder(worldObj,i,j,k);
      }
  
      public void writeEntityToNBT(NBTTagCompound nbttagcompound)
diff --git a/forge/patches/minecraft_server/net/minecraft/src/EntityPlayer.java.patch b/forge/patches/minecraft_server/net/minecraft/src/EntityPlayer.java.patch
index 996c18ab5..e8041ba4e 100644
--- a/forge/patches/minecraft_server/net/minecraft/src/EntityPlayer.java.patch
+++ b/forge/patches/minecraft_server/net/minecraft/src/EntityPlayer.java.patch
@@ -11,7 +11,15 @@
  // Referenced classes of package net.minecraft.src:
  //            EntityLiving, InventoryPlayer, FoodStats, PlayerCapabilities, 
  //            ContainerPlayer, World, ChunkCoordinates, DataWatcher, 
-@@ -447,7 +451,16 @@
+@@ -142,6 +146,7 @@
+                 clearItemInUse();
+             } else
+             {
++		itemInUse.getItem().onUsingItemTick(itemInUse,this,itemInUseCount);
+                 if(itemInUseCount <= 25 && itemInUseCount % 4 == 0)
+                 {
+                     func_35208_b(itemstack, 5);
+@@ -447,7 +452,16 @@
  
      public void dropCurrentItem()
      {
@@ -29,7 +37,7 @@
      }
  
      public void dropPlayerItem(ItemStack itemstack)
-@@ -493,6 +506,8 @@
+@@ -493,6 +507,8 @@
          worldObj.spawnEntityInWorld(entityitem);
      }
  
@@ -38,7 +46,7 @@
      public float getCurrentPlayerStrVsBlock(Block block)
      {
          float f = inventory.getStrVsBlock(block);
-@@ -521,6 +536,45 @@
+@@ -521,6 +537,45 @@
          return f1;
      }
  
@@ -84,7 +92,7 @@
      public boolean canHarvestBlock(Block block)
      {
          return inventory.canHarvestBlock(block);
-@@ -718,7 +772,26 @@
+@@ -718,7 +773,26 @@
      }
  
      protected void damageEntity(DamageSource damagesource, int i)
@@ -112,7 +120,7 @@
          if(!damagesource.isUnblockable() && func_35180_G())
          {
              i = 1 + i >> 1;
-@@ -770,7 +843,9 @@
+@@ -770,7 +844,9 @@
  
      public void destroyCurrentEquippedItem()
      {
@@ -122,7 +130,7 @@
      }
  
      public double getYOffset()
-@@ -896,6 +971,10 @@
+@@ -896,6 +972,10 @@
  
      public EnumStatus sleepInBedAt(int i, int j, int k)
      {
diff --git a/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch b/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch
index 937d440b8..fa48d7f95 100644
--- a/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch
+++ b/forge/patches/minecraft_server/net/minecraft/src/Item.java.patch
@@ -47,7 +47,7 @@
      public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
      {
          return itemstack;
-@@ -266,6 +285,29 @@
+@@ -266,6 +285,34 @@
          return maxDamage > 0 && !hasSubtypes;
      }
  
@@ -73,11 +73,16 @@
 +		    EntityPlayer player) {
 +	    return false;
 +    }
++
++    /* FORGE: Called each tick while using an item.
++     */
++    public void onUsingItemTick(ItemStack ist, EntityPlayer player, int count) {
++    }
 +
      public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
      {
          return false;
-@@ -414,6 +456,26 @@
+@@ -414,6 +461,26 @@
          return 0;
      }