--- ../src-base/minecraft/net/minecraft/entity/EntityLivingBase.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityLivingBase.java
@@ -233,7 +233,7 @@
                 }
             }
 
-            if (!this.field_70170_p.field_72995_K && this.func_70115_ae() && this.field_70154_o instanceof EntityLivingBase)
+            if (!this.field_70170_p.field_72995_K && this.func_70115_ae() && this.field_70154_o != null && field_70154_o.shouldDismountInWater(this))
             {
                 this.func_70078_a((Entity)null);
             }
@@ -377,6 +377,7 @@
     {
         this.field_70755_b = p_70604_1_;
         this.field_70756_c = this.field_70173_aa;
+        net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, p_70604_1_);
     }
 
     public EntityLivingBase func_110144_aD()
@@ -672,7 +673,6 @@
         return this.func_70668_bt() == EnumCreatureAttribute.UNDEAD;
     }
 
-    @SideOnly(Side.CLIENT)
     public void func_70618_n(int p_70618_1_)
     {
         this.field_70713_bf.remove(Integer.valueOf(p_70618_1_));
@@ -741,6 +741,7 @@
 
     public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_)
     {
+        if (net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_)) return false;
         if (this.func_180431_b(p_70097_1_))
         {
             return false;
@@ -806,9 +807,9 @@
                         this.field_70718_bc = 100;
                         this.field_70717_bb = (EntityPlayer)entity;
                     }
-                    else if (entity instanceof EntityWolf)
+                    else if (entity instanceof net.minecraft.entity.passive.EntityTameable)
                     {
-                        EntityWolf entitywolf = (EntityWolf)entity;
+                        net.minecraft.entity.passive.EntityTameable entitywolf = (net.minecraft.entity.passive.EntityTameable)entity;
 
                         if (entitywolf.func_70909_n())
                         {
@@ -894,6 +895,7 @@
 
     public void func_70645_a(DamageSource p_70645_1_)
     {
+        if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, p_70645_1_)) return;
         Entity entity = p_70645_1_.func_76346_g();
         EntityLivingBase entitylivingbase = this.func_94060_bK();
 
@@ -919,6 +921,9 @@
                 i = EnchantmentHelper.func_77519_f((EntityLivingBase)entity);
             }
 
+            captureDrops = true;
+            capturedDrops.clear();
+
             if (this.func_146066_aG() && this.field_70170_p.func_82736_K().func_82766_b("doMobLoot"))
             {
                 this.func_70628_a(this.field_70718_bc > 0, i);
@@ -929,6 +934,16 @@
                     this.func_82164_bB();
                 }
             }
+
+            captureDrops = false;
+
+            if (!net.minecraftforge.common.ForgeHooks.onLivingDrops(this, p_70645_1_, capturedDrops, i, field_70718_bc > 0))
+            {
+                for (EntityItem item : capturedDrops)
+                {
+                    field_70170_p.func_72838_d(item);
+                }
+            }
         }
 
         this.field_70170_p.func_72960_a(this, (byte)3);
@@ -977,7 +992,7 @@
         int j = MathHelper.func_76128_c(this.func_174813_aQ().field_72338_b);
         int k = MathHelper.func_76128_c(this.field_70161_v);
         Block block = this.field_70170_p.func_180495_p(new BlockPos(i, j, k)).func_177230_c();
-        return (block == Blocks.field_150468_ap || block == Blocks.field_150395_bd) && (!(this instanceof EntityPlayer) || !((EntityPlayer)this).func_175149_v());
+        return net.minecraftforge.common.ForgeHooks.isLivingOnLadder(block, field_70170_p, new BlockPos(i, j, k), this);
     }
 
     public boolean func_70089_S()
@@ -987,6 +1002,9 @@
 
     public void func_180430_e(float p_180430_1_, float p_180430_2_)
     {
+        float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, p_180430_1_, p_180430_2_);
+        if (ret == null) return;
+        p_180430_1_ = ret[0]; p_180430_2_ = ret[1];
         super.func_180430_e(p_180430_1_, p_180430_2_);
         PotionEffect potioneffect = this.func_70660_b(Potion.field_76430_j);
         float f2 = potioneffect != null ? (float)(potioneffect.func_76458_c() + 1) : 0.0F;
@@ -1105,6 +1123,8 @@
     {
         if (!this.func_180431_b(p_70665_1_))
         {
+            p_70665_2_ = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, p_70665_1_, p_70665_2_);
+            if (p_70665_2_ <= 0) return;
             p_70665_2_ = this.func_70655_b(p_70665_1_, p_70665_2_);
             p_70665_2_ = this.func_70672_c(p_70665_1_, p_70665_2_);
             float f1 = p_70665_2_;
@@ -1153,6 +1173,11 @@
 
     public void func_71038_i()
     {
+        ItemStack stack = this.func_70694_bm();
+        if (stack != null && stack.func_77973_b() != null)
+        {
+            if (stack.func_77973_b().onEntitySwing(this, stack)) return;
+        }
         if (!this.field_82175_bq || this.field_110158_av >= this.func_82166_i() / 2 || this.field_110158_av < 0)
         {
             this.field_110158_av = -1;
@@ -1359,6 +1384,7 @@
         }
 
         this.field_70160_al = true;
+        net.minecraftforge.common.ForgeHooks.onLivingJump(this);
     }
 
     protected void func_70629_bd()
@@ -1545,6 +1571,7 @@
 
     public void func_70071_h_()
     {
+        if (net.minecraftforge.common.ForgeHooks.onLivingUpdate(this)) return;
         super.func_70071_h_();
 
         if (!this.field_70170_p.field_72995_K)
@@ -2000,4 +2027,39 @@
     {
         this.field_70752_e = true;
     }
+
+    /***
+     * Removes all potion effects that have curativeItem as a curative item for its effect
+     * @param curativeItem The itemstack we are using to cure potion effects
+     */
+    public void curePotionEffects(ItemStack curativeItem)
+    {
+        Iterator<Integer> potionKey = field_70713_bf.keySet().iterator();
+        if (field_70170_p.field_72995_K) return;
+
+        while (potionKey.hasNext())
+        {
+            Integer key = potionKey.next();
+            PotionEffect effect = (PotionEffect)field_70713_bf.get(key);
+
+            if (effect.isCurativeItem(curativeItem))
+            {
+                potionKey.remove();
+                func_70688_c(effect);
+                this.field_70752_e = true;
+            }
+        }
+    }
+
+    /**
+     * Returns true if the entity's rider (EntityPlayer) should face forward when mounted.
+     * currently only used in vanilla code by pigs.
+     *
+     * @param player The player who is riding the entity.
+     * @return If the player should orient the same direction as this entity.
+     */
+    public boolean shouldRiderFaceForward(EntityPlayer player)
+    {
+        return this instanceof net.minecraft.entity.passive.EntityPig;
+    }
 }
