summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2011-12-02 08:19:55 +0100
committersnowleo <schneeleo@gmail.com>2011-12-02 08:19:55 +0100
commit1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8 (patch)
tree2fd0093565864ca82bdb0ccd17b8bbf079eba422
parentbfc90c610a53429ac5484743bed07374c8fcdd8b (diff)
downloadEssentials-1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8.tar
Essentials-1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8.tar.gz
Essentials-1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8.tar.lz
Essentials-1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8.tar.xz
Essentials-1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8.zip
Allows to be teleported to bed location of offline players.
Also adds missing return in /home command
-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;
+ }
+ }
+}