summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/Essentials.java14
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java50
-rw-r--r--Essentials/src/com/earth2me/essentials/IEssentials.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/IEssentialsModule.java6
-rw-r--r--Essentials/src/com/earth2me/essentials/Teleport.java10
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandhome.java16
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/IEssentialsCommand.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/settings/Spawns.java18
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java61
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java32
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/YamlStorageReader.java15
-rw-r--r--Essentials/src/com/earth2me/essentials/user/User.java6
-rw-r--r--Essentials/test/com/earth2me/essentials/StorageTest.java14
-rw-r--r--EssentialsSpawn/nbproject/pmd.settings1
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java4
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandspawn.java6
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java18
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java47
-rw-r--r--EssentialsSpawn/src/com/earth2me/essentials/spawn/SpawnStorage.java145
-rw-r--r--EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java3
21 files changed, 406 insertions, 79 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java
index 98d919150..677caa941 100644
--- a/Essentials/src/com/earth2me/essentials/Essentials.java
+++ b/Essentials/src/com/earth2me/essentials/Essentials.java
@@ -65,7 +65,6 @@ public class Essentials extends JavaPlugin implements IEssentials
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private transient ISettings settings;
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
- private transient Spawn spawn;
private transient Jail jail;
private transient Warps warps;
private transient Worth worth;
@@ -159,8 +158,6 @@ public class Essentials extends JavaPlugin implements IEssentials
userMap = new UserMap(this);
confList.add(userMap);
execTimer.mark("Init(Usermap)");
- spawn = new Spawn(getServer(), this.getDataFolder());
- confList.add(spawn);
warps = new Warps(getServer(), this.getDataFolder());
confList.add(warps);
execTimer.mark("Init(Spawn/Warp)");
@@ -297,11 +294,11 @@ public class Essentials extends JavaPlugin implements IEssentials
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args)
{
- return onCommandEssentials(sender, command, commandLabel, args, Essentials.class.getClassLoader(), "com.earth2me.essentials.commands.Command", "essentials.");
+ return onCommandEssentials(sender, command, commandLabel, args, Essentials.class.getClassLoader(), "com.earth2me.essentials.commands.Command", "essentials.", null);
}
@Override
- public boolean onCommandEssentials(final CommandSender sender, final Command command, final String commandLabel, final String[] args, final ClassLoader classLoader, final String commandPath, final String permissionPrefix)
+ public boolean onCommandEssentials(final CommandSender sender, final Command command, final String commandLabel, final String[] args, final ClassLoader classLoader, final String commandPath, final String permissionPrefix, final IEssentialsModule module)
{
// Allow plugins to override the command via onCommand
if (!getSettings().isCommandOverridden(command.getName()) && !commandLabel.startsWith("e"))
@@ -344,6 +341,7 @@ public class Essentials extends JavaPlugin implements IEssentials
{
cmd = (IEssentialsCommand)classLoader.loadClass(commandPath + command.getName()).newInstance();
cmd.setEssentials(this);
+ cmd.setEssentialsModule(module);
}
catch (Exception ex)
{
@@ -443,12 +441,6 @@ public class Essentials extends JavaPlugin implements IEssentials
}
@Override
- public Spawn getSpawn()
- {
- return spawn;
- }
-
- @Override
public User getUser(final Object base)
{
if (base instanceof Player)
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
index 9070e25ac..29658ae4d 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java
@@ -1,5 +1,7 @@
package com.earth2me.essentials;
+import com.earth2me.essentials.settings.Spawns;
+import com.earth2me.essentials.storage.YamlStorageWriter;
import static com.earth2me.essentials.I18n._;
import java.io.*;
import java.math.BigInteger;
@@ -681,6 +683,53 @@ public class EssentialsUpgrade
}
}
+ private void updateSpawnsToNewSpawnsConfig()
+ {
+ if (doneFile.getBoolean("updateSpawnsToNewSpawnsConfig", false))
+ {
+ return;
+ }
+ final File configFile = new File(ess.getDataFolder(), "spawn.yml");
+ if (configFile.exists())
+ {
+
+ final EssentialsConf config = new EssentialsConf(configFile);
+ try
+ {
+ config.load();
+ if (!config.hasProperty("spawns"))
+ {
+ final Spawns spawns = new Spawns();
+ List<String> keys = config.getKeys();
+ for (String group : keys)
+ {
+ Location loc = getFakeLocation(config, group);
+ spawns.getSpawns().put(group.toLowerCase(Locale.ENGLISH), loc);
+ }
+ if (!configFile.renameTo(new File(ess.getDataFolder(), "spawn.yml.old")))
+ {
+ throw new Exception(_("fileRenameError", "spawn.yml"));
+ }
+ PrintWriter writer = new PrintWriter(configFile);
+ try
+ {
+ new YamlStorageWriter(writer).save(spawns);
+ }
+ finally
+ {
+ writer.close();
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex);
+ }
+ }
+ doneFile.setProperty("updateSpawnsToNewSpawnsConfig", true);
+ doneFile.save();
+ }
+
public void beforeSettings()
{
if (!ess.getDataFolder().exists())
@@ -701,5 +750,6 @@ public class EssentialsUpgrade
updateUsersPowerToolsFormat();
updateUsersHomesFormat();
deleteOldItemsCsv();
+ updateSpawnsToNewSpawnsConfig();
}
}
diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java
index a56fc790c..9b5c5457b 100644
--- a/Essentials/src/com/earth2me/essentials/IEssentials.java
+++ b/Essentials/src/com/earth2me/essentials/IEssentials.java
@@ -15,10 +15,10 @@ public interface IEssentials extends Plugin
void reload();
- boolean onCommandEssentials(CommandSender sender, Command command, String commandLabel, String[] args, ClassLoader classLoader, String commandPath, String permissionPrefix);
+ boolean onCommandEssentials(CommandSender sender, Command command, String commandLabel, String[] args, ClassLoader classLoader, String commandPath, String permissionPrefix, IEssentialsModule module);
User getUser(Object base);
-
+
I18n getI18n();
User getOfflineUser(String name);
@@ -39,8 +39,6 @@ public interface IEssentials extends Plugin
Backup getBackup();
- Spawn getSpawn();
-
Methods getPaymentMethod();
int scheduleAsyncDelayedTask(Runnable run);
@@ -54,7 +52,7 @@ public interface IEssentials extends Plugin
TNTExplodeListener getTNTListener();
PermissionsHandler getPermissionsHandler();
-
+
AlternativeCommandsHandler getAlternativeCommandsHandler();
void showError(final CommandSender sender, final Throwable exception, final String commandLabel);
diff --git a/Essentials/src/com/earth2me/essentials/IEssentialsModule.java b/Essentials/src/com/earth2me/essentials/IEssentialsModule.java
new file mode 100644
index 000000000..69a1a494c
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/IEssentialsModule.java
@@ -0,0 +1,6 @@
+package com.earth2me.essentials;
+
+
+public interface IEssentialsModule
+{
+}
diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java
index 92a4b77f5..654232012 100644
--- a/Essentials/src/com/earth2me/essentials/Teleport.java
+++ b/Essentials/src/com/earth2me/essentials/Teleport.java
@@ -7,6 +7,8 @@ import java.util.GregorianCalendar;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.player.PlayerRespawnEvent;
public class Teleport implements Runnable
@@ -122,9 +124,13 @@ public class Teleport implements Runnable
this.ess = ess;
}
- public void respawn(Spawn spawn, Trade chargeFor) throws Exception
+ public void respawn(final Trade chargeFor) throws Exception
{
- teleport(new Target(spawn.getSpawn(user.getGroup())), chargeFor);
+ final Player player = user.getBase();
+ final Location bed = player.getBedSpawnLocation();
+ final PlayerRespawnEvent pre = new PlayerRespawnEvent(player, bed == null ? player.getWorld().getSpawnLocation() : bed, bed != null);
+ ess.getServer().getPluginManager().callEvent(pre);
+ teleport(new Target(pre.getRespawnLocation()), chargeFor);
}
public void warp(String warp, Trade chargeFor) throws Exception
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
index 8b684e3af..ab8355ead 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java
@@ -43,7 +43,8 @@ public class Commandhome extends EssentialsCommand
}
try
{
- if ("bed".equalsIgnoreCase(homeName)) {
+ if ("bed".equalsIgnoreCase(homeName))
+ {
final Location bed = player.getBedSpawnLocation();
if (bed != null)
{
@@ -58,18 +59,7 @@ public class Commandhome extends EssentialsCommand
final List<String> homes = player.getHomes();
if (homes.isEmpty() && player.equals(user))
{
- final Location loc = player.getBedSpawnLocation();
- if (loc == null)
- {
- if (ess.getSettings().spawnIfNoHome())
- {
- user.getTeleport().respawn(ess.getSpawn(), charge);
- }
- }
- else
- {
- user.getTeleport().teleport(loc, charge);
- }
+ user.getTeleport().respawn(charge);
}
else if (homes.isEmpty())
{
diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
index 6b9d17b26..13328e1b5 100644
--- a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
+++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java
@@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.IEssentialsModule;
import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
@@ -17,6 +18,7 @@ public abstract class EssentialsCommand implements IEssentialsCommand
{
private final transient String name;
protected transient IEssentials ess;
+ protected transient IEssentialsModule module;
protected final static Logger logger = Logger.getLogger("Minecraft");
protected EssentialsCommand(final String name)
@@ -29,6 +31,12 @@ public abstract class EssentialsCommand implements IEssentialsCommand
{
this.ess = ess;
}
+
+ @Override
+ public void setEssentialsModule(final IEssentialsModule module)
+ {
+ this.module = module;
+ }
@Override
public String getName()
diff --git a/Essentials/src/com/earth2me/essentials/commands/IEssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/IEssentialsCommand.java
index f16d3059c..439c14d70 100644
--- a/Essentials/src/com/earth2me/essentials/commands/IEssentialsCommand.java
+++ b/Essentials/src/com/earth2me/essentials/commands/IEssentialsCommand.java
@@ -1,6 +1,7 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.IEssentialsModule;
import com.earth2me.essentials.User;
import org.bukkit.Server;
import org.bukkit.command.Command;
@@ -18,4 +19,6 @@ public interface IEssentialsCommand
throws Exception;
void setEssentials(IEssentials ess);
+
+ void setEssentialsModule(IEssentialsModule module);
}
diff --git a/Essentials/src/com/earth2me/essentials/settings/Spawns.java b/Essentials/src/com/earth2me/essentials/settings/Spawns.java
new file mode 100644
index 000000000..a0afa450c
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/settings/Spawns.java
@@ -0,0 +1,18 @@
+package com.earth2me.essentials.settings;
+
+import com.earth2me.essentials.storage.MapValueType;
+import com.earth2me.essentials.storage.StorageObject;
+import java.util.HashMap;
+import java.util.Map;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.bukkit.Location;
+
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Spawns implements StorageObject
+{
+ @MapValueType(Location.class)
+ private Map<String, Location> spawns = new HashMap<String, Location>();
+}
diff --git a/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java
new file mode 100644
index 000000000..0bac39bdb
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/storage/AbstractDelayedYamlFileReader.java
@@ -0,0 +1,61 @@
+package com.earth2me.essentials.storage;
+
+import com.earth2me.essentials.IEssentials;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.logging.Level;
+import org.bukkit.Bukkit;
+import org.bukkit.plugin.Plugin;
+
+
+public abstract class AbstractDelayedYamlFileReader<T extends StorageObject> implements Runnable
+{
+ private final transient File file;
+ private final transient Class<T> clazz;
+ private final transient Plugin plugin;
+
+ public AbstractDelayedYamlFileReader(final IEssentials ess, final File file, final Class<T> clazz)
+ {
+ this.file = file;
+ this.clazz = clazz;
+ this.plugin = ess;
+ ess.scheduleAsyncDelayedTask(this);
+ }
+
+ public abstract void onStart();
+
+ @Override
+ public void run()
+ {
+ FileReader reader = null;
+ try
+ {
+ onStart();
+ reader = new FileReader(file);
+ final T object = new YamlStorageReader(reader, plugin).load(clazz);
+ onFinish(object);
+ }
+ catch (FileNotFoundException ex)
+ {
+ Bukkit.getLogger().log(Level.SEVERE, file.toString(), ex);
+ }
+ finally
+ {
+ try
+ {
+ if (reader != null)
+ {
+ reader.close();
+ }
+ }
+ catch (IOException ex)
+ {
+ Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex);
+ }
+ }
+ }
+
+ public abstract void onFinish(T object);
+}
diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java
index c3cd9a022..77b542144 100644
--- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java
+++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java
@@ -9,17 +9,22 @@ import org.bukkit.World;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.java.JavaPluginLoader;
import org.yaml.snakeyaml.constructor.Constructor;
+import org.yaml.snakeyaml.error.YAMLException;
import org.yaml.snakeyaml.nodes.*;
public class BukkitConstructor extends Constructor
{
private final transient Pattern NUMPATTERN = Pattern.compile("\\d+");
+ private final transient Plugin plugin;
- public BukkitConstructor(Class clazz)
+ public BukkitConstructor(final Class clazz, final Plugin plugin)
{
super(clazz);
+ this.plugin = plugin;
yamlClassConstructors.put(NodeId.scalar, new ConstructBukkitScalar());
yamlClassConstructors.put(NodeId.mapping, new ConstructBukkitMapping());
}
@@ -266,4 +271,29 @@ public class BukkitConstructor extends Constructor
return super.construct(node);
}
}
+
+ @Override
+ protected Class<?> getClassForNode(final Node node)
+ {
+ Class<?> clazz;
+ final String name = node.getTag().getClassName();
+ if (plugin == null)
+ {
+ clazz = super.getClassForNode(node);
+ }
+ else
+ {
+ final JavaPluginLoader jpl = (JavaPluginLoader)plugin.getPluginLoader();
+ clazz = jpl.getClassByName(name);
+ }
+
+ if (clazz == null)
+ {
+ throw new YAMLException("Class not found: " + name);
+ }
+ else
+ {
+ return clazz;
+ }
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/storage/YamlStorageReader.java b/Essentials/src/com/earth2me/essentials/storage/YamlStorageReader.java
index 321f5fc3c..3aa483e5c 100644
--- a/Essentials/src/com/earth2me/essentials/storage/YamlStorageReader.java
+++ b/Essentials/src/com/earth2me/essentials/storage/YamlStorageReader.java
@@ -6,6 +6,7 @@ import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.bukkit.plugin.Plugin;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
@@ -16,10 +17,12 @@ public class YamlStorageReader implements IStorageReader
private transient static Map<Class, Yaml> preparedYamls = Collections.synchronizedMap(new HashMap<Class, Yaml>());
private transient static Map<Class, ReentrantLock> locks = new HashMap<Class, ReentrantLock>();
private transient final Reader reader;
+ private transient final Plugin plugin;
- public YamlStorageReader(final Reader reader)
+ public YamlStorageReader(final Reader reader, final Plugin plugin)
{
this.reader = reader;
+ this.plugin = plugin;
}
@Override
@@ -68,16 +71,16 @@ public class YamlStorageReader implements IStorageReader
return ret;
}
- private static Constructor prepareConstructor(final Class<?> clazz)
+ private Constructor prepareConstructor(final Class<?> clazz)
{
- final Constructor constructor = new BukkitConstructor(clazz);
+ final Constructor constructor = new BukkitConstructor(clazz, plugin);
final Set<Class> classes = new HashSet<Class>();
prepareConstructor(constructor, classes, clazz);
return constructor;
}
- private static void prepareConstructor(final Constructor constructor, final Set<Class> classes, final Class clazz)
+ private void prepareConstructor(final Constructor constructor, final Set<Class> classes, final Class clazz)
{
classes.add(clazz);
final TypeDescription description = new TypeDescription(clazz);
@@ -94,7 +97,7 @@ public class YamlStorageReader implements IStorageReader
constructor.addTypeDescription(description);
}
- private static void prepareList(final Field field, final TypeDescription description, final Set<Class> classes, final Constructor constructor)
+ private void prepareList(final Field field, final TypeDescription description, final Set<Class> classes, final Constructor constructor)
{
final ListType listType = field.getAnnotation(ListType.class);
if (listType != null)
@@ -108,7 +111,7 @@ public class YamlStorageReader implements IStorageReader
}
}
- private static void prepareMap(final Field field, final TypeDescription description, final Set<Class> classes, final Constructor constructor)
+ private void prepareMap(final Field field, final TypeDescription description, final Set<Class> classes, final Constructor constructor)
{
final MapValueType mapType = field.getAnnotation(MapValueType.class);
if (mapType != null)
diff --git a/Essentials/src/com/earth2me/essentials/user/User.java b/Essentials/src/com/earth2me/essentials/user/User.java
index 6ad35bfae..70f2c7f3c 100644
--- a/Essentials/src/com/earth2me/essentials/user/User.java
+++ b/Essentials/src/com/earth2me/essentials/user/User.java
@@ -3,7 +3,6 @@ package com.earth2me.essentials.user;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.storage.AbstractDelayedYamlFileWriter;
import com.earth2me.essentials.storage.StorageObject;
-import com.earth2me.essentials.storage.YamlStorageReader;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import lombok.Cleanup;
import org.bukkit.OfflinePlayer;
@@ -25,11 +24,6 @@ public class User extends UserBase implements IOfflineUser
super(offlinePlayer, ess);
}
- public void loadUserData()
- {
- data = new YamlStorageReader(null).load(UserData.class);
- }
-
@Override
public UserData getData()
{
diff --git a/Essentials/test/com/earth2me/essentials/StorageTest.java b/Essentials/test/com/earth2me/essentials/StorageTest.java
index d57d88542..d4dc1be70 100644
--- a/Essentials/test/com/earth2me/essentials/StorageTest.java
+++ b/Essentials/test/com/earth2me/essentials/StorageTest.java
@@ -47,11 +47,11 @@ public class StorageTest extends TestCase
ext.start();
final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
final Reader reader = new InputStreamReader(bais);
- final Settings settings = new YamlStorageReader(reader).load(Settings.class);
+ final Settings settings = new YamlStorageReader(reader, null).load(Settings.class);
ext.mark("load empty settings");
final ByteArrayInputStream bais3 = new ByteArrayInputStream(new byte[0]);
final Reader reader3 = new InputStreamReader(bais3);
- final Settings settings3 = new YamlStorageReader(reader3).load(Settings.class);
+ final Settings settings3 = new YamlStorageReader(reader3, null).load(Settings.class);
ext.mark("load empty settings (class cached)");
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final PrintWriter writer = new PrintWriter(baos);
@@ -62,7 +62,7 @@ public class StorageTest extends TestCase
System.out.println(new String(written));
final ByteArrayInputStream bais2 = new ByteArrayInputStream(written);
final Reader reader2 = new InputStreamReader(bais2);
- final Settings settings2 = new YamlStorageReader(reader2).load(Settings.class);
+ final Settings settings2 = new YamlStorageReader(reader2, null).load(Settings.class);
System.out.println(settings.toString());
System.out.println(settings2.toString());
ext.mark("reload settings");
@@ -80,11 +80,11 @@ public class StorageTest extends TestCase
ext.start();
final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
final Reader reader = new InputStreamReader(bais);
- final com.earth2me.essentials.user.UserData userdata = new YamlStorageReader(reader).load(com.earth2me.essentials.user.UserData.class);
+ final com.earth2me.essentials.user.UserData userdata = new YamlStorageReader(reader, null).load(com.earth2me.essentials.user.UserData.class);
ext.mark("load empty user");
final ByteArrayInputStream bais3 = new ByteArrayInputStream(new byte[0]);
final Reader reader3 = new InputStreamReader(bais3);
- final com.earth2me.essentials.user.UserData userdata3 = new YamlStorageReader(reader3).load(com.earth2me.essentials.user.UserData.class);
+ final com.earth2me.essentials.user.UserData userdata3 = new YamlStorageReader(reader3, null).load(com.earth2me.essentials.user.UserData.class);
ext.mark("load empty user (class cached)");
for (int j = 0; j < 10000; j++)
@@ -107,11 +107,11 @@ public class StorageTest extends TestCase
ext.mark("debug output");
final ByteArrayInputStream bais2 = new ByteArrayInputStream(written);
final Reader reader2 = new InputStreamReader(bais2);
- final com.earth2me.essentials.user.UserData userdata2 = new YamlStorageReader(reader2).load(com.earth2me.essentials.user.UserData.class);
+ final com.earth2me.essentials.user.UserData userdata2 = new YamlStorageReader(reader2, null).load(com.earth2me.essentials.user.UserData.class);
ext.mark("reload file");
final ByteArrayInputStream bais4 = new ByteArrayInputStream(written);
final Reader reader4 = new InputStreamReader(bais4);
- final com.earth2me.essentials.user.UserData userdata4 = new YamlStorageReader(reader4).load(com.earth2me.essentials.user.UserData.class);
+ final com.earth2me.essentials.user.UserData userdata4 = new YamlStorageReader(reader4, null).load(com.earth2me.essentials.user.UserData.class);
ext.mark("reload file (cached)");
System.out.println(userdata.toString());
System.out.println(userdata2.toString());
diff --git a/EssentialsSpawn/nbproject/pmd.settings b/EssentialsSpawn/nbproject/pmd.settings
new file mode 100644
index 000000000..6a34e356c
--- /dev/null
+++ b/EssentialsSpawn/nbproject/pmd.settings
@@ -0,0 +1 @@
+DoNotUseThreads
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java
index 33dff8241..c6c89a20d 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java
@@ -14,10 +14,10 @@ public class Commandsetspawn extends EssentialsCommand
}
@Override
- public void run(Server server, User user, String commandLabel, String[] args) throws Exception
+ public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
final String group = args.length > 0 ? getFinalArg(args, 0) : "default";
- ess.getSpawn().setSpawn(user.getLocation(), group);
+ ((SpawnStorage)module).setSpawn(user.getLocation(), group);
user.sendMessage(_("spawnSet", group));
}
}
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandspawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandspawn.java
index 635d782f2..fe1630b4d 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandspawn.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandspawn.java
@@ -24,7 +24,7 @@ public class Commandspawn extends EssentialsCommand
if (args.length > 0 && user.isAuthorized("essentials.spawn.others"))
{
final User otherUser = getPlayer(server, args, 0);
- otherUser.getTeleport().respawn(ess.getSpawn(), charge);
+ otherUser.getTeleport().respawn(charge);
if (!otherUser.equals(user))
{
otherUser.sendMessage(_("teleportAtoB", user.getDisplayName(), "spawn"));
@@ -33,7 +33,7 @@ public class Commandspawn extends EssentialsCommand
}
else
{
- user.getTeleport().respawn(ess.getSpawn(), charge);
+ user.getTeleport().respawn(charge);
}
}
@@ -45,7 +45,7 @@ public class Commandspawn extends EssentialsCommand
throw new NotEnoughArgumentsException();
}
final User user = getPlayer(server, args, 0);
- user.getTeleport().respawn(ess.getSpawn(), null);
+ user.getTeleport().respawn(null);
user.sendMessage(_("teleportAtoB", user.getDisplayName(), "spawn"));
sender.sendMessage(_("teleporting"));
}
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java
index 256faf6c7..6f6244f25 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java
@@ -2,8 +2,10 @@ package com.earth2me.essentials.spawn;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.IEssentialsModule;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Event.Priority;
@@ -14,8 +16,9 @@ import org.bukkit.plugin.java.JavaPlugin;
public class EssentialsSpawn extends JavaPlugin
{
- private static final Logger LOGGER = Logger.getLogger("Minecraft");
+ private static final Logger LOGGER = Bukkit.getLogger();
private transient IEssentials ess;
+ private transient SpawnStorage spawns;
public void onEnable()
{
@@ -25,11 +28,15 @@ public class EssentialsSpawn extends JavaPlugin
{
LOGGER.log(Level.WARNING, _("versionMismatchAll"));
}
- if (!ess.isEnabled()) {
+ if (!ess.isEnabled())
+ {
this.setEnabled(false);
return;
}
- final EssentialsSpawnPlayerListener playerListener = new EssentialsSpawnPlayerListener(ess);
+
+ spawns = new SpawnStorage(ess);
+
+ final EssentialsSpawnPlayerListener playerListener = new EssentialsSpawnPlayerListener(ess, spawns);
pluginManager.registerEvent(Type.PLAYER_RESPAWN, playerListener, Priority.Low, this);
pluginManager.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Low, this);
@@ -41,8 +48,9 @@ public class EssentialsSpawn extends JavaPlugin
}
@Override
- public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args)
+ public boolean onCommand(final CommandSender sender, final Command command,
+ final String commandLabel, final String[] args)
{
- return ess.onCommandEssentials(sender, command, commandLabel, args, EssentialsSpawn.class.getClassLoader(), "com.earth2me.essentials.spawn.Command", "essentials.");
+ return ess.onCommandEssentials(sender, command, commandLabel, args, EssentialsSpawn.class.getClassLoader(), "com.earth2me.essentials.spawn.Command", "essentials.", spawns);
}
}
diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
index bca748296..6bb453f12 100644
--- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
+++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java
@@ -4,7 +4,7 @@ import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import java.util.logging.Level;
-import java.util.logging.Logger;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
@@ -14,11 +14,13 @@ import org.bukkit.event.player.PlayerRespawnEvent;
public class EssentialsSpawnPlayerListener extends PlayerListener
{
private final transient IEssentials ess;
+ private final transient SpawnStorage spawns;
- public EssentialsSpawnPlayerListener(final IEssentials ess)
+ public EssentialsSpawnPlayerListener(final IEssentials ess, final SpawnStorage spawns)
{
super();
this.ess = ess;
+ this.spawns = spawns;
}
@Override
@@ -39,7 +41,7 @@ public class EssentialsSpawnPlayerListener extends PlayerListener
return;
}
}
- final Location spawn = ess.getSpawn().getSpawn(user.getGroup());
+ final Location spawn = spawns.getSpawn(user.getGroup());
if (spawn != null)
{
event.setRespawnLocation(spawn);
@@ -58,20 +60,7 @@ public class EssentialsSpawnPlayerListener extends PlayerListener
user.setNew(false);
if (!"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn()))
{
- ess.scheduleSyncDelayedTask(new Runnable()
- {
- public void run()
- {
- try
- {
- user.getTeleport().now(ess.getSpawn().getSpawn(ess.getSettings().getNewbieSpawn()), false);
- }
- catch (Exception ex)
- {
- Logger.getLogger("Minecraft").log(Level.WARNING, _("teleportNewPlayerError"), ex);
- }
- }
- });
+ ess.scheduleSyncDelayedTask(new NewPlayerTeleport(user));
}
if (ess.getSettings().getAnnounceNewPlayers())
@@ -79,4 +68,28 @@ public class EssentialsSpawnPlayerListener extends PlayerListener
ess.broadcastMessage(user, ess.getSettings().getAnnounceNewPlayerFormat(user));
}
}
+
+
+ private class NewPlayerTeleport implements Runnable
+ {
+ private final transient User user;
+
+ public NewPlayerTeleport(final User user)
+ {
+ this.user = user;
+ }
+
+ @Override
+ public void run()
+ {
+ try
+ {
+ user.getTeleport().now(spawns.getSpawn(ess.getSettings().getNewbieSpawn()), false);
+ }
+ catch (Exception ex)
+ {
+ Bukkit.getLogger().log(Level.WARNING, _("teleportNewPlayerError"), ex);
+ }
+ }
+ }
}
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();
+ }
+ }
+}
diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java
index 56126e23b..bcbbfa17d 100644
--- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java
+++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java
@@ -67,12 +67,13 @@ public class EssentialsXMPP extends JavaPlugin implements IEssentialsXMPP
{
xmpp.disconnect();
}
+ instance = null;
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args)
{
- return ess.onCommandEssentials(sender, command, commandLabel, args, EssentialsXMPP.class.getClassLoader(), "com.earth2me.essentials.xmpp.Command", "essentials.");
+ return ess.onCommandEssentials(sender, command, commandLabel, args, EssentialsXMPP.class.getClassLoader(), "com.earth2me.essentials.xmpp.Command", "essentials.", null);
}
@Override