summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/OfflinePlayer.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandhome.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/craftbukkit/OfflineBedLocation.java52
3 files changed, 55 insertions, 1 deletions
diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
index 09ba91f96..b554ec4fe 100644
--- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
+++ b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java
@@ -1,5 +1,6 @@
package com.earth2me.essentials;
+import com.earth2me.essentials.craftbukkit.OfflineBedLocation;
import static com.earth2me.essentials.I18n._;
import java.net.InetSocketAddress;
import java.util.HashSet;
@@ -740,7 +741,7 @@ public class OfflinePlayer implements Player
@Override
public Location getBedSpawnLocation()
{
- throw new UnsupportedOperationException("Not supported yet.");
+ return OfflineBedLocation.getBedLocation(base.getName(), ess);
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
index 090cebd4c..8b684e3af 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
@@ -48,6 +48,7 @@ public class Commandhome extends EssentialsCommand
if (bed != null)
{
user.getTeleport().teleport(bed, charge);
+ return;
}
}
user.getTeleport().home(player, homeName.toLowerCase(Locale.ENGLISH), charge);
diff --git a/Essentials/src/com/earth2me/essentials/craftbukkit/OfflineBedLocation.java b/Essentials/src/com/earth2me/essentials/craftbukkit/OfflineBedLocation.java
new file mode 100644
index 000000000..3ddfd20b5
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/craftbukkit/OfflineBedLocation.java
@@ -0,0 +1,52 @@
+package com.earth2me.essentials.craftbukkit;
+
+import com.earth2me.essentials.IEssentials;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import net.minecraft.server.NBTTagCompound;
+import net.minecraft.server.WorldNBTStorage;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.CraftWorld;
+
+
+public class OfflineBedLocation
+{
+ public static Location getBedLocation(final String playername, final IEssentials ess)
+ {
+ try
+ {
+ final CraftServer cserver = (CraftServer)ess.getServer();
+ if (cserver == null)
+ {
+ return null;
+ }
+ final WorldNBTStorage wnbtStorage = (WorldNBTStorage)cserver.getHandle().playerFileData;
+ if (wnbtStorage == null)
+ {
+ return null;
+ }
+ final NBTTagCompound playerStorage = wnbtStorage.getPlayerData(playername);
+ if (playerStorage == null)
+ {
+ return null;
+ }
+
+ if (playerStorage.hasKey("SpawnX") && playerStorage.hasKey("SpawnY") && playerStorage.hasKey("SpawnZ"))
+ {
+ String spawnWorld = playerStorage.getString("SpawnWorld");
+ if ("".equals(spawnWorld))
+ {
+ spawnWorld = cserver.getWorlds().get(0).getName();
+ }
+ return new Location(cserver.getWorld(spawnWorld), playerStorage.getInt("SpawnX"), playerStorage.getInt("SpawnY"), playerStorage.getInt("SpawnZ"));
+ }
+ return null;
+ }
+ catch (Throwable ex)
+ {
+ Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
+ return null;
+ }
+ }
+}