From a9e7b56ef26df7dbe63e65d054b82b37e5abf046 Mon Sep 17 00:00:00 2001
From: EvilSeph <evilseph@unaligned.org>
Date: Fri, 10 Jun 2011 06:33:25 -0400
Subject: [PATCH] Improved handling of being sent to your bed spawn if the
 world saved in your player.dat no longer exists.

---
 src/main/java/net/minecraft/server/EntityPlayer.java | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index dbc6edc160..305132bfa3 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -64,22 +64,22 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
     public void a(World world) {
         super.a(world);
         // CraftBukkit - world fallback code, either respawn location or global spawn
-        if(world == null) {
+        if (world == null) {
             dead = false;
             ChunkCoordinates position = null;
             if (!spawnWorld.isEmpty()) {
                 CraftWorld cw  = (CraftWorld)Bukkit.getServer().getWorld(spawnWorld);
-                if (cw != null) {
+                if (cw != null && M() != null) {
                     world = cw.getHandle();
-                    position = M();
+                    position = EntityHuman.getBed(cw.getHandle(), M());
                 }
             }
-            if (world == null) {
+            if (world == null || position == null) {
                 world = ((CraftWorld)Bukkit.getServer().getWorlds().get(0)).getHandle();
                 position = world.getSpawn();
             }
             this.world = world;
-            setPosition(position.x, position.y, position.z);
+            setPosition(position.x + 0.5, position.y, position.z  + 0.5);
         }
         this.dimension = ((WorldServer)this.world).dimension;
         // CraftBukkit end