Paper/CraftBukkit-Patches/0030-Return-bed-location-itself-instead-of-next-to-bed-Fi.patch

49 lines
1.7 KiB
Diff

From f9ec6953de1d80b95eea4b195973b9dda36f5e0f Mon Sep 17 00:00:00 2001
From: EdGruberman <ed@rjump.com>
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 59e63ef..3c34a4c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -626,10 +626,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.1-rc2