From 1f05cb930b9b5df9bd1f35ea99a637b681cbb2d8 Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 2 Dec 2011 08:19:55 +0100 Subject: Allows to be teleported to bed location of offline players. Also adds missing return in /home command --- .../src/com/earth2me/essentials/OfflinePlayer.java | 3 +- .../earth2me/essentials/commands/Commandhome.java | 1 + .../essentials/craftbukkit/OfflineBedLocation.java | 52 ++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 Essentials/src/com/earth2me/essentials/craftbukkit/OfflineBedLocation.java 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; + } + } +} -- cgit v1.2.3