summaryrefslogtreecommitdiffstats
path: root/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2011-12-06 13:41:29 +0100
committersnowleo <schneeleo@gmail.com>2011-12-06 13:41:29 +0100
commit4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0 (patch)
tree7ad524c5899beb8e6a702d7bda8e7fa1a10c1e15 /EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
parenta44bd360c09df18011044b46f9507c43795181e3 (diff)
downloadEssentials-4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0.tar
Essentials-4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0.tar.gz
Essentials-4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0.tar.lz
Essentials-4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0.tar.xz
Essentials-4c2b9b8d0fd35cd27ef4cbdd0a8e4200d02926b0.zip
Updated EssentialsSpawn to use the new config code
/spawn and /home now call the PlayerRespawnEvent to make it more compatible with other plugins.
Diffstat (limited to 'EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java')
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java145
1 files changed, 145 insertions, 0 deletions
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
new file mode 100644
index 000000000..ac98b5921
--- /dev/null
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java
@@ -0,0 +1,145 @@
+package com.earth2me.essentials.spawn;
+
+import com.earth2me.essentials.IConf;
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.IEssentialsModule;
+import com.earth2me.essentials.settings.Spawns;
+import com.earth2me.essentials.storage.AbstractDelayedYamlFileReader;
+import com.earth2me.essentials.storage.AbstractDelayedYamlFileWriter;
+import com.earth2me.essentials.storage.StorageObject;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.bukkit.Location;
+import org.bukkit.World;
+
+
+public class SpawnStorage implements IConf, IEssentialsModule
+{
+ private transient Spawns spawns;
+ private final transient IEssentials ess;
+ private final transient File spawnfile;
+ private final transient ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
+
+ public SpawnStorage(final IEssentials ess)
+ {
+ this.ess = ess;
+ spawnfile = new File(ess.getDataFolder(), "spawn.yml");
+ new SpawnReader();
+ }
+
+ public void setSpawn(final Location loc, final String group)
+ {
+ rwl.writeLock().lock();
+ try
+ {
+ if (spawns.getSpawns() == null)
+ {
+ spawns.setSpawns(new HashMap<String, Location>());
+ }
+ spawns.getSpawns().put(group.toLowerCase(Locale.ENGLISH), loc);
+ }
+ finally
+ {
+ rwl.writeLock().unlock();
+ }
+ new SpawnWriter();
+
+ if ("default".equalsIgnoreCase(group))
+ {
+ loc.getWorld().setSpawnLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+ }
+ }
+
+ public Location getSpawn(final String group)
+ {
+ rwl.readLock().lock();
+ try
+ {
+ if (spawns == null || spawns.getSpawns() == null || group == null)
+ {
+ return getWorldSpawn();
+ }
+ final Map<String, Location> spawnMap = spawns.getSpawns();
+ String groupName = group.toLowerCase(Locale.ENGLISH);
+ if (!spawnMap.containsKey(groupName))
+ {
+ groupName = "default";
+ }
+ if (!spawnMap.containsKey(groupName))
+ {
+ return getWorldSpawn();
+ }
+ return spawnMap.get(groupName);
+ }
+ finally
+ {
+ rwl.readLock().unlock();
+ }
+ }
+
+ private Location getWorldSpawn()
+ {
+ for (World world : ess.getServer().getWorlds())
+ {
+ if (world.getEnvironment() != World.Environment.NORMAL)
+ {
+ continue;
+ }
+ return world.getSpawnLocation();
+ }
+ return ess.getServer().getWorlds().get(0).getSpawnLocation();
+ }
+
+ @Override
+ public void reloadConfig()
+ {
+ new SpawnReader();
+ }
+
+
+ private class SpawnWriter extends AbstractDelayedYamlFileWriter
+ {
+ public SpawnWriter()
+ {
+ super(ess, spawnfile);
+ }
+
+ @Override
+ public StorageObject getObject()
+ {
+ rwl.readLock().lock();
+ return spawns;
+ }
+
+ @Override
+ public void onFinish()
+ {
+ rwl.readLock().unlock();
+ }
+ }
+
+
+ private class SpawnReader extends AbstractDelayedYamlFileReader<Spawns>
+ {
+ public SpawnReader()
+ {
+ super(ess, spawnfile, Spawns.class);
+ }
+
+ @Override
+ public void onStart()
+ {
+ rwl.writeLock().lock();
+ }
+
+ @Override
+ public void onFinish(final Spawns object)
+ {
+ spawns = object;
+ rwl.writeLock().unlock();
+ }
+ }
+}