From a9fdf1fb10b2929099a0801a16b7e2afdd084077 Mon Sep 17 00:00:00 2001 From: EdGruberman Date: Fri, 22 Feb 2013 09:23:51 -0700 Subject: [PATCH] Return bed location itself instead of next to bed; Fixes BUKKIT-3604 --- .../org/bukkit/craftbukkit/entity/CraftPlayer.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 5b74a5b..a913a1c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -628,10 +628,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { ChunkCoordinates bed = getHandle().getBed(); if (world != null && bed != null) { - bed = EntityHuman.getBed(((CraftWorld) world).getHandle(), bed, getHandle().isRespawnForced()); - if (bed != null) { + if (getHandle().isRespawnForced()) { return new Location(world, bed.x, bed.y, bed.z); } + + int cx = bed.x >> 4; + int cz = bed.z >> 4; + boolean before = world.isChunkLoaded(cx, cz); + + if (!before) { + world.loadChunk(cx, cz); + } + + Location location = null; + if (world.getBlockTypeIdAt(bed.x, bed.y, bed.z) == Block.BED.id) { + location = new Location(world, bed.x, bed.y, bed.z); + } + + if (!before) { + world.unloadChunk(cx, cz); + } + + return location; } return null; } -- 1.8.2.1