--- ../src-base/minecraft/net/minecraft/entity/player/EntityPlayerMP.java
+++ ../src-work/minecraft/net/minecraft/entity/player/EntityPlayerMP.java
@@ -127,14 +127,15 @@
     public boolean field_71136_j;
     private static final String __OBFID = "CL_00001440";
 
+    @SuppressWarnings("unused")
     public EntityPlayerMP(MinecraftServer p_i45285_1_, WorldServer p_i45285_2_, GameProfile p_i45285_3_, ItemInWorldManager p_i45285_4_)
     {
         super(p_i45285_2_, p_i45285_3_);
         p_i45285_4_.field_73090_b = this;
         this.field_71134_c = p_i45285_4_;
-        BlockPos blockpos = p_i45285_2_.func_175694_M();
+        BlockPos blockpos = p_i45285_2_.field_73011_w.getRandomizedSpawnPoint();
 
-        if (!p_i45285_2_.field_73011_w.func_177495_o() && p_i45285_2_.func_72912_H().func_76077_q() != WorldSettings.GameType.ADVENTURE)
+        if (false && !p_i45285_2_.field_73011_w.func_177495_o() && p_i45285_2_.func_72912_H().func_76077_q() != WorldSettings.GameType.ADVENTURE)
         {
             int i = Math.max(5, p_i45285_1_.func_82357_ak() - 6);
             int j = MathHelper.func_76128_c(p_i45285_2_.func_175723_af().func_177729_b((double)blockpos.func_177958_n(), (double)blockpos.func_177952_p()));
@@ -227,7 +228,7 @@
 
         this.field_71070_bA.func_75142_b();
 
-        if (!this.field_70170_p.field_72995_K && !this.field_71070_bA.func_75145_c(this))
+        if (!this.field_70170_p.field_72995_K && !net.minecraftforge.common.ForgeHooks.canInteractWith(this, this.field_71070_bA))
         {
             this.func_71053_j();
             this.field_71070_bA = this.field_71069_bz;
@@ -269,7 +270,8 @@
                         if (chunk.func_150802_k())
                         {
                             arraylist.add(chunk);
-                            arraylist1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 16, 256, chunkcoordintpair.field_77275_b * 16 + 16));
+                            arraylist1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 15, 256, chunkcoordintpair.field_77275_b * 16 + 15));
+                            //BugFix: 16 makes it load an extra chunk, which isn't associated with a player, which makes it not unload unless a player walks near it.
                             iterator1.remove();
                         }
                     }
@@ -305,6 +307,7 @@
                 {
                     chunk = (Chunk)iterator2.next();
                     this.func_71121_q().func_73039_n().func_85172_a(this, chunk);
+                    net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(chunk.func_76632_l(), this));
                 }
             }
         }
@@ -440,6 +443,7 @@
 
     public void func_70645_a(DamageSource p_70645_1_)
     {
+        if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, p_70645_1_)) return;
         if (this.field_70170_p.func_82736_K().func_82766_b("showDeathMessages"))
         {
             Team team = this.func_96124_cp();
@@ -463,7 +467,20 @@
 
         if (!this.field_70170_p.func_82736_K().func_82766_b("keepInventory"))
         {
+            captureDrops = true;
+            capturedDrops.clear();
+
             this.field_71071_by.func_70436_m();
+
+            captureDrops = false;
+            net.minecraftforge.event.entity.player.PlayerDropsEvent event = new net.minecraftforge.event.entity.player.PlayerDropsEvent(this, p_70645_1_, capturedDrops, field_70718_bc > 0);
+            if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event))
+            {
+                for (net.minecraft.entity.item.EntityItem item : capturedDrops)
+                {
+                    func_71012_a(item);
+                }
+            }
         }
 
         Collection collection = this.field_70170_p.func_96441_U().func_96520_a(IScoreObjectiveCriteria.field_96642_c);
@@ -849,6 +866,7 @@
     {
         if (p_71064_1_ != null)
         {
+            if (p_71064_1_.func_75967_d() && net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.AchievementEvent(this, (net.minecraft.stats.Achievement) p_71064_1_))) return;
             this.field_147103_bO.func_150871_b(this, p_71064_1_, p_71064_2_);
             Iterator iterator = this.func_96123_co().func_96520_a(p_71064_1_.func_150952_k()).iterator();
 
