From 6af054631fe04ef7a607f24e459e37836c568100 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 24 Jan 2012 00:01:31 +0100 Subject: More work on 3.0 branch --- .gitignore | 3 +- .../com/earth2me/essentials/ChargeException.java | 15 - .../earth2me/essentials/DescParseTickFormat.java | 3 - .../src/com/earth2me/essentials/Essentials.java | 24 +- .../com/earth2me/essentials/EssentialsConf.java | 302 ------ .../com/earth2me/essentials/EssentialsUpgrade.java | 806 --------------- .../src/com/earth2me/essentials/ISettings.java | 156 --- Essentials/src/com/earth2me/essentials/IUser.java | 49 - Essentials/src/com/earth2me/essentials/Kits.java | 2 - .../src/com/earth2me/essentials/ManagedFile.java | 228 ---- .../src/com/earth2me/essentials/OfflinePlayer.java | 833 --------------- .../com/earth2me/essentials/PlayerExtension.java | 38 - .../src/com/earth2me/essentials/Settings.java | 646 ------------ Essentials/src/com/earth2me/essentials/User.java | 597 ----------- .../src/com/earth2me/essentials/UserData.java | 863 ---------------- .../src/com/earth2me/essentials/UserMap.java | 130 --- Essentials/src/com/earth2me/essentials/Worth.java | 96 +- .../earth2me/essentials/api/ChargeException.java | 15 + .../com/earth2me/essentials/api/IEssentials.java | 2 - .../essentials/api/IEssentialsEconomy.java | 37 - .../essentials/settings/geoip/Database.java | 16 + .../earth2me/essentials/settings/geoip/GeoIP.java | 15 + .../earth2me/essentials/storage/ManagedFile.java | 228 ++++ Essentials/src/plugin.yml | 2 +- Essentials2Compat/build.xml | 74 ++ Essentials2Compat/manifest.mf | 3 + Essentials2Compat/nbproject/build-impl.xml | 1092 ++++++++++++++++++++ Essentials2Compat/nbproject/genfiles.properties | 8 + Essentials2Compat/nbproject/project.properties | 126 +++ Essentials2Compat/nbproject/project.xml | 28 + .../src/com/earth2me/essentials/Essentials.java | 22 + .../com/earth2me/essentials/EssentialsConf.java | 302 ++++++ .../com/earth2me/essentials/EssentialsUpgrade.java | 806 +++++++++++++++ Essentials2Compat/src/plugin.yml | 6 + .../earth2me/essentials/geoip/ConfigHolder.java | 27 + .../earth2me/essentials/geoip/EssentialsGeoIP.java | 3 +- .../geoip/EssentialsGeoIPPlayerListener.java | 227 ++-- EssentialsXMPP/nbproject/build-impl.xml | 14 + EssentialsXMPP/nbproject/genfiles.properties | 4 +- EssentialsXMPP/nbproject/project.properties | 5 +- EssentialsXMPP/nbproject/project.xml | 8 + build.xml | 1 + 42 files changed, 3006 insertions(+), 4856 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/ChargeException.java delete mode 100644 Essentials/src/com/earth2me/essentials/EssentialsConf.java delete mode 100644 Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java delete mode 100644 Essentials/src/com/earth2me/essentials/ISettings.java delete mode 100644 Essentials/src/com/earth2me/essentials/IUser.java delete mode 100644 Essentials/src/com/earth2me/essentials/ManagedFile.java delete mode 100644 Essentials/src/com/earth2me/essentials/OfflinePlayer.java delete mode 100644 Essentials/src/com/earth2me/essentials/PlayerExtension.java delete mode 100644 Essentials/src/com/earth2me/essentials/Settings.java delete mode 100644 Essentials/src/com/earth2me/essentials/User.java delete mode 100644 Essentials/src/com/earth2me/essentials/UserData.java delete mode 100644 Essentials/src/com/earth2me/essentials/UserMap.java create mode 100644 Essentials/src/com/earth2me/essentials/api/ChargeException.java delete mode 100644 Essentials/src/com/earth2me/essentials/api/IEssentialsEconomy.java create mode 100644 Essentials/src/com/earth2me/essentials/settings/geoip/Database.java create mode 100644 Essentials/src/com/earth2me/essentials/settings/geoip/GeoIP.java create mode 100644 Essentials/src/com/earth2me/essentials/storage/ManagedFile.java create mode 100644 Essentials2Compat/build.xml create mode 100644 Essentials2Compat/manifest.mf create mode 100644 Essentials2Compat/nbproject/build-impl.xml create mode 100644 Essentials2Compat/nbproject/genfiles.properties create mode 100644 Essentials2Compat/nbproject/project.properties create mode 100644 Essentials2Compat/nbproject/project.xml create mode 100644 Essentials2Compat/src/com/earth2me/essentials/Essentials.java create mode 100644 Essentials2Compat/src/com/earth2me/essentials/EssentialsConf.java create mode 100644 Essentials2Compat/src/com/earth2me/essentials/EssentialsUpgrade.java create mode 100644 Essentials2Compat/src/plugin.yml create mode 100644 EssentialsGeoIP/src/com/earth2me/essentials/geoip/ConfigHolder.java diff --git a/.gitignore b/.gitignore index 1083defe4..8d1266938 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,5 @@ /WebPush/nbproject/private /.idea *.iml -/EssentialsSigns/nbproject/private/ \ No newline at end of file +/EssentialsSigns/nbproject/private/ +/Essentials2Compat/nbproject/private/ \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/ChargeException.java b/Essentials/src/com/earth2me/essentials/ChargeException.java deleted file mode 100644 index 2fa4c7289..000000000 --- a/Essentials/src/com/earth2me/essentials/ChargeException.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.earth2me.essentials; - - -public class ChargeException extends Exception -{ - public ChargeException(final String message) - { - super(message); - } - - public ChargeException(final String message, final Throwable throwable) - { - super(message, throwable); - } -} diff --git a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java index bf3037e59..ab8e6d6a3 100644 --- a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java +++ b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java @@ -16,9 +16,6 @@ import java.util.*; */ public final class DescParseTickFormat { - // ============================================ - // First some information vars. TODO: Should this be in a config file? - // -------------------------------------------- public static final Map nameToTicks = new LinkedHashMap(); public static final Set resetAliases = new HashSet(); public static final int ticksAtMidnight = 18000; diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index e5c64144e..400ef4f81 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -24,6 +24,7 @@ import com.earth2me.essentials.craftbukkit.ItemDupeFix; import com.earth2me.essentials.listener.*; import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.register.payment.Methods; +import com.earth2me.essentials.settings.GroupsHolder; import com.earth2me.essentials.settings.SettingsHolder; import com.earth2me.essentials.user.UserMap; import java.io.File; @@ -65,6 +66,7 @@ public class Essentials extends JavaPlugin implements IEssentials private transient List reloadList; private transient IBackup backup; private transient IItemDb itemDb; + private transient IGroups groups; private transient final Methods paymentMethod = new Methods(); private transient PermissionsHandler permissionsHandler; private transient IUserMap userMap; @@ -141,23 +143,25 @@ public class Essentials extends JavaPlugin implements IEssentials execTimer.mark("BukkitCheck"); try { - final EssentialsUpgrade upgrade = new EssentialsUpgrade(this); - upgrade.beforeSettings(); - execTimer.mark("Upgrade"); + //final EssentialsUpgrade upgrade = new EssentialsUpgrade(this); + //upgrade.beforeSettings(); + //execTimer.mark("Upgrade"); reloadList = new ArrayList(); settings = new SettingsHolder(this); reloadList.add(settings); execTimer.mark("Settings"); - upgrade.afterSettings(); - execTimer.mark("Upgrade2"); + //upgrade.afterSettings(); + //execTimer.mark("Upgrade2"); i18n.updateLocale(settings.getLocale()); userMap = new UserMap(this); reloadList.add(userMap); execTimer.mark("Init(Usermap)"); + groups = new GroupsHolder(this); + reloadList.add(groups); warps = new Warps(this); reloadList.add(warps); execTimer.mark("Init(Spawn/Warp)"); - worth = new Worth(this.getDataFolder()); + worth = new Worth(this); reloadList.add(worth); itemDb = new ItemDb(this); reloadList.add(itemDb); @@ -429,13 +433,7 @@ public class Essentials extends JavaPlugin implements IEssentials @Override public IGroups getGroups() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public IEssentialsEconomy getEconomy() - { - throw new UnsupportedOperationException("Not supported yet."); + return groups; } @Override diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java deleted file mode 100644 index 3a37f04b0..000000000 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ /dev/null @@ -1,302 +0,0 @@ -package com.earth2me.essentials; - -import static com.earth2me.essentials.I18n._; -import java.io.*; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.config.Configuration; - -@Deprecated -public class EssentialsConf extends Configuration -{ - private static final Logger LOGGER = Logger.getLogger("Minecraft"); - private transient File configFile; - private transient String templateName = null; - private transient Class resourceClass = EssentialsConf.class; - - public EssentialsConf(final File configFile) - { - super(configFile); - this.configFile = configFile; - if (this.root == null) - { - this.root = new HashMap(); - } - } - - @Override - public void load() - { - configFile = configFile.getAbsoluteFile(); - if (!configFile.getParentFile().exists()) - { - if (!configFile.getParentFile().mkdirs()) - { - LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString())); - } - } - // This will delete files where the first character is 0. In most cases they are broken. - if (configFile.exists() && configFile.length() != 0) - { - try - { - final InputStream input = new FileInputStream(configFile); - try - { - if (input.read() == 0) - { - input.close(); - configFile.delete(); - } - } - catch (IOException ex) - { - LOGGER.log(Level.SEVERE, null, ex); - } - finally - { - try - { - input.close(); - } - catch (IOException ex) - { - LOGGER.log(Level.SEVERE, null, ex); - } - } - } - catch (FileNotFoundException ex) - { - LOGGER.log(Level.SEVERE, null, ex); - } - } - - if (!configFile.exists()) - { - if (templateName != null) - { - LOGGER.log(Level.INFO, _("creatingConfigFromTemplate", configFile.toString())); - createFromTemplate(); - } - else - { - try - { - LOGGER.log(Level.INFO, _("creatingEmptyConfig", configFile.toString())); - if (!configFile.createNewFile()) - { - LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString())); - } - } - catch (IOException ex) - { - LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString()), ex); - } - } - } - - try - { - super.load(); - } - catch (RuntimeException e) - { - LOGGER.log(Level.SEVERE, "File broken: " + configFile.toString()); - throw e; - } - - if (this.root == null) - { - this.root = new HashMap(); - } - } - - private void createFromTemplate() - { - InputStream istr = null; - OutputStream ostr = null; - try - { - istr = resourceClass.getResourceAsStream(templateName); - if (istr == null) - { - LOGGER.log(Level.SEVERE, _("couldNotFindTemplate", templateName)); - return; - } - ostr = new FileOutputStream(configFile); - byte[] buffer = new byte[1024]; - int length = 0; - length = istr.read(buffer); - while (length > 0) - { - ostr.write(buffer, 0, length); - length = istr.read(buffer); - } - } - catch (IOException ex) - { - LOGGER.log(Level.SEVERE, _("failedToWriteConfig", configFile.toString()), ex); - } - finally - { - try - { - if (istr != null) - { - istr.close(); - } - } - catch (IOException ex) - { - Logger.getLogger(EssentialsConf.class.getName()).log(Level.SEVERE, null, ex); - } - try - { - if (ostr != null) - { - ostr.close(); - } - } - catch (IOException ex) - { - LOGGER.log(Level.SEVERE, _("failedToCloseConfig", configFile.toString()), ex); - } - } - } - - public void setTemplateName(final String templateName) - { - this.templateName = templateName; - } - - public File getFile() - { - return configFile; - } - - public void setTemplateName(final String templateName, final Class resClass) - { - this.templateName = templateName; - this.resourceClass = resClass; - } - - public boolean hasProperty(final String path) - { - return getProperty(path) != null; - } - - public Location getLocation(final String path, final Server server) throws Exception - { - final String worldName = getString((path == null ? "" : path + ".") + "world"); - if (worldName == null || worldName.isEmpty()) - { - return null; - } - final World world = server.getWorld(worldName); - if (world == null) - { - throw new Exception(_("invalidWorld")); - } - return new Location(world, - getDouble((path == null ? "" : path + ".") + "x", 0), - getDouble((path == null ? "" : path + ".") + "y", 0), - getDouble((path == null ? "" : path + ".") + "z", 0), - (float)getDouble((path == null ? "" : path + ".") + "yaw", 0), - (float)getDouble((path == null ? "" : path + ".") + "pitch", 0)); - } - - public void setProperty(final String path, final Location loc) - { - setProperty((path == null ? "" : path + ".") + "world", loc.getWorld().getName()); - setProperty((path == null ? "" : path + ".") + "x", loc.getX()); - setProperty((path == null ? "" : path + ".") + "y", loc.getY()); - setProperty((path == null ? "" : path + ".") + "z", loc.getZ()); - setProperty((path == null ? "" : path + ".") + "yaw", loc.getYaw()); - setProperty((path == null ? "" : path + ".") + "pitch", loc.getPitch()); - } - - public ItemStack getItemStack(final String path) - { - final ItemStack stack = new ItemStack( - Material.valueOf(getString(path + ".type", "AIR")), - getInt(path + ".amount", 1), - (short)getInt(path + ".damage", 0)); - final List enchants = getKeys(path + ".enchant"); - if (enchants != null) - { - for (String enchant : enchants) - { - final Enchantment enchantment = Enchantment.getByName(enchant.toUpperCase(Locale.ENGLISH)); - if (enchantment == null) - { - continue; - } - final int level = getInt(path + ".enchant." + enchant, enchantment.getStartLevel()); - stack.addUnsafeEnchantment(enchantment, level); - } - } - return stack; - /* - * , - * (byte)getInt(path + ".data", 0) - */ - } - - public void setProperty(final String path, final ItemStack stack) - { - final Map map = new HashMap(); - map.put("type", stack.getType().toString()); - map.put("amount", stack.getAmount()); - map.put("damage", stack.getDurability()); - Map enchantments = stack.getEnchantments(); - if (!enchantments.isEmpty()) - { - Map enchant = new HashMap(); - for (Map.Entry entry : enchantments.entrySet()) - { - enchant.put(entry.getKey().getName().toLowerCase(Locale.ENGLISH), entry.getValue()); - } - map.put("enchant", enchant); - } - // getData().getData() is broken - //map.put("data", stack.getDurability()); - setProperty(path, map); - } - - public long getLong(final String path, final long def) - { - try - { - final Number num = (Number)getProperty(path); - return num == null ? def : num.longValue(); - } - catch (ClassCastException ex) - { - return def; - } - } - - @Override - public double getDouble(final String path, final double def) - { - try - { - Number num = (Number)getProperty(path); - return num == null ? def : num.doubleValue(); - } - catch (ClassCastException ex) - { - return def; - } - } -} diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java deleted file mode 100644 index eef473783..000000000 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ /dev/null @@ -1,806 +0,0 @@ -package com.earth2me.essentials; - -import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.api.IEssentials; -import com.earth2me.essentials.craftbukkit.FakeWorld; -import com.earth2me.essentials.settings.Spawns; -import com.earth2me.essentials.storage.YamlStorageWriter; -import java.io.*; -import java.math.BigInteger; -import java.security.DigestInputStream; -import java.security.MessageDigest; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.inventory.ItemStack; - - -public class EssentialsUpgrade -{ - private final static Logger LOGGER = Logger.getLogger("Minecraft"); - private final transient IEssentials ess; - private final transient EssentialsConf doneFile; - - EssentialsUpgrade(final IEssentials essentials) - { - ess = essentials; - if (!ess.getDataFolder().exists()) - { - ess.getDataFolder().mkdirs(); - } - doneFile = new EssentialsConf(new File(ess.getDataFolder(), "upgrades-done.yml")); - doneFile.load(); - } - - private void moveWorthValuesToWorthYml() - { - if (doneFile.getBoolean("moveWorthValuesToWorthYml", false)) - { - return; - } - try - { - final File configFile = new File(ess.getDataFolder(), "config.yml"); - if (!configFile.exists()) - { - return; - } - final EssentialsConf conf = new EssentialsConf(configFile); - conf.load(); - final Worth worth = new Worth(ess.getDataFolder()); - boolean found = false; - for (Material mat : Material.values()) - { - final int id = mat.getId(); - final double value = conf.getDouble("worth-" + id, Double.NaN); - if (!Double.isNaN(value)) - { - found = true; - worth.setPrice(new ItemStack(mat, 1, (short)0, (byte)0), value); - } - } - if (found) - { - removeLinesFromConfig(configFile, "\\s*#?\\s*worth-[0-9]+.*", "# Worth values have been moved to worth.yml"); - } - doneFile.setProperty("moveWorthValuesToWorthYml", true); - doneFile.save(); - } - catch (Throwable e) - { - LOGGER.log(Level.SEVERE, _("upgradingFilesError"), e); - } - } - - private void moveMotdRulesToFile(String name) - { - if (doneFile.getBoolean("move" + name + "ToFile", false)) - { - return; - } - try - { - final File file = new File(ess.getDataFolder(), name + ".txt"); - if (file.exists()) - { - return; - } - final File configFile = new File(ess.getDataFolder(), "config.yml"); - if (!configFile.exists()) - { - return; - } - final EssentialsConf conf = new EssentialsConf(configFile); - conf.load(); - List lines = conf.getStringList(name, null); - if (lines != null && !lines.isEmpty()) - { - if (!file.createNewFile()) - { - throw new IOException("Failed to create file " + file); - } - PrintWriter writer = new PrintWriter(file); - - for (String line : lines) - { - writer.println(line); - } - writer.close(); - } - doneFile.setProperty("move" + name + "ToFile", true); - doneFile.save(); - } - catch (Throwable e) - { - LOGGER.log(Level.SEVERE, _("upgradingFilesError"), e); - } - } - - private void removeLinesFromConfig(File file, String regex, String info) throws Exception - { - boolean needUpdate = false; - final BufferedReader bReader = new BufferedReader(new FileReader(file)); - final File tempFile = File.createTempFile("essentialsupgrade", ".tmp.yml", ess.getDataFolder()); - final BufferedWriter bWriter = new BufferedWriter(new FileWriter(tempFile)); - do - { - final String line = bReader.readLine(); - if (line == null) - { - break; - } - if (line.matches(regex)) - { - if (!needUpdate && info != null) - { - bWriter.write(info, 0, info.length()); - bWriter.newLine(); - } - needUpdate = true; - } - else - { - if (line.endsWith("\r\n")) - { - bWriter.write(line, 0, line.length() - 2); - } - else if (line.endsWith("\r") || line.endsWith("\n")) - { - bWriter.write(line, 0, line.length() - 1); - } - else - { - bWriter.write(line, 0, line.length()); - } - bWriter.newLine(); - } - } - while (true); - bReader.close(); - bWriter.close(); - if (needUpdate) - { - if (!file.renameTo(new File(file.getParentFile(), file.getName().concat("." + System.currentTimeMillis() + ".upgradebackup")))) - { - throw new Exception(_("configFileMoveError")); - } - if (!tempFile.renameTo(file)) - { - throw new Exception(_("configFileRenameError")); - } - } - else - { - tempFile.delete(); - } - } - - private void updateUsersToNewDefaultHome() - { - if (doneFile.getBoolean("updateUsersToNewDefaultHome", false)) - { - return; - } - final File userdataFolder = new File(ess.getDataFolder(), "userdata"); - if (!userdataFolder.exists() || !userdataFolder.isDirectory()) - { - return; - } - final File[] userFiles = userdataFolder.listFiles(); - - for (File file : userFiles) - { - if (!file.isFile() || !file.getName().endsWith(".yml")) - { - continue; - } - final EssentialsConf config = new EssentialsConf(file); - try - { - config.load(); - if (config.hasProperty("home") && !config.hasProperty("home.default")) - { - @SuppressWarnings("unchecked") - final List vals = (List)config.getProperty("home"); - if (vals == null) - { - continue; - } - World world = ess.getServer().getWorlds().get(0); - if (vals.size() > 5) - { - world = ess.getServer().getWorld((String)vals.get(5)); - } - if (world != null) - { - final Location loc = new Location( - world, - ((Number)vals.get(0)).doubleValue(), - ((Number)vals.get(1)).doubleValue(), - ((Number)vals.get(2)).doubleValue(), - ((Number)vals.get(3)).floatValue(), - ((Number)vals.get(4)).floatValue()); - - final String worldName = world.getName().toLowerCase(Locale.ENGLISH); - if (worldName != null && !worldName.isEmpty()) - { - config.removeProperty("home"); - config.setProperty("home.default", worldName); - config.setProperty("home.worlds." + worldName, loc); - config.save(); - } - } - } - } - catch (RuntimeException ex) - { - LOGGER.log(Level.INFO, "File: " + file.toString()); - throw ex; - } - } - doneFile.setProperty("updateUsersToNewDefaultHome", true); - doneFile.save(); - } - - private void updateUsersPowerToolsFormat() - { - if (doneFile.getBoolean("updateUsersPowerToolsFormat", false)) - { - return; - } - final File userdataFolder = new File(ess.getDataFolder(), "userdata"); - if (!userdataFolder.exists() || !userdataFolder.isDirectory()) - { - return; - } - final File[] userFiles = userdataFolder.listFiles(); - - for (File file : userFiles) - { - if (!file.isFile() || !file.getName().endsWith(".yml")) - { - continue; - } - final EssentialsConf config = new EssentialsConf(file); - try - { - config.load(); - if (config.hasProperty("powertools")) - { - @SuppressWarnings("unchecked") - final Map powertools = (Map)config.getProperty("powertools"); - if (powertools == null) - { - continue; - } - for (Map.Entry entry : powertools.entrySet()) - { - if (entry.getValue() instanceof String) - { - List temp = new ArrayList(); - temp.add((String)entry.getValue()); - ((Map)powertools).put(entry.getKey(), temp); - } - } - config.save(); - } - } - catch (RuntimeException ex) - { - LOGGER.log(Level.INFO, "File: " + file.toString()); - throw ex; - } - } - doneFile.setProperty("updateUsersPowerToolsFormat", true); - doneFile.save(); - } - - private void updateUsersHomesFormat() - { - if (doneFile.getBoolean("updateUsersHomesFormat", false)) - { - return; - } - final File userdataFolder = new File(ess.getDataFolder(), "userdata"); - if (!userdataFolder.exists() || !userdataFolder.isDirectory()) - { - return; - } - final File[] userFiles = userdataFolder.listFiles(); - - for (File file : userFiles) - { - if (!file.isFile() || !file.getName().endsWith(".yml")) - { - continue; - } - final EssentialsConf config = new EssentialsConf(file); - try - { - - config.load(); - if (config.hasProperty("home") && config.hasProperty("home.default")) - { - @SuppressWarnings("unchecked") - final String defworld = (String)config.getProperty("home.default"); - final Location defloc = getFakeLocation(config, "home.worlds." + defworld); - if (defloc != null) - { - config.setProperty("homes.home", defloc); - } - - List worlds = config.getKeys("home.worlds"); - Location loc; - String worldName; - - if (worlds == null) - { - continue; - } - for (String world : worlds) - { - if (defworld.equalsIgnoreCase(world)) - { - continue; - } - loc = getFakeLocation(config, "home.worlds." + world); - if (loc == null) - { - continue; - } - worldName = loc.getWorld().getName().toLowerCase(Locale.ENGLISH); - if (worldName != null && !worldName.isEmpty()) - { - config.setProperty("homes." + worldName, loc); - } - } - config.removeProperty("home"); - config.save(); - } - - } - catch (RuntimeException ex) - { - LOGGER.log(Level.INFO, "File: " + file.toString()); - throw ex; - } - } - doneFile.setProperty("updateUsersHomesFormat", true); - doneFile.save(); - } - - /*private void moveUsersDataToUserdataFolder() - { - final File usersFile = new File(ess.getDataFolder(), "users.yml"); - if (!usersFile.exists()) - { - return; - } - final EssentialsConf usersConfig = new EssentialsConf(usersFile); - usersConfig.load(); - for (String username : usersConfig.getKeys(null)) - { - final User user = new User(new OfflinePlayer(username, ess), ess); - final String nickname = usersConfig.getString(username + ".nickname"); - if (nickname != null && !nickname.isEmpty() && !nickname.equals(username)) - { - user.setNickname(nickname); - } - final List mails = usersConfig.getStringList(username + ".mail", null); - if (mails != null && !mails.isEmpty()) - { - user.setMails(mails); - } - if (!user.hasHome()) - { - @SuppressWarnings("unchecked") - final List vals = (List)usersConfig.getProperty(username + ".home"); - if (vals != null) - { - World world = ess.getServer().getWorlds().get(0); - if (vals.size() > 5) - { - world = getFakeWorld((String)vals.get(5)); - } - if (world != null) - { - user.setHome("home", new Location(world, - ((Number)vals.get(0)).doubleValue(), - ((Number)vals.get(1)).doubleValue(), - ((Number)vals.get(2)).doubleValue(), - ((Number)vals.get(3)).floatValue(), - ((Number)vals.get(4)).floatValue())); - } - } - } - } - usersFile.renameTo(new File(usersFile.getAbsolutePath() + ".old")); - }*/ - - private void convertWarps() - { - final File warpsFolder = new File(ess.getDataFolder(), "warps"); - if (!warpsFolder.exists()) - { - warpsFolder.mkdirs(); - } - final File[] listOfFiles = warpsFolder.listFiles(); - if (listOfFiles.length >= 1) - { - for (int i = 0; i < listOfFiles.length; i++) - { - final String filename = listOfFiles[i].getName(); - if (listOfFiles[i].isFile() && filename.endsWith(".dat")) - { - try - { - final BufferedReader rx = new BufferedReader(new FileReader(listOfFiles[i])); - double x, y, z; - float yaw, pitch; - String worldName; - try - { - if (!rx.ready()) - { - continue; - } - x = Double.parseDouble(rx.readLine().trim()); - if (!rx.ready()) - { - continue; - } - y = Double.parseDouble(rx.readLine().trim()); - if (!rx.ready()) - { - continue; - } - z = Double.parseDouble(rx.readLine().trim()); - if (!rx.ready()) - { - continue; - } - yaw = Float.parseFloat(rx.readLine().trim()); - if (!rx.ready()) - { - continue; - } - pitch = Float.parseFloat(rx.readLine().trim()); - worldName = rx.readLine(); - } - finally - { - rx.close(); - } - World w = null; - for (World world : ess.getServer().getWorlds()) - { - if (world.getEnvironment() != World.Environment.NETHER) - { - w = world; - break; - } - } - if (worldName != null) - { - worldName = worldName.trim(); - World w1 = null; - w1 = getFakeWorld(worldName); - if (w1 != null) - { - w = w1; - } - } - final Location loc = new Location(w, x, y, z, yaw, pitch); - ess.getWarps().setWarp(filename.substring(0, filename.length() - 4), loc); - if (!listOfFiles[i].renameTo(new File(warpsFolder, filename + ".old"))) - { - throw new Exception(_("fileRenameError", filename)); - } - } - catch (Exception ex) - { - LOGGER.log(Level.SEVERE, null, ex); - } - } - } - - } - final File warpFile = new File(ess.getDataFolder(), "warps.txt"); - if (warpFile.exists()) - { - try - { - final BufferedReader rx = new BufferedReader(new FileReader(warpFile)); - try - { - for (String[] parts = new String[0]; rx.ready(); parts = rx.readLine().split(":")) - { - if (parts.length < 6) - { - continue; - } - final String name = parts[0]; - final double x = Double.parseDouble(parts[1].trim()); - final double y = Double.parseDouble(parts[2].trim()); - final double z = Double.parseDouble(parts[3].trim()); - final float yaw = Float.parseFloat(parts[4].trim()); - final float pitch = Float.parseFloat(parts[5].trim()); - if (name.isEmpty()) - { - continue; - } - World w = null; - for (World world : ess.getServer().getWorlds()) - { - if (world.getEnvironment() != World.Environment.NETHER) - { - w = world; - break; - } - } - final Location loc = new Location(w, x, y, z, yaw, pitch); - ess.getWarps().setWarp(name, loc); - if (!warpFile.renameTo(new File(ess.getDataFolder(), "warps.txt.old"))) - { - throw new Exception(_("fileRenameError", "warps.txt")); - } - } - } - finally - { - rx.close(); - } - } - catch (Exception ex) - { - LOGGER.log(Level.SEVERE, null, ex); - } - } - } - - /*private void sanitizeAllUserFilenames() - { - if (doneFile.getBoolean("sanitizeAllUserFilenames", false)) - { - return; - } - final File usersFolder = new File(ess.getDataFolder(), "userdata"); - if (!usersFolder.exists()) - { - return; - } - final File[] listOfFiles = usersFolder.listFiles(); - for (int i = 0; i < listOfFiles.length; i++) - { - final String filename = listOfFiles[i].getName(); - if (!listOfFiles[i].isFile() || !filename.endsWith(".yml")) - { - continue; - } - final String sanitizedFilename = Util.sanitizeFileName(filename.substring(0, filename.length() - 4)) + ".yml"; - if (sanitizedFilename.equals(filename)) - { - continue; - } - final File tmpFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename + ".tmp"); - final File newFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename); - if (!listOfFiles[i].renameTo(tmpFile)) - { - LOGGER.log(Level.WARNING, _("userdataMoveError", filename, sanitizedFilename)); - continue; - } - if (newFile.exists()) - { - LOGGER.log(Level.WARNING, _("duplicatedUserdata", filename, sanitizedFilename)); - continue; - } - if (!tmpFile.renameTo(newFile)) - { - LOGGER.log(Level.WARNING, _("userdataMoveBackError", sanitizedFilename, sanitizedFilename)); - } - } - doneFile.setProperty("sanitizeAllUserFilenames", true); - doneFile.save(); - }*/ - - private World getFakeWorld(final String name) - { - final File bukkitDirectory = ess.getDataFolder().getParentFile().getParentFile(); - final File worldDirectory = new File(bukkitDirectory, name); - if (worldDirectory.exists() && worldDirectory.isDirectory()) - { - return new FakeWorld(worldDirectory.getName(), World.Environment.NORMAL); - } - return null; - } - - public Location getFakeLocation(EssentialsConf config, String path) - { - String worldName = config.getString((path != null ? path + "." : "") + "world"); - if (worldName == null || worldName.isEmpty()) - { - return null; - } - World world = getFakeWorld(worldName); - if (world == null) - { - return null; - } - return new Location(world, - config.getDouble((path != null ? path + "." : "") + "x", 0), - config.getDouble((path != null ? path + "." : "") + "y", 0), - config.getDouble((path != null ? path + "." : "") + "z", 0), - (float)config.getDouble((path != null ? path + "." : "") + "yaw", 0), - (float)config.getDouble((path != null ? path + "." : "") + "pitch", 0)); - } - - private void deleteOldItemsCsv() - { - if (doneFile.getBoolean("deleteOldItemsCsv", false)) - { - return; - } - final File file = new File(ess.getDataFolder(), "items.csv"); - if (file.exists()) - { - try - { - final Set oldconfigs = new HashSet(); - oldconfigs.add(new BigInteger("66ec40b09ac167079f558d1099e39f10", 16)); // sep 1 - oldconfigs.add(new BigInteger("34284de1ead43b0bee2aae85e75c041d", 16)); // crlf - oldconfigs.add(new BigInteger("c33bc9b8ee003861611bbc2f48eb6f4f", 16)); // jul 24 - oldconfigs.add(new BigInteger("6ff17925430735129fc2a02f830c1daa", 16)); // crlf - - MessageDigest digest = ManagedFile.getDigest(); - final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); - final DigestInputStream dis = new DigestInputStream(bis, digest); - final byte[] buffer = new byte[1024]; - try - { - while (dis.read(buffer) != -1) - { - } - } - finally - { - dis.close(); - } - - BigInteger hash = new BigInteger(1, digest.digest()); - if (oldconfigs.contains(hash) && !file.delete()) - { - throw new IOException("Could not delete file " + file.toString()); - } - doneFile.setProperty("deleteOldItemsCsv", true); - doneFile.save(); - } - catch (IOException ex) - { - Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); - } - } - } - - 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 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(); - } - - private void updateJailsToNewJailsConfig() - { - if (doneFile.getBoolean("updateJailsToNewJailsConfig", false)) - { - return; - } - final File configFile = new File(ess.getDataFolder(), "jail.yml"); - if (configFile.exists()) - { - - final EssentialsConf config = new EssentialsConf(configFile); - try - { - config.load(); - if (!config.hasProperty("jails")) - { - final com.earth2me.essentials.settings.Jails jails = new com.earth2me.essentials.settings.Jails(); - List keys = config.getKeys(); - for (String jailName : keys) - { - Location loc = getFakeLocation(config, jailName); - jails.getJails().put(jailName.toLowerCase(Locale.ENGLISH), loc); - } - if (!configFile.renameTo(new File(ess.getDataFolder(), "jail.yml.old"))) - { - throw new Exception(_("fileRenameError", "jail.yml")); - } - PrintWriter writer = new PrintWriter(configFile); - try - { - new YamlStorageWriter(writer).save(jails); - } - finally - { - writer.close(); - } - } - } - catch (Exception ex) - { - Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); - } - } - doneFile.setProperty("updateJailsToNewJailsConfig", true); - doneFile.save(); - } - - public void beforeSettings() - { - if (!ess.getDataFolder().exists()) - { - ess.getDataFolder().mkdirs(); - } - moveWorthValuesToWorthYml(); - moveMotdRulesToFile("motd"); - moveMotdRulesToFile("rules"); - } - - public void afterSettings() - { - //TODO? - //sanitizeAllUserFilenames(); - updateUsersToNewDefaultHome(); - //moveUsersDataToUserdataFolder(); - convertWarps(); - updateUsersPowerToolsFormat(); - updateUsersHomesFormat(); - deleteOldItemsCsv(); - updateSpawnsToNewSpawnsConfig(); - updateJailsToNewJailsConfig(); - } -} diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java deleted file mode 100644 index 12b431bcd..000000000 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.earth2me.essentials; - -import com.earth2me.essentials.commands.IEssentialsCommand; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.bukkit.ChatColor; -import org.bukkit.event.Event.Priority; - -/*@Deprecated -public interface ISettings extends com.earth2me.essentials.api.ISettings -{ - boolean areSignsDisabled(); - - String format(String format, IUser user); - - String getAnnounceNewPlayerFormat(IUser user); - - boolean getAnnounceNewPlayers(); - - String getBackupCommand(); - - long getBackupInterval(); - - String getChatFormat(String group); - - int getChatRadius(); - - double getCommandCost(IEssentialsCommand cmd); - - double getCommandCost(String label); - - String getCurrencySymbol(); - - int getOversizedStackSize(); - - int getDefaultStackSize(); - - double getHealCooldown(); - - Object getKit(String name); - - Map getKits(); - - String getLocale(); - - String getNewbieSpawn(); - - String getNicknamePrefix(); - - ChatColor getOperatorColor() throws Exception; - - boolean getPerWarpPermission(); - - boolean getProtectBoolean(final String configName, boolean def); - - int getProtectCreeperMaxHeight(); - - List getProtectList(final String configName); - - boolean getProtectPreventSpawn(final String creatureName); - - String getProtectString(final String configName); - - boolean getRespawnAtHome(); - - List getMultipleHomes(); - - int getHomeLimit(String set); - - int getHomeLimit(User user); - - boolean getSortListByGroups(); - - int getSpawnMobLimit(); - - int getStartingBalance(); - - double getTeleportCooldown(); - - double getTeleportDelay(); - - boolean hidePermissionlessHelp(); - - boolean isCommandDisabled(final IEssentialsCommand cmd); - - boolean isCommandDisabled(String label); - - boolean isCommandOverridden(String name); - - boolean isCommandRestricted(IEssentialsCommand cmd); - - boolean isCommandRestricted(String label); - - boolean isDebug(); - - boolean isEcoDisabled(); - - boolean isTradeInStacks(int id); - - List itemSpawnBlacklist(); - - boolean permissionBasedItemSpawn(); - - boolean showNonEssCommandsInHelp(); - - boolean spawnIfNoHome(); - - boolean warnOnBuildDisallow(); - - boolean warnOnSmite(); - - double getMaxMoney(); - - boolean isEcoLogEnabled(); - - boolean removeGodOnDisconnect(); - - boolean changeDisplayName(); - - boolean isPlayerCommand(String string); - - boolean useBukkitPermissions(); - - boolean addPrefixSuffix(); - - boolean disablePrefix(); - - boolean disableSuffix(); - - long getAutoAfk(); - - long getAutoAfkKick(); - - boolean getFreezeAfkPlayers(); - - boolean areDeathMessagesEnabled(); - - public void setDebug(boolean debug); - - Set getNoGodWorlds(); - - boolean getUpdateBedAtDaytime(); - - boolean getRepairEnchanted(); - - boolean getIsWorldTeleportPermissions(); - - boolean registerBackInListener(); - - public boolean getDisableItemPickupWhileAfk(); - - public Priority getRespawnPriority(); - - long getTpaAcceptCancellation(); -}*/ diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java deleted file mode 100644 index 872e1a6e2..000000000 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.earth2me.essentials; - -import com.earth2me.essentials.commands.IEssentialsCommand; -import java.net.InetSocketAddress; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.inventory.PlayerInventory; - - -/** - * @deprecated This will be moved to the api package soon - */ -/*@Deprecated -public interface IUser extends Player, com.earth2me.essentials.api.IUser -{ - long getLastTeleportTimestamp(); - - boolean isAuthorized(String node); - - boolean isAuthorized(IEssentialsCommand cmd); - - boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix); - - void setLastTeleportTimestamp(long time); - - Location getLastLocation(); - - Player getBase(); - - double getMoney(); - - void takeMoney(double value); - - void giveMoney(double value); - - String getGroup(); - - void setLastLocation(); - - Location getHome(String name) throws Exception; - - Location getHome(Location loc) throws Exception; - - boolean isHidden(); - - Teleport getTeleport(); - - void setJail(String jail); -}*/ diff --git a/Essentials/src/com/earth2me/essentials/Kits.java b/Essentials/src/com/earth2me/essentials/Kits.java index a1ea2a8e9..612ea5196 100644 --- a/Essentials/src/com/earth2me/essentials/Kits.java +++ b/Essentials/src/com/earth2me/essentials/Kits.java @@ -16,8 +16,6 @@ import org.bukkit.inventory.ItemStack; public class Kits extends AsyncStorageObjectHolder implements IKits { - private static final transient Logger LOGGER = Bukkit.getLogger(); - public Kits(final IEssentials ess) { super(ess, com.earth2me.essentials.settings.Kits.class); diff --git a/Essentials/src/com/earth2me/essentials/ManagedFile.java b/Essentials/src/com/earth2me/essentials/ManagedFile.java deleted file mode 100644 index 0a2443f29..000000000 --- a/Essentials/src/com/earth2me/essentials/ManagedFile.java +++ /dev/null @@ -1,228 +0,0 @@ -package com.earth2me.essentials; - -import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.api.IEssentials; -import java.io.*; -import java.math.BigInteger; -import java.security.DigestInputStream; -import java.security.DigestOutputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.logging.Level; -import org.bukkit.Bukkit; - - -public class ManagedFile -{ - private final static int BUFFERSIZE = 1024 * 8; - private final transient File file; - - public ManagedFile(final String filename, final IEssentials ess) - { - file = new File(ess.getDataFolder(), filename); - - if (file.exists()) - { - try - { - if (checkForVersion(file, ess.getDescription().getVersion()) && !file.delete()) - { - throw new IOException("Could not delete file " + file.toString()); - } - } - catch (IOException ex) - { - Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); - } - } - - if (!file.exists()) - { - try - { - copyResourceAscii("/" + filename, file); - } - catch (IOException ex) - { - Bukkit.getLogger().log(Level.SEVERE, _("itemsCsvNotLoaded"), ex); - } - } - } - - public static void copyResourceAscii(final String resourceName, final File file) throws IOException - { - final InputStreamReader reader = new InputStreamReader(ManagedFile.class.getResourceAsStream(resourceName)); - try - { - final MessageDigest digest = getDigest(); - final DigestOutputStream digestStream = new DigestOutputStream(new FileOutputStream(file), digest); - try - { - final OutputStreamWriter writer = new OutputStreamWriter(digestStream); - try - { - final char[] buffer = new char[BUFFERSIZE]; - do - { - final int length = reader.read(buffer); - if (length >= 0) - { - writer.write(buffer, 0, length); - } - else - { - break; - } - } - while (true); - writer.write("\n"); - writer.flush(); - final BigInteger hashInt = new BigInteger(1, digest.digest()); - digestStream.on(false); - digestStream.write('#'); - digestStream.write(hashInt.toString(16).getBytes()); - } - finally - { - writer.close(); - } - } - finally - { - digestStream.close(); - } - } - finally - { - reader.close(); - } - } - - public static boolean checkForVersion(final File file, final String version) throws IOException - { - if (file.length() < 33) - { - return false; - } - final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); - try - { - final byte[] buffer = new byte[(int)file.length()]; - int position = 0; - do - { - final int length = bis.read(buffer, position, Math.min((int)file.length() - position, BUFFERSIZE)); - if (length < 0) - { - break; - } - position += length; - } - while (position < file.length()); - final ByteArrayInputStream bais = new ByteArrayInputStream(buffer); - if (bais.skip(file.length() - 33) != file.length() - 33) - { - return false; - } - final BufferedReader reader = new BufferedReader(new InputStreamReader(bais)); - try - { - String hash = reader.readLine(); - if (hash != null && hash.matches("#[a-f0-9]{32}")) - { - hash = hash.substring(1); - bais.reset(); - final String versionline = reader.readLine(); - if (versionline != null && versionline.matches("#version: .+")) - { - final String versioncheck = versionline.substring(10); - if (!versioncheck.equalsIgnoreCase(version)) - { - bais.reset(); - final MessageDigest digest = getDigest(); - final DigestInputStream digestStream = new DigestInputStream(bais, digest); - try - { - final byte[] bytes = new byte[(int)file.length() - 33]; - digestStream.read(bytes); - final BigInteger correct = new BigInteger(hash, 16); - final BigInteger test = new BigInteger(1, digest.digest()); - if (correct.equals(test)) - { - return true; - } - else - { - Bukkit.getLogger().warning("File " + file.toString() + " has been modified by user and file version differs, please update the file manually."); - } - } - finally - { - digestStream.close(); - } - } - } - } - } - finally - { - reader.close(); - } - } - finally - { - bis.close(); - } - return false; - } - - public static MessageDigest getDigest() throws IOException - { - try - { - return MessageDigest.getInstance("MD5"); - } - catch (NoSuchAlgorithmException ex) - { - throw new IOException(ex); - } - } - - public List getLines() - { - try - { - final BufferedReader reader = new BufferedReader(new FileReader(file)); - try - { - final List lines = new ArrayList(); - do - { - final String line = reader.readLine(); - if (line == null) - { - break; - } - else - { - lines.add(line); - } - } - while (true); - return lines; - } - finally - { - reader.close(); - } - } - catch (IOException ex) - { - Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); - return Collections.emptyList(); - } - } -} diff --git a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java b/Essentials/src/com/earth2me/essentials/OfflinePlayer.java deleted file mode 100644 index 42c00ac0a..000000000 --- a/Essentials/src/com/earth2me/essentials/OfflinePlayer.java +++ /dev/null @@ -1,833 +0,0 @@ -package com.earth2me.essentials; - -import com.earth2me.essentials.craftbukkit.OfflineBedLocation; -import static com.earth2me.essentials.I18n._; -import java.net.InetSocketAddress; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; -import lombok.Delegate; -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.entity.*; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.map.MapView; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionAttachment; -import org.bukkit.permissions.PermissionAttachmentInfo; -import org.bukkit.plugin.Plugin; -import org.bukkit.util.Vector; - - -/*public class OfflinePlayer implements Player -{ - private final transient IEssentials ess; - private transient Location location = new Location(null, 0, 0, 0, 0, 0); - private transient World world; - private final transient UUID uniqueId = UUID.randomUUID(); - @Delegate(types = org.bukkit.OfflinePlayer.class) - private transient org.bukkit.OfflinePlayer base; - - public OfflinePlayer(final String name, final IEssentials ess) - { - this.ess = ess; - this.world = ess.getServer().getWorlds().get(0); - this.base = ess.getServer().getOfflinePlayer(name); - } - - @Override - public void sendMessage(final String string) - { - } - - @Override - public String getDisplayName() - { - return base.getName(); - } - - @Override - public void setDisplayName(String string) - { - } - - @Override - public void setCompassTarget(Location lctn) - { - } - - @Override - public InetSocketAddress getAddress() - { - return null; - } - - @Override - public void kickPlayer(String string) - { - } - - @Override - public PlayerInventory getInventory() - { - return null; - } - - @Override - public ItemStack getItemInHand() - { - return null; - } - - @Override - public void setItemInHand(ItemStack is) - { - } - - @Override - public int getHealth() - { - return 0; - } - - @Override - public void setHealth(int i) - { - } - - @Override - public Egg throwEgg() - { - return null; - } - - @Override - public Snowball throwSnowball() - { - return null; - } - - @Override - public Arrow shootArrow() - { - return null; - } - - @Override - public boolean isInsideVehicle() - { - return false; - } - - @Override - public boolean leaveVehicle() - { - return false; - } - - @Override - public Vehicle getVehicle() - { - return null; - } - - @Override - public Location getLocation() - { - return location; - } - - @Override - public World getWorld() - { - return world; - } - - public void setLocation(Location loc) - { - location = loc; - world = loc.getWorld(); - } - - public void teleportTo(Location lctn) - { - } - - public void teleportTo(Entity entity) - { - } - - @Override - public int getEntityId() - { - return -1; - } - - @Override - public boolean performCommand(String string) - { - return false; - } - - public boolean isPlayer() - { - return false; - } - - @Override - public int getRemainingAir() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setRemainingAir(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getMaximumAir() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setMaximumAir(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean isSneaking() - { - return false; - } - - @Override - public void setSneaking(boolean bln) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void updateInventory() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void chat(String string) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public double getEyeHeight() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public double getEyeHeight(boolean bln) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public List getLineOfSight(HashSet hs, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Block getTargetBlock(HashSet hs, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public List getLastTwoTargetBlocks(HashSet hs, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getFireTicks() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getMaxFireTicks() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setFireTicks(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void remove() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Server getServer() - { - return ess == null ? null : ess.getServer(); - } - - public Vector getMomentum() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - public void setMomentum(Vector vector) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setVelocity(Vector vector) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Vector getVelocity() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void damage(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void damage(int i, Entity entity) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Location getEyeLocation() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void sendRawMessage(String string) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Location getCompassTarget() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getMaximumNoDamageTicks() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setMaximumNoDamageTicks(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getLastDamage() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setLastDamage(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getNoDamageTicks() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setNoDamageTicks(int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean teleport(Location lctn) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean teleport(Entity entity) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public Entity getPassenger() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean setPassenger(Entity entity) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean isEmpty() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean eject() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void saveData() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void loadData() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean isSleeping() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public int getSleepTicks() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public List getNearbyEntities(double d, double d1, double d2) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean isDead() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public float getFallDistance() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setFallDistance(float f) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setSleepingIgnored(boolean bln) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean isSleepingIgnored() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void awardAchievement(Achievement a) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void incrementStatistic(Statistic ststc) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void incrementStatistic(Statistic ststc, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void incrementStatistic(Statistic ststc, Material mtrl) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void incrementStatistic(Statistic ststc, Material mtrl, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void playNote(Location lctn, byte b, byte b1) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void sendBlockChange(Location lctn, Material mtrl, byte b) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void sendBlockChange(Location lctn, int i, byte b) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void setLastDamageCause(EntityDamageEvent ede) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public EntityDamageEvent getLastDamageCause() - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public void playEffect(Location lctn, Effect effect, int i) - { - throw new UnsupportedOperationException(_("notSupportedYet")); - } - - @Override - public boolean sendChunkChange(Location lctn, int i, int i1, int i2, byte[] bytes) - { - return true; - } - - @Override - public UUID getUniqueId() - { - return uniqueId; - } - - @Override - public void playNote(Location lctn, Instrument i, Note note) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setPlayerTime(long l, boolean bln) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public long getPlayerTime() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public long getPlayerTimeOffset() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean isPlayerTimeRelative() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void resetPlayerTime() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean isPermissionSet(String string) - { - return false; - } - - @Override - public boolean isPermissionSet(Permission prmsn) - { - return false; - } - - @Override - public boolean hasPermission(String string) - { - return false; - } - - @Override - public boolean hasPermission(Permission prmsn) - { - return false; - } - - @Override - public PermissionAttachment addAttachment(Plugin plugin, String string, boolean bln) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public PermissionAttachment addAttachment(Plugin plugin) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public PermissionAttachment addAttachment(Plugin plugin, String string, boolean bln, int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public PermissionAttachment addAttachment(Plugin plugin, int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void removeAttachment(PermissionAttachment pa) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void recalculatePermissions() - { - } - - @Override - public Set getEffectivePermissions() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void sendMap(MapView mv) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public GameMode getGameMode() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setGameMode(GameMode gm) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getExperience() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setExperience(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getLevel() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setLevel(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getTotalExperience() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setTotalExperience(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public float getExhaustion() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setExhaustion(float f) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public float getSaturation() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setSaturation(float f) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getFoodLevel() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setFoodLevel(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Location getBedSpawnLocation() - { - return OfflineBedLocation.getBedLocation(base.getName(), ess); - } - - @Override - public boolean isSprinting() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setSprinting(boolean bln) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setPlayerListName(String name) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public String getPlayerListName() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getTicksLived() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setTicksLived(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public int getMaxHealth() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void giveExp(int i) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public float getExp() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setExp(float f) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean teleport(Location lctn, TeleportCause tc) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean teleport(Entity entity, TeleportCause tc) - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Player getKiller() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - void setName(final String name) - { - if (!this.base.getName().equalsIgnoreCase(name)) { - this.base = ess.getServer().getOfflinePlayer(name); - } - } -} -*/ \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/PlayerExtension.java b/Essentials/src/com/earth2me/essentials/PlayerExtension.java deleted file mode 100644 index a6f7a08c4..000000000 --- a/Essentials/src/com/earth2me/essentials/PlayerExtension.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.earth2me.essentials; - -import lombok.Delegate; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.entity.Entity; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permissible; -import org.bukkit.permissions.ServerOperator; - - -/*public class PlayerExtension implements Player -{ - @Delegate(types = - { - Player.class, Entity.class, CommandSender.class, ServerOperator.class, - HumanEntity.class, ConfigurationSerializable.class, LivingEntity.class, - Permissible.class - }) - protected Player base; - - public PlayerExtension(final Player base) - { - this.base = base; - } - - public final Player getBase() - { - return base; - } - - public final Player setBase(final Player base) - { - return this.base = base; - } -}*/ diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java deleted file mode 100644 index da3a718b6..000000000 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ /dev/null @@ -1,646 +0,0 @@ -package com.earth2me.essentials; - -import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.commands.IEssentialsCommand; -import java.io.File; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bukkit.ChatColor; -import org.bukkit.event.Event.Priority; -import org.bukkit.inventory.ItemStack; - - -/*public class Settings implements ISettings -{ - private final transient EssentialsConf config; - private final static Logger logger = Logger.getLogger("Minecraft"); - private final transient IEssentials ess; - - public Settings(IEssentials ess) - { - this.ess = ess; - config = new EssentialsConf(new File(ess.getDataFolder(), "config.yml")); - config.setTemplateName("/config.yml"); - reloadConfig(); - } - - @Override - public boolean getRespawnAtHome() - { - return config.getBoolean("respawn-at-home", false); - } - - @Override - public boolean getUpdateBedAtDaytime() - { - return config.getBoolean("update-bed-at-daytime", true); - } - - @Override - public List getMultipleHomes() - { - return config.getKeys("sethome-multiple"); - } - - @Override - public int getHomeLimit(final User user) - { - final List homeList = getMultipleHomes(); - if (homeList == null) - { - //TODO: Replace this code to remove backwards compat, after settings are automatically updated - // return getHomeLimit("default"); - return config.getInt("multiple-homes", 5); - } - int limit = getHomeLimit("default"); - for (String set : homeList) - { - if (user.isAuthorized("essentials.sethome.multiple." + set) && (limit < getHomeLimit(set))) - { - limit = getHomeLimit(set); - } - } - return limit; - } - - @Override - public int getHomeLimit(final String set) - { - return config.getInt("sethome-multiple." + set, config.getInt("sethome-multiple.default", 3)); - } - - @Override - public int getChatRadius() - { - return config.getInt("chat.radius", config.getInt("chat-radius", 0)); - } - - @Override - public double getTeleportDelay() - { - return config.getDouble("teleport-delay", 0); - } - - @Override - public int getOversizedStackSize() - { - return config.getInt("oversized-stacksize", 64); - } - - @Override - public int getDefaultStackSize() - { - return config.getInt("default-stack-size", -1); - } - - @Override - public int getStartingBalance() - { - return config.getInt("starting-balance", 0); - } - - @Override - public boolean isCommandDisabled(final IEssentialsCommand cmd) - { - return isCommandDisabled(cmd.getName()); - } - - @Override - public boolean isCommandDisabled(String label) - { - for (String c : config.getStringList("disabled-commands", new ArrayList(0))) - { - if (!c.equalsIgnoreCase(label)) - { - continue; - } - return true; - } - return config.getBoolean("disable-" + label.toLowerCase(Locale.ENGLISH), false); - } - - @Override - public boolean isCommandRestricted(IEssentialsCommand cmd) - { - return isCommandRestricted(cmd.getName()); - } - - @Override - public boolean isCommandRestricted(String label) - { - for (String c : config.getStringList("restricted-commands", new ArrayList(0))) - { - if (!c.equalsIgnoreCase(label)) - { - continue; - } - return true; - } - return config.getBoolean("restrict-" + label.toLowerCase(Locale.ENGLISH), false); - } - - @Override - public boolean isPlayerCommand(String label) - { - for (String c : config.getStringList("player-commands", new ArrayList(0))) - { - if (!c.equalsIgnoreCase(label)) - { - continue; - } - return true; - } - return false; - } - - @Override - public boolean isCommandOverridden(String name) - { - List defaultList = new ArrayList(1); - defaultList.add("god"); - for (String c : config.getStringList("overridden-commands", defaultList)) - { - if (!c.equalsIgnoreCase(name)) - { - continue; - } - return true; - } - return config.getBoolean("override-" + name.toLowerCase(Locale.ENGLISH), false); - } - - @Override - public double getCommandCost(IEssentialsCommand cmd) - { - return getCommandCost(cmd.getName()); - } - - @Override - public double getCommandCost(String label) - { - double cost = config.getDouble("command-costs." + label, 0.0); - if (cost == 0.0) - { - cost = config.getDouble("cost-" + label, 0.0); - } - return cost; - } - - @Override - public String getNicknamePrefix() - { - return config.getString("nickname-prefix", "~"); - } - - @Override - public double getTeleportCooldown() - { - return config.getDouble("teleport-cooldown", 0); - } - - @Override - public double getHealCooldown() - { - return config.getDouble("heal-cooldown", 0); - } - - @Override - public Object getKit(String name) - { - Map kits = (Map)config.getProperty("kits"); - for (Map.Entry entry : kits.entrySet()) - { - if (entry.getKey().equalsIgnoreCase(name.replace('.', '_').replace('/', '_'))) - { - return entry.getValue(); - } - } - return null; - } - - @Override - public Map getKits() - { - return (Map)config.getProperty("kits"); - } - - @Override - public ChatColor getOperatorColor() throws Exception - { - String colorName = config.getString("ops-name-color", null); - - if (colorName == null) - { - return ChatColor.RED; - } - if ("none".equalsIgnoreCase(colorName) || colorName.isEmpty()) - { - throw new Exception(); - } - - try - { - return ChatColor.valueOf(colorName.toUpperCase(Locale.ENGLISH)); - } - catch (IllegalArgumentException ex) - { - } - - return ChatColor.getByCode(Integer.parseInt(colorName, 16)); - } - - @Override - public int getSpawnMobLimit() - { - return config.getInt("spawnmob-limit", 10); - } - - @Override - public boolean showNonEssCommandsInHelp() - { - return config.getBoolean("non-ess-in-help", true); - } - - @Override - public boolean hidePermissionlessHelp() - { - return config.getBoolean("hide-permissionless-help", true); - } - - @Override - public int getProtectCreeperMaxHeight() - { - return config.getInt("protect.creeper.max-height", -1); - } - - @Override - public boolean areSignsDisabled() - { - return config.getBoolean("signs-disabled", false); - } - - @Override - public long getBackupInterval() - { - return config.getInt("backup.interval", 1440); // 1440 = 24 * 60 - } - - @Override - public String getBackupCommand() - { - return config.getString("backup.command", null); - } - - @Override - public String getChatFormat(String group) - { - return config.getString("chat.group-formats." + (group == null ? "Default" : group), - config.getString("chat.format", "&7[{GROUP}]&f {DISPLAYNAME}&7:&f {MESSAGE}")); - } - - @Override - public boolean getAnnounceNewPlayers() - { - return !config.getString("newbies.announce-format", "-").isEmpty(); - } - - @Override - public String getAnnounceNewPlayerFormat(IUser user) - { - return format(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!"), user); - } - - @Override - public String format(String format, IUser user) - { - return format.replace('&', '§').replace("§§", "&").replace("{PLAYER}", user.getDisplayName()).replace("{DISPLAYNAME}", user.getDisplayName()).replace("{GROUP}", user.getGroup()).replace("{USERNAME}", user.getName()).replace("{ADDRESS}", user.getAddress().toString()); - } - - @Override - public String getNewbieSpawn() - { - return config.getString("newbies.spawnpoint", "default"); - } - - @Override - public boolean getPerWarpPermission() - { - return config.getBoolean("per-warp-permission", false); - } - - @Override - public boolean getSortListByGroups() - { - return config.getBoolean("sort-list-by-groups", true); - } - - @Override - public void reloadConfig() - { - config.load(); - noGodWorlds = new HashSet(config.getStringList("no-god-in-worlds", Collections.emptyList())); - } - - @Override - public List itemSpawnBlacklist() - { - final List epItemSpwn = new ArrayList(); - for (String itemName : config.getString("item-spawn-blacklist", "").split(",")) - { - itemName = itemName.trim(); - if (itemName.isEmpty()) - { - continue; - } - ItemStack is; - try - { - is = ess.getItemDb().get(itemName); - epItemSpwn.add(is.getTypeId()); - } - catch (Exception ex) - { - logger.log(Level.SEVERE, _("unknownItemInList", itemName, "item-spawn-blacklist")); - } - } - return epItemSpwn; - } - - @Override - public boolean spawnIfNoHome() - { - return config.getBoolean("spawn-if-no-home", false); - } - - @Override - public boolean warnOnBuildDisallow() - { - return config.getBoolean("protect.disable.warn-on-build-disallow", false); - } - private boolean debug = false; - - @Override - public boolean isDebug() - { - return debug || config.getBoolean("debug", false); - } - - @Override - public boolean warnOnSmite() - { - return config.getBoolean("warn-on-smite", true); - } - - @Override - public boolean permissionBasedItemSpawn() - { - return config.getBoolean("permission-based-item-spawn", false); - } - - @Override - public String getLocale() - { - return config.getString("locale", ""); - } - - @Override - public String getCurrencySymbol() - { - return config.getString("currency-symbol", "$").substring(0, 1).replaceAll("[0-9]", "$"); - } - - @Override - public boolean isTradeInStacks(int id) - { - return config.getBoolean("trade-in-stacks-" + id, false); - } - - @Override - public boolean isEcoDisabled() - { - return config.getBoolean("disable-eco", false); - } - - @Override - public boolean getProtectPreventSpawn(final String creatureName) - { - return config.getBoolean("protect.prevent.spawn." + creatureName, false); - } - - @Override - public List getProtectList(final String configName) - { - final List list = new ArrayList(); - for (String itemName : config.getString(configName, "").split(",")) - { - itemName = itemName.trim(); - if (itemName.isEmpty()) - { - continue; - } - ItemStack itemStack; - try - { - itemStack = ess.getItemDb().get(itemName); - list.add(itemStack.getTypeId()); - } - catch (Exception ex) - { - logger.log(Level.SEVERE, _("unknownItemInList", itemName, configName)); - } - } - return list; - } - - @Override - public String getProtectString(final String configName) - { - return config.getString(configName, null); - } - - @Override - public boolean getProtectBoolean(final String configName, boolean def) - { - return config.getBoolean(configName, def); - } - private final static double MAXMONEY = 10000000000000.0; - - @Override - public double getMaxMoney() - { - double max = config.getDouble("max-money", MAXMONEY); - if (Math.abs(max) > MAXMONEY) - { - max = max < 0 ? -MAXMONEY : MAXMONEY; - } - return max; - } - - @Override - public boolean isEcoLogEnabled() - { - return config.getBoolean("economy-log-enabled", false); - } - - @Override - public boolean removeGodOnDisconnect() - { - return config.getBoolean("remove-god-on-disconnect", false); - } - - @Override - public boolean changeDisplayName() - { - return config.getBoolean("change-displayname", true); - } - - @Override - public boolean useBukkitPermissions() - { - return config.getBoolean("use-bukkit-permissions", false); - } - - @Override - public boolean addPrefixSuffix() - { - return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat")); - } - - @Override - public boolean disablePrefix() - { - return config.getBoolean("disablePrefix", false); - } - - @Override - public boolean disableSuffix() - { - return config.getBoolean("disableSuffix", false); - } - - @Override - public long getAutoAfk() - { - return config.getLong("auto-afk", 300); - } - - @Override - public long getAutoAfkKick() - { - return config.getLong("auto-afk-kick", -1); - } - - @Override - public boolean getFreezeAfkPlayers() - { - return config.getBoolean("freeze-afk-players", false); - } - - @Override - public boolean areDeathMessagesEnabled() - { - return config.getBoolean("death-messages", true); - } - Set noGodWorlds = new HashSet(); - - @Override - public Set getNoGodWorlds() - { - return noGodWorlds; - } - - @Override - public void setDebug(final boolean debug) - { - this.debug = debug; - } - - @Override - public boolean getRepairEnchanted() - { - return config.getBoolean("repair-enchanted", true); - } - - @Override - public boolean getIsWorldTeleportPermissions() - { - return config.getBoolean("world-teleport-permissions", false); - } - - @Override - public boolean registerBackInListener() - { - return config.getBoolean("register-back-in-listener", false); - } - - @Override - public boolean getDisableItemPickupWhileAfk() - { - return config.getBoolean("disable-item-pickup-while-afk", true); - } - - @Override - public Priority getRespawnPriority() - { - String priority = config.getString("respawn-listener-priority", "normal").toLowerCase(Locale.ENGLISH); - if ("lowest".equals(priority)) - { - return Priority.Lowest; - } - if ("low".equals(priority)) - { - return Priority.Low; - } - if ("normal".equals(priority)) - { - return Priority.Normal; - } - if ("high".equals(priority)) - { - return Priority.High; - } - if ("highest".equals(priority)) - { - return Priority.Highest; - } - return Priority.Normal; - } - - @Override - public long getTpaAcceptCancellation() - { - return config.getLong("tpa-accept-cancellation", 0); - } - - @Override - public com.earth2me.essentials.settings.Settings getData() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void acquireReadLock() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void acquireWriteLock() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void close() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void unlock() - { - throw new UnsupportedOperationException("Not supported yet."); - } -} -*/ \ No newline at end of file diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java deleted file mode 100644 index cc60ec009..000000000 --- a/Essentials/src/com/earth2me/essentials/User.java +++ /dev/null @@ -1,597 +0,0 @@ -package com.earth2me.essentials; - -import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.commands.IEssentialsCommand; -import com.earth2me.essentials.register.payment.Method; -import com.earth2me.essentials.user.CooldownException; -import com.earth2me.essentials.user.UserData.TimestampType; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -/*@Deprecated -public class User extends UserData implements Comparable, IReplyTo, IUser -{ - private CommandSender replyTo = null; - private transient User teleportRequester; - private transient boolean teleportRequestHere; - private transient final Teleport teleport; - private transient long teleportRequestTime; - private transient long lastOnlineActivity; - private transient long lastActivity = System.currentTimeMillis(); - private boolean hidden = false; - private transient Location afkPosition; - private static final Logger logger = Logger.getLogger("Minecraft"); - - User(final Player base, final IEssentials ess) - { - super(base, ess); - teleport = new Teleport(this, ess); - afkPosition = getLocation(); - } - - User update(final Player base) - { - setBase(base); - return this; - } - - @Override - public boolean isAuthorized(final IEssentialsCommand cmd) - { - return isAuthorized(cmd, "essentials."); - } - - @Override - public boolean isAuthorized(final IEssentialsCommand cmd, final String permissionPrefix) - { - return isAuthorized(permissionPrefix + (cmd.getName().equals("r") ? "msg" : cmd.getName())); - } - - @Override - public boolean isAuthorized(final String node) - { - if (base instanceof OfflinePlayer) - { - return false; - } - - if (isOp()) - { - return true; - } - - if (isJailed()) - { - return false; - } - - return ess.getPermissionsHandler().hasPermission(base, node); - } - - public void healCooldown() throws Exception - { - final Calendar now = new GregorianCalendar(); - if (getLastHealTimestamp() > 0) - { - final double cooldown = ess.getSettings().getHealCooldown(); - final Calendar cooldownTime = new GregorianCalendar(); - cooldownTime.setTimeInMillis(getLastHealTimestamp()); - cooldownTime.add(Calendar.SECOND, (int)cooldown); - cooldownTime.add(Calendar.MILLISECOND, (int)((cooldown * 1000.0) % 1000.0)); - if (cooldownTime.after(now) && !isAuthorized("essentials.heal.cooldown.bypass")) - { - throw new Exception(_("timeBeforeHeal", Util.formatDateDiff(cooldownTime.getTimeInMillis()))); - } - } - setLastHealTimestamp(now.getTimeInMillis()); - } - - @Override - public void giveMoney(final double value) - { - giveMoney(value, null); - } - - public void giveMoney(final double value, final CommandSender initiator) - { - if (value == 0) - { - return; - } - setMoney(getMoney() + value); - sendMessage(_("addedToAccount", Util.formatCurrency(value, ess))); - if (initiator != null) - { - initiator.sendMessage(_("addedToOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName())); - } - } - - public void payUser(final User reciever, final double value) throws Exception - { - if (value == 0) - { - return; - } - if (canAfford(value)) - { - setMoney(getMoney() - value); - reciever.setMoney(reciever.getMoney() + value); - sendMessage(_("moneySentTo", Util.formatCurrency(value, ess), reciever.getDisplayName())); - reciever.sendMessage(_("moneyRecievedFrom", Util.formatCurrency(value, ess), getDisplayName())); - } - else - { - throw new Exception(_("notEnoughMoney")); - } - } - - @Override - public void takeMoney(final double value) - { - takeMoney(value, null); - } - - public void takeMoney(final double value, final CommandSender initiator) - { - if (value == 0) - { - return; - } - setMoney(getMoney() - value); - sendMessage(_("takenFromAccount", Util.formatCurrency(value, ess))); - if (initiator != null) - { - initiator.sendMessage(_("takenFromOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName())); - } - } - - public boolean canAfford(final double cost) - { - final double mon = getMoney(); - return mon >= cost || isAuthorized("essentials.eco.loan"); - } - - public void dispose() - { - this.base = new OfflinePlayer(getName(), ess); - } - - @Override - public void setReplyTo(final CommandSender user) - { - replyTo = user; - } - - @Override - public CommandSender getReplyTo() - { - return replyTo; - } - - @Override - public int compareTo(final User other) - { - return Util.stripColor(this.getDisplayName()).compareToIgnoreCase(Util.stripColor(other.getDisplayName())); - } - - @Override - public boolean equals(final Object object) - { - if (!(object instanceof User)) - { - return false; - } - return this.getName().equalsIgnoreCase(((User)object).getName()); - - } - - @Override - public int hashCode() - { - return this.getName().hashCode(); - } - - public Boolean canSpawnItem(final int itemId) - { - return !ess.getSettings().itemSpawnBlacklist().contains(itemId); - } - - public Location getHome() throws Exception - { - return getHome(getHomes().get(0)); - } - - public void setHome() - { - setHome("home", getLocation()); - } - - public void setHome(final String name) - { - setHome(name, getLocation()); - } - - @Override - public void setLastLocation() - { - setLastLocation(getLocation()); - } - - public void requestTeleport(final User player, final boolean here) - { - teleportRequestTime = System.currentTimeMillis(); - teleportRequester = player; - teleportRequestHere = here; - } - - public User getTeleportRequest() - { - return teleportRequester; - } - - public boolean isTeleportRequestHere() - { - return teleportRequestHere; - } - - public String getNick(boolean addprefixsuffix) - { - final StringBuilder nickname = new StringBuilder(); - final String nick = getNickname(); - if (ess.getSettings().isCommandDisabled("nick") || nick == null || nick.isEmpty() || nick.equals(getName())) - { - nickname.append(getName()); - } - else - { - nickname.append(ess.getSettings().getNicknamePrefix()).append(nick); - } - if (isOp()) - { - try - { - nickname.insert(0, ess.getSettings().getOperatorColor().toString()); - nickname.append("§f"); - } - catch (Exception e) - { - } - } - - if (addprefixsuffix && ess.getSettings().addPrefixSuffix()) - { - if (!ess.getSettings().disablePrefix()) - { - final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); - nickname.insert(0, prefix); - } - if (!ess.getSettings().disableSuffix()) - { - final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); - nickname.append(suffix); - if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§")) - { - nickname.append("§f"); - } - } - else - { - nickname.append("§f"); - } - } - - return nickname.toString(); - } - - public void setDisplayNick() - { - String name = getNick(true); - setDisplayName(name); - if (name.length() > 16) - { - name = getNick(false); - } - if (name.length() > 16) - { - name = name.substring(0, name.charAt(15) == '§' ? 15 : 16); - } - try - { - setPlayerListName(name); - } - catch (IllegalArgumentException e) - { - logger.log(Level.INFO, "Playerlist for " + name + " was not updated. Use a shorter displayname prefix."); - } - } - - @Override - public String getDisplayName() - { - if (!(base instanceof OfflinePlayer) && ess.getSettings().changeDisplayName()) - { - setDisplayNick(); - } - return super.getDisplayName() == null ? super.getName() : super.getDisplayName(); - } - - public Teleport getTeleport() - { - return teleport; - } - - public long getLastOnlineActivity() - { - return lastOnlineActivity; - } - - public void setLastOnlineActivity(final long timestamp) - { - lastOnlineActivity = timestamp; - } - - @Override - public double getMoney() - { - if (ess.getPaymentMethod().hasMethod()) - { - try - { - final Method method = ess.getPaymentMethod().getMethod(); - if (!method.hasAccount(this.getName())) - { - throw new Exception(); - } - final Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); - return account.balance(); - } - catch (Throwable ex) - { - } - } - return super.getMoney(); - } - - @Override - public void setMoney(final double value) - { - if (ess.getPaymentMethod().hasMethod()) - { - try - { - final Method method = ess.getPaymentMethod().getMethod(); - if (!method.hasAccount(this.getName())) - { - throw new Exception(); - } - final Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); - account.set(value); - } - catch (Throwable ex) - { - } - } - super.setMoney(value); - } - - @Override - public void setAfk(final boolean set) - { - this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set); - if (set && !isAfk()) - { - afkPosition = getLocation(); - } - super.setAfk(set); - } - - @Override - public boolean toggleAfk() - { - final boolean now = super.toggleAfk(); - this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now); - return now; - } - - @Override - public boolean isHidden() - { - return hidden; - } - - public void setHidden(final boolean hidden) - { - this.hidden = hidden; - } - - //Returns true if status expired during this check - public boolean checkJailTimeout(final long currentTime) - { - if (getJailTimeout() > 0 && getJailTimeout() < currentTime && isJailed()) - { - setJailTimeout(0); - setJailed(false); - sendMessage(_("haveBeenReleased")); - setJail(null); - try - { - getTeleport().back(); - } - catch (Exception ex) - { - } - return true; - } - return false; - } - - //Returns true if status expired during this check - public boolean checkMuteTimeout(final long currentTime) - { - if (getMuteTimeout() > 0 && getMuteTimeout() < currentTime && isMuted()) - { - setMuteTimeout(0); - sendMessage(_("canTalkAgain")); - setMuted(false); - return true; - } - return false; - } - - //Returns true if status expired during this check - public boolean checkBanTimeout(final long currentTime) - { - if (getBanTimeout() > 0 && getBanTimeout() < currentTime && isBanned()) - { - setBanTimeout(0); - setBanned(false); - return true; - } - return false; - } - - public void updateActivity(final boolean broadcast) - { - if (isAfk()) - { - setAfk(false); - if (broadcast && !isHidden()) - { - ess.broadcastMessage(this, _("userIsNotAway", getDisplayName())); - } - } - lastActivity = System.currentTimeMillis(); - } - - public void checkActivity() - { - final long autoafkkick = ess.getSettings().getAutoAfkKick(); - if (autoafkkick > 0 && lastActivity > 0 && (lastActivity + (autoafkkick * 1000)) < System.currentTimeMillis() - && !isHidden() && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) - { - final String kickReason = _("autoAfkKickReason", autoafkkick / 60.0); - lastActivity = 0; - kickPlayer(kickReason); - - - for (Player player : ess.getServer().getOnlinePlayers()) - { - final User user = ess.getUser(player); - if (user.isAuthorized("essentials.kick.notify")) - { - player.sendMessage(_("playerKicked", Console.NAME, getName(), kickReason)); - } - } - } - final long autoafk = ess.getSettings().getAutoAfk(); - if (!isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis() && isAuthorized("essentials.afk")) - { - setAfk(true); - if (!isHidden()) - { - ess.broadcastMessage(this, _("userIsAway", getDisplayName())); - } - } - } - - public Location getAfkPosition() - { - return afkPosition; - } - - @Override - public boolean toggleGodModeEnabled() - { - if (!isGodModeEnabled()) - { - setFoodLevel(20); - } - return super.toggleGodModeEnabled(); - } - - @Override - public boolean isGodModeEnabled() - { - return (super.isGodModeEnabled() && !ess.getSettings().getNoGodWorlds().contains(getLocation().getWorld().getName())) - || (isAfk() && ess.getSettings().getFreezeAfkPlayers()); - } - - public boolean isGodModeEnabledRaw() - { - return super.isGodModeEnabled(); - } - - public String getGroup() - { - return ess.getPermissionsHandler().getGroup(base); - } - - public boolean inGroup(final String group) - { - return ess.getPermissionsHandler().inGroup(base, group); - } - - public boolean canBuild() - { - return ess.getPermissionsHandler().canBuild(base, getGroup()); - } - - public long getTeleportRequestTime() - { - return teleportRequestTime; - } - - @Override - public void onReload() - { - reloadConfig(); - } - - @Override - public void checkCooldown(TimestampType cooldownType, double cooldown, boolean set, String bypassPermission) throws CooldownException - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public com.earth2me.essentials.user.UserData getData() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void acquireReadLock() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void acquireWriteLock() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void close() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void unlock() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void updateDisplayName() - { - throw new UnsupportedOperationException("Not supported yet."); - } -}*/ diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java deleted file mode 100644 index 85e7cd04e..000000000 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ /dev/null @@ -1,863 +0,0 @@ -package com.earth2me.essentials; - -import java.io.File; -import java.util.*; -import java.util.logging.Logger; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -/*@Deprecated -public abstract class UserData extends PlayerExtension implements IConf -{ - protected final transient IEssentials ess; - private final EssentialsConf config; - private static final Logger logger = Logger.getLogger("Minecraft"); - - protected UserData(Player base, IEssentials ess) - { - super(base); - this.ess = ess; - File folder = new File(ess.getDataFolder(), "userdata"); - if (!folder.exists()) - { - folder.mkdirs(); - } - config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml")); - reloadConfig(); - } - - @Override - public final void reloadConfig() - { - config.load(); - money = _getMoney(); - unlimited = _getUnlimited(); - powertools = _getPowertools(); - homes = _getHomes(); - lastLocation = _getLastLocation(); - lastTeleportTimestamp = _getLastTeleportTimestamp(); - lastHealTimestamp = _getLastHealTimestamp(); - jail = _getJail(); - mails = _getMails(); - savedInventory = _getSavedInventory(); - teleportEnabled = getTeleportEnabled(); - ignoredPlayers = getIgnoredPlayers(); - godmode = getGodModeEnabled(); - muted = getMuted(); - muteTimeout = _getMuteTimeout(); - jailed = getJailed(); - jailTimeout = _getJailTimeout(); - lastLogin = _getLastLogin(); - lastLogout = _getLastLogout(); - lastLoginAddress = _getLastLoginAddress(); - afk = getAfk(); - geolocation = _getGeoLocation(); - isSocialSpyEnabled = _isSocialSpyEnabled(); - isNPC = _isNPC(); - arePowerToolsEnabled = _arePowerToolsEnabled(); - kitTimestamps = _getKitTimestamps(); - } - private double money; - - private double _getMoney() - { - double money = ess.getSettings().getStartingBalance(); - if (config.hasProperty("money")) - { - money = config.getDouble("money", money); - } - if (Math.abs(money) > ess.getSettings().getMaxMoney()) - { - money = money < 0 ? -ess.getSettings().getMaxMoney() : ess.getSettings().getMaxMoney(); - } - return money; - } - - public double getMoney() - { - return money; - } - - public void setMoney(double value) - { - money = value; - if (Math.abs(money) > ess.getSettings().getMaxMoney()) - { - money = money < 0 ? -ess.getSettings().getMaxMoney() : ess.getSettings().getMaxMoney(); - } - config.setProperty("money", value); - config.save(); - } - private Map homes; - - private Map _getHomes() - { - Object o = config.getProperty("homes"); - - if (o instanceof Map) - { - return (Map)o; - } - else - { - return new HashMap(); - } - - } - - public Location getHome(String name) throws Exception - { - Location loc = config.getLocation("homes." + name, getServer()); - if (loc == null) - { - try - { - loc = config.getLocation("homes." + getHomes().get(Integer.parseInt(name) - 1), getServer()); - } - catch (IndexOutOfBoundsException e) - { - return null; - } - catch (NumberFormatException e) - { - return null; - } - } - - return loc; - } - - public Location getHome(final Location world) - { - try - { - Location loc; - for (String home : getHomes()) - { - loc = config.getLocation("homes." + home, getServer()); - if (world.getWorld() == loc.getWorld()) - { - return loc; - } - - } - loc = config.getLocation("homes." + getHomes().get(0), getServer()); - return loc; - } - catch (Exception ex) - { - return null; - } - } - - public List getHomes() - { - return new ArrayList(homes.keySet()); - } - - public void setHome(String name, Location loc) - { - //Invalid names will corrupt the yaml - name = Util.sanitizeFileName(name); - homes.put(name, loc); - config.setProperty("homes." + name, loc); - config.save(); - } - - public void delHome(String name) throws Exception - { - String search = name; - if (!homes.containsKey(search)) - { - search = Util.sanitizeFileName(name); - } - if (homes.containsKey(search)) - { - homes.remove(name); - config.removeProperty("homes." + name); - config.save(); - } - else - { - //TODO: move this message to messages file - throw new Exception("Home " + name + " doesn't exist"); - } - } - - public boolean hasHome() - { - if (config.hasProperty("home")) - { - return true; - } - return false; - } - - public String getNickname() - { - return config.getString("nickname"); - } - - public void setNickname(String nick) - { - config.setProperty("nickname", nick); - config.save(); - } - private List unlimited; - - private List _getUnlimited() - { - return config.getIntList("unlimited", new ArrayList()); - } - - public List getUnlimited() - { - return unlimited; - } - - public boolean hasUnlimited(ItemStack stack) - { - return unlimited.contains(stack.getTypeId()); - } - - public void setUnlimited(ItemStack stack, boolean state) - { - if (unlimited.contains(stack.getTypeId())) - { - unlimited.remove(Integer.valueOf(stack.getTypeId())); - } - if (state) - { - unlimited.add(stack.getTypeId()); - } - config.setProperty("unlimited", unlimited); - config.save(); - } - private Map powertools; - - @SuppressWarnings("unchecked") - private Map _getPowertools() - { - Object o = config.getProperty("powertools"); - - if (o instanceof Map) - { - return (Map)o; - } - else - { - return new HashMap(); - } - - } - - public void clearAllPowertools() - { - powertools.clear(); - config.setProperty("powertools", powertools); - config.save(); - } - - public List getPowertool(ItemStack stack) - { - return (List)powertools.get(stack.getTypeId()); - } - - public List getPowertool(int id) - { - return (List)powertools.get(id); - } - - public void setPowertool(ItemStack stack, List commandList) - { - if (commandList == null || commandList.isEmpty()) - { - powertools.remove(stack.getTypeId()); - } - else - { - powertools.put(stack.getTypeId(), commandList); - } - config.setProperty("powertools", powertools); - config.save(); - } - - public boolean hasPowerTools() - { - return !powertools.isEmpty(); - } - private Location lastLocation; - - private Location _getLastLocation() - { - try - { - return config.getLocation("lastlocation", getServer()); - } - catch (Exception e) - { - return null; - } - } - - public Location getLastLocation() - { - return lastLocation; - } - - public void setLastLocation(Location loc) - { - if (loc == null || loc.getWorld() == null) - { - return; - } - lastLocation = loc; - config.setProperty("lastlocation", loc); - config.save(); - } - private long lastTeleportTimestamp; - - private long _getLastTeleportTimestamp() - { - return config.getLong("timestamps.lastteleport", 0); - } - - public long getLastTeleportTimestamp() - { - return lastTeleportTimestamp; - } - - public void setLastTeleportTimestamp(long time) - { - lastTeleportTimestamp = time; - config.setProperty("timestamps.lastteleport", time); - config.save(); - } - private long lastHealTimestamp; - - private long _getLastHealTimestamp() - { - return config.getLong("timestamps.lastheal", 0); - } - - public long getLastHealTimestamp() - { - return lastHealTimestamp; - } - - public void setLastHealTimestamp(long time) - { - lastHealTimestamp = time; - config.setProperty("timestamps.lastheal", time); - config.save(); - } - private String jail; - - private String _getJail() - { - return config.getString("jail"); - } - - public String getJail() - { - return jail; - } - - public void setJail(String jail) - { - if (jail == null || jail.isEmpty()) - { - this.jail = null; - config.removeProperty("jail"); - } - else - { - this.jail = jail; - config.setProperty("jail", jail); - } - config.save(); - } - private List mails; - - private List _getMails() - { - return config.getStringList("mail", new ArrayList()); - } - - public List getMails() - { - return mails; - } - - public void setMails(List mails) - { - if (mails == null) - { - config.removeProperty("mail"); - mails = _getMails(); - } - else - { - config.setProperty("mail", mails); - } - this.mails = mails; - config.save(); - } - - public void addMail(String mail) - { - mails.add(mail); - setMails(mails); - } - private ItemStack[] savedInventory; - - public ItemStack[] getSavedInventory() - { - return savedInventory; - } - - private ItemStack[] _getSavedInventory() - { - int size = config.getInt("inventory.size", 0); - if (size < 1 || (getInventory() != null && size > getInventory().getSize())) - { - return null; - } - ItemStack[] is = new ItemStack[size]; - for (int i = 0; i < size; i++) - { - is[i] = config.getItemStack("inventory." + i); - } - return is; - } - - public void setSavedInventory(ItemStack[] is) - { - if (is == null || is.length == 0) - { - savedInventory = null; - config.removeProperty("inventory"); - } - else - { - savedInventory = is; - config.setProperty("inventory.size", is.length); - for (int i = 0; i < is.length; i++) - { - if (is[i] == null || is[i].getType() == Material.AIR) - { - continue; - } - config.setProperty("inventory." + i, is[i]); - } - } - config.save(); - } - private boolean teleportEnabled; - - private boolean getTeleportEnabled() - { - return config.getBoolean("teleportenabled", true); - } - - public boolean isTeleportEnabled() - { - return teleportEnabled; - } - - public void setTeleportEnabled(boolean set) - { - teleportEnabled = set; - config.setProperty("teleportenabled", set); - config.save(); - } - - public boolean toggleTeleportEnabled() - { - boolean ret = !isTeleportEnabled(); - setTeleportEnabled(ret); - return ret; - } - - public boolean toggleSocialSpy() - { - boolean ret = !isSocialSpyEnabled(); - setSocialSpyEnabled(ret); - return ret; - } - private List ignoredPlayers; - - public List getIgnoredPlayers() - { - return config.getStringList("ignore", new ArrayList()); - } - - public void setIgnoredPlayers(List players) - { - if (players == null || players.isEmpty()) - { - ignoredPlayers = new ArrayList(); - config.removeProperty("ignore"); - } - else - { - ignoredPlayers = players; - config.setProperty("ignore", players); - } - config.save(); - } - - public boolean isIgnoredPlayer(String name) - { - return ignoredPlayers.contains(name.toLowerCase(Locale.ENGLISH)); - } - - public void setIgnoredPlayer(String name, boolean set) - { - if (set) - { - ignoredPlayers.add(name.toLowerCase(Locale.ENGLISH)); - } - else - { - ignoredPlayers.remove(name.toLowerCase(Locale.ENGLISH)); - } - setIgnoredPlayers(ignoredPlayers); - } - private boolean godmode; - - private boolean getGodModeEnabled() - { - return config.getBoolean("godmode", false); - } - - public boolean isGodModeEnabled() - { - return godmode; - } - - public void setGodModeEnabled(boolean set) - { - godmode = set; - config.setProperty("godmode", set); - config.save(); - } - - public boolean toggleGodModeEnabled() - { - boolean ret = !isGodModeEnabled(); - setGodModeEnabled(ret); - return ret; - } - private boolean muted; - - private boolean getMuted() - { - return config.getBoolean("muted", false); - } - - public boolean isMuted() - { - return muted; - } - - public void setMuted(boolean set) - { - muted = set; - config.setProperty("muted", set); - config.save(); - } - - public boolean toggleMuted() - { - boolean ret = !isMuted(); - setMuted(ret); - return ret; - } - private long muteTimeout; - - private long _getMuteTimeout() - { - return config.getLong("timestamps.mute", 0); - } - - public long getMuteTimeout() - { - return muteTimeout; - } - - public void setMuteTimeout(long time) - { - muteTimeout = time; - config.setProperty("timestamps.mute", time); - config.save(); - } - private boolean jailed; - - private boolean getJailed() - { - return config.getBoolean("jailed", false); - } - - public boolean isJailed() - { - return jailed; - } - - public void setJailed(boolean set) - { - jailed = set; - config.setProperty("jailed", set); - config.save(); - } - - public boolean toggleJailed() - { - boolean ret = !isJailed(); - setJailed(ret); - return ret; - } - private long jailTimeout; - - private long _getJailTimeout() - { - return config.getLong("timestamps.jail", 0); - } - - public long getJailTimeout() - { - return jailTimeout; - } - - public void setJailTimeout(long time) - { - jailTimeout = time; - config.setProperty("timestamps.jail", time); - config.save(); - } - - public String getBanReason() - { - return config.getString("ban.reason"); - } - - public void setBanReason(String reason) - { - config.setProperty("ban.reason", reason); - config.save(); - } - - public long getBanTimeout() - { - return config.getLong("ban.timeout", 0); - } - - public void setBanTimeout(long time) - { - config.setProperty("ban.timeout", time); - config.save(); - } - private long lastLogin; - - private long _getLastLogin() - { - return config.getLong("timestamps.login", 0); - } - - public long getLastLogin() - { - return lastLogin; - } - - public void setLastLogin(long time) - { - lastLogin = time; - config.setProperty("timestamps.login", time); - config.save(); - } - private long lastLogout; - - private long _getLastLogout() - { - return config.getLong("timestamps.logout", 0); - } - - public long getLastLogout() - { - return lastLogout; - } - - public void setLastLogout(long time) - { - lastLogout = time; - config.setProperty("timestamps.logout", time); - config.save(); - } - private String lastLoginAddress; - - private String _getLastLoginAddress() - { - return config.getString("ipAddress", ""); - } - - public String getLastLoginAddress() - { - return lastLoginAddress; - } - - public void setLastLoginAddress(String address) - { - lastLoginAddress = address; - config.setProperty("ipAddress", address); - config.save(); - } - private boolean afk; - - private boolean getAfk() - { - return config.getBoolean("afk", false); - } - - public boolean isAfk() - { - return afk; - } - - public void setAfk(boolean set) - { - afk = set; - config.setProperty("afk", set); - config.save(); - } - - public boolean toggleAfk() - { - boolean ret = !isAfk(); - setAfk(ret); - return ret; - } - private boolean newplayer; - - private String geolocation; - - private String _getGeoLocation() - { - return config.getString("geolocation"); - } - - public String getGeoLocation() - { - return geolocation; - } - - public void setGeoLocation(String geolocation) - { - if (geolocation == null || geolocation.isEmpty()) - { - this.geolocation = null; - config.removeProperty("geolocation"); - } - else - { - this.geolocation = geolocation; - config.setProperty("geolocation", geolocation); - } - config.save(); - } - private boolean isSocialSpyEnabled; - - private boolean _isSocialSpyEnabled() - { - return config.getBoolean("socialspy", false); - } - - public boolean isSocialSpyEnabled() - { - return isSocialSpyEnabled; - } - - public void setSocialSpyEnabled(boolean status) - { - isSocialSpyEnabled = status; - config.setProperty("socialspy", status); - config.save(); - } - private boolean isNPC; - - private boolean _isNPC() - { - return config.getBoolean("npc", false); - } - - public boolean isNPC() - { - return isNPC; - } - - public void setNPC(boolean set) - { - isNPC = set; - config.setProperty("npc", set); - config.save(); - } - private boolean arePowerToolsEnabled; - - public boolean arePowerToolsEnabled() - { - return arePowerToolsEnabled; - } - - public void setPowerToolsEnabled(boolean set) - { - arePowerToolsEnabled = set; - config.setProperty("powertoolsenabled", set); - config.save(); - } - - public boolean togglePowerToolsEnabled() - { - boolean ret = !arePowerToolsEnabled(); - setPowerToolsEnabled(ret); - return ret; - } - - private boolean _arePowerToolsEnabled() - { - return config.getBoolean("powertoolsenabled", true); - } - private Map kitTimestamps; - - private Map _getKitTimestamps() - { - final Object map = config.getProperty("timestamps.kits"); - - if (map instanceof Map) - { - return (Map)map; - } - else - { - return new HashMap(); - } - } - - public Long getKitTimestamp(final String name) - { - final Number num = (Number)kitTimestamps.get(name.toLowerCase(Locale.ENGLISH)); - return num == null ? null : num.longValue(); - } - - public void setKitTimestamp(final String name, final long time) - { - kitTimestamps.put(name.toLowerCase(Locale.ENGLISH), time); - config.setProperty("timestamps.kits", kitTimestamps); - config.save(); - } - - public void save() - { - config.save(); - } -}*/ diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java deleted file mode 100644 index 7f7c5c056..000000000 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.earth2me.essentials; - -import com.earth2me.essentials.api.IUserMap; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.util.concurrent.UncheckedExecutionException; -import java.io.File; -import java.util.Collections; -import java.util.Set; -import java.util.concurrent.ConcurrentSkipListSet; -import java.util.concurrent.ExecutionException; -import org.bukkit.entity.Player; - -/*@Deprecated -public class UserMap extends CacheLoader implements IConf, IUserMap -{ - private final transient IEssentials ess; - private final transient Cache users = CacheBuilder.newBuilder().softValues().build(this); - private final transient ConcurrentSkipListSet keys = new ConcurrentSkipListSet(); - - public UserMap(final IEssentials ess) - { - super(); - this.ess = ess; - loadAllUsersAsync(ess); - } - - private void loadAllUsersAsync(final IEssentials ess) - { - ess.scheduleAsyncDelayedTask(new Runnable() - { - @Override - public void run() - { - final File userdir = new File(ess.getDataFolder(), "userdata"); - if (!userdir.exists()) - { - return; - } - keys.clear(); - users.invalidateAll(); - for (String string : userdir.list()) - { - if (!string.endsWith(".yml")) - { - continue; - } - final String name = string.substring(0, string.length() - 4); - keys.add(Util.sanitizeFileName(name)); - } - } - }); - } - - public boolean userExists(final String name) - { - return keys.contains(Util.sanitizeFileName(name)); - } - - public User getUser(final String name) - { - try - { - return users.get(Util.sanitizeFileName(name)); - } - catch (ExecutionException ex) - { - return null; - } - catch (UncheckedExecutionException ex) - { - return null; - } - } - - @Override - public User load(final String name) throws Exception - { - for (Player player : ess.getServer().getOnlinePlayers()) - { - if (player.getName().equalsIgnoreCase(name)) - { - keys.add(Util.sanitizeFileName(name)); - return new User(player, ess); - } - } - final File userFile = getUserFile(name); - if (userFile.exists()) - { - keys.add(Util.sanitizeFileName(name)); - return new User(new OfflinePlayer(name, ess), ess); - } - throw new Exception("User not found!"); - } - - @Override - public void reloadConfig() - { - loadAllUsersAsync(ess); - } - - public void removeUser(final String name) - { - keys.remove(Util.sanitizeFileName(name)); - users.invalidate(Util.sanitizeFileName(name)); - } - - public Set getAllUniqueUsers() - { - return Collections.unmodifiableSet(keys); - } - - public int getUniqueUsers() - { - return keys.size(); - } - - public File getUserFile(final String name) - { - final File userFolder = new File(ess.getDataFolder(), "userdata"); - return new File(userFolder, Util.sanitizeFileName(name) + ".yml"); - } - - @Override - public void onReload() - { - loadAllUsersAsync(ess); - } -}*/ diff --git a/Essentials/src/com/earth2me/essentials/Worth.java b/Essentials/src/com/earth2me/essentials/Worth.java index e970f2757..6b56850b1 100644 --- a/Essentials/src/com/earth2me/essentials/Worth.java +++ b/Essentials/src/com/earth2me/essentials/Worth.java @@ -1,62 +1,86 @@ package com.earth2me.essentials; +import com.earth2me.essentials.api.IEssentials; import com.earth2me.essentials.api.IWorth; +import com.earth2me.essentials.storage.AsyncStorageObjectHolder; +import com.earth2me.essentials.storage.EnchantmentLevel; import java.io.File; -import java.util.Locale; -import java.util.logging.Logger; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; +import org.bukkit.material.MaterialData; -public class Worth implements IWorth +public class Worth extends AsyncStorageObjectHolder implements IWorth { - private static final Logger logger = Logger.getLogger("Minecraft"); - private final EssentialsConf config; - - public Worth(File dataFolder) + public Worth(final IEssentials ess) { - config = new EssentialsConf(new File(dataFolder, "worth.yml")); - config.setTemplateName("/worth.yml"); - config.load(); + super(ess, com.earth2me.essentials.settings.Worth.class); + onReload(false); } - public double getPrice(ItemStack itemStack) + @Override + public double getPrice(final ItemStack itemStack) { - String itemname = itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - double result; - result = config.getDouble("worth." + itemname + "." + itemStack.getDurability(), Double.NaN); - if (Double.isNaN(result)) - { - result = config.getDouble("worth." + itemname + ".0", Double.NaN); - } - if (Double.isNaN(result)) + this.acquireReadLock(); + try { - result = config.getDouble("worth." + itemname, Double.NaN); + final Map prices = this.getData().getSell(); + if (prices == null || itemStack == null) + { + return Double.NaN; + } + final Double basePrice = prices.get(itemStack.getData()); + if (basePrice == null || Double.isNaN(basePrice)) + { + return Double.NaN; + } + double multiplier = 1.0; + if (itemStack.getType().getMaxDurability() > 0) { + multiplier *= (double)itemStack.getDurability() / (double)itemStack.getType().getMaxDurability(); + } + if (itemStack.getEnchantments() != null && !itemStack.getEnchantments().isEmpty()) + { + final Map enchantmentMultipliers = this.getData().getEnchantmentMultiplier(); + if (enchantmentMultipliers != null) + { + for (Map.Entry entry : itemStack.getEnchantments().entrySet()) + { + final Double enchMult = enchantmentMultipliers.get(new EnchantmentLevel(entry.getKey(), entry.getValue())); + if (enchMult != null) + { + multiplier *= enchMult; + } + } + } + } + return basePrice * multiplier; } - if (Double.isNaN(result)) + finally { - result = config.getDouble("worth-" + itemStack.getTypeId(), Double.NaN); + this.unlock(); } - return result; } - public void setPrice(ItemStack itemStack, double price) + @Override + public void setPrice(final ItemStack itemStack, final double price) { - if (itemStack.getType().getData() == null) - { - config.setProperty("worth." + itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""), price); - } - else - { - // Bukkit-bug: getDurability still contains the correct value, while getData().getData() is 0. - config.setProperty("worth." + itemStack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "") + "." + itemStack.getDurability(), price); + acquireWriteLock(); + try { + if (getData().getSell() == null) { + getData().setSell(new HashMap()); + } + getData().getSell().put(itemStack.getData(), price); + } finally { + unlock(); } - config.removeProperty("worth-" + itemStack.getTypeId()); - config.save(); } @Override - public void onReload() + public File getStorageFile() throws IOException { - config.load(); + return new File(ess.getDataFolder(), "worth.yml"); } } diff --git a/Essentials/src/com/earth2me/essentials/api/ChargeException.java b/Essentials/src/com/earth2me/essentials/api/ChargeException.java new file mode 100644 index 000000000..2fa4c7289 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/api/ChargeException.java @@ -0,0 +1,15 @@ +package com.earth2me.essentials; + + +public class ChargeException extends Exception +{ + public ChargeException(final String message) + { + super(message); + } + + public ChargeException(final String message, final Throwable throwable) + { + super(message, throwable); + } +} diff --git a/Essentials/src/com/earth2me/essentials/api/IEssentials.java b/Essentials/src/com/earth2me/essentials/api/IEssentials.java index eba74e9fa..9da294ca0 100644 --- a/Essentials/src/com/earth2me/essentials/api/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/api/IEssentials.java @@ -37,8 +37,6 @@ public interface IEssentials extends Plugin IUserMap getUserMap(); IBackup getBackup(); - - IEssentialsEconomy getEconomy(); ICommandHandler getCommandHandler(); diff --git a/Essentials/src/com/earth2me/essentials/api/IEssentialsEconomy.java b/Essentials/src/com/earth2me/essentials/api/IEssentialsEconomy.java deleted file mode 100644 index f94a150de..000000000 --- a/Essentials/src/com/earth2me/essentials/api/IEssentialsEconomy.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.earth2me.essentials.api; - -//TODO: Decide on this files fate -public interface IEssentialsEconomy -{ - double getMoney(String name) throws UserDoesNotExistException; - - void setMoney(String name, double balance) throws UserDoesNotExistException, NoLoanPermittedException; - - void add(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException; - - void subtract(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException; - - void divide(String name, double value) throws UserDoesNotExistException, NoLoanPermittedException; - - void multiply(String name, double value) throws UserDoesNotExistException, NoLoanPermittedException; - - void resetBalance(String name) throws UserDoesNotExistException, NoLoanPermittedException; - - boolean hasEnough(String name, double amount) throws UserDoesNotExistException; - - boolean hasMore(String name, double amount) throws UserDoesNotExistException; - - boolean hasLess(String name, double amount) throws UserDoesNotExistException; - - boolean isNegative(String name) throws UserDoesNotExistException; - - String format(double amount); - - boolean playerExists(String name); - - boolean isNPC(String name) throws UserDoesNotExistException; - - boolean createNPC(String name); - - void removeNPC(String name) throws UserDoesNotExistException; -} diff --git a/Essentials/src/com/earth2me/essentials/settings/geoip/Database.java b/Essentials/src/com/earth2me/essentials/settings/geoip/Database.java new file mode 100644 index 000000000..0e883d0bd --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/settings/geoip/Database.java @@ -0,0 +1,16 @@ +package com.earth2me.essentials.settings.geoip; + +import com.earth2me.essentials.storage.StorageObject; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@EqualsAndHashCode(callSuper = false) +public class Database implements StorageObject +{ + boolean showCities = false; + boolean downloadIfMissing = true; + String downloadUrlCity = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"; + String downloadUrl = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"; +} diff --git a/Essentials/src/com/earth2me/essentials/settings/geoip/GeoIP.java b/Essentials/src/com/earth2me/essentials/settings/geoip/GeoIP.java new file mode 100644 index 000000000..65a909ed4 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/settings/geoip/GeoIP.java @@ -0,0 +1,15 @@ +package com.earth2me.essentials.settings.geoip; + +import com.earth2me.essentials.storage.StorageObject; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@EqualsAndHashCode(callSuper = false) +public class GeoIP implements StorageObject +{ + private Database database = new Database(); + boolean showOnWhois = true; + boolean showOnLogin = true; +} diff --git a/Essentials/src/com/earth2me/essentials/storage/ManagedFile.java b/Essentials/src/com/earth2me/essentials/storage/ManagedFile.java new file mode 100644 index 000000000..0a2443f29 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/storage/ManagedFile.java @@ -0,0 +1,228 @@ +package com.earth2me.essentials; + +import static com.earth2me.essentials.I18n._; +import com.earth2me.essentials.api.IEssentials; +import java.io.*; +import java.math.BigInteger; +import java.security.DigestInputStream; +import java.security.DigestOutputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import org.bukkit.Bukkit; + + +public class ManagedFile +{ + private final static int BUFFERSIZE = 1024 * 8; + private final transient File file; + + public ManagedFile(final String filename, final IEssentials ess) + { + file = new File(ess.getDataFolder(), filename); + + if (file.exists()) + { + try + { + if (checkForVersion(file, ess.getDescription().getVersion()) && !file.delete()) + { + throw new IOException("Could not delete file " + file.toString()); + } + } + catch (IOException ex) + { + Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); + } + } + + if (!file.exists()) + { + try + { + copyResourceAscii("/" + filename, file); + } + catch (IOException ex) + { + Bukkit.getLogger().log(Level.SEVERE, _("itemsCsvNotLoaded"), ex); + } + } + } + + public static void copyResourceAscii(final String resourceName, final File file) throws IOException + { + final InputStreamReader reader = new InputStreamReader(ManagedFile.class.getResourceAsStream(resourceName)); + try + { + final MessageDigest digest = getDigest(); + final DigestOutputStream digestStream = new DigestOutputStream(new FileOutputStream(file), digest); + try + { + final OutputStreamWriter writer = new OutputStreamWriter(digestStream); + try + { + final char[] buffer = new char[BUFFERSIZE]; + do + { + final int length = reader.read(buffer); + if (length >= 0) + { + writer.write(buffer, 0, length); + } + else + { + break; + } + } + while (true); + writer.write("\n"); + writer.flush(); + final BigInteger hashInt = new BigInteger(1, digest.digest()); + digestStream.on(false); + digestStream.write('#'); + digestStream.write(hashInt.toString(16).getBytes()); + } + finally + { + writer.close(); + } + } + finally + { + digestStream.close(); + } + } + finally + { + reader.close(); + } + } + + public static boolean checkForVersion(final File file, final String version) throws IOException + { + if (file.length() < 33) + { + return false; + } + final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); + try + { + final byte[] buffer = new byte[(int)file.length()]; + int position = 0; + do + { + final int length = bis.read(buffer, position, Math.min((int)file.length() - position, BUFFERSIZE)); + if (length < 0) + { + break; + } + position += length; + } + while (position < file.length()); + final ByteArrayInputStream bais = new ByteArrayInputStream(buffer); + if (bais.skip(file.length() - 33) != file.length() - 33) + { + return false; + } + final BufferedReader reader = new BufferedReader(new InputStreamReader(bais)); + try + { + String hash = reader.readLine(); + if (hash != null && hash.matches("#[a-f0-9]{32}")) + { + hash = hash.substring(1); + bais.reset(); + final String versionline = reader.readLine(); + if (versionline != null && versionline.matches("#version: .+")) + { + final String versioncheck = versionline.substring(10); + if (!versioncheck.equalsIgnoreCase(version)) + { + bais.reset(); + final MessageDigest digest = getDigest(); + final DigestInputStream digestStream = new DigestInputStream(bais, digest); + try + { + final byte[] bytes = new byte[(int)file.length() - 33]; + digestStream.read(bytes); + final BigInteger correct = new BigInteger(hash, 16); + final BigInteger test = new BigInteger(1, digest.digest()); + if (correct.equals(test)) + { + return true; + } + else + { + Bukkit.getLogger().warning("File " + file.toString() + " has been modified by user and file version differs, please update the file manually."); + } + } + finally + { + digestStream.close(); + } + } + } + } + } + finally + { + reader.close(); + } + } + finally + { + bis.close(); + } + return false; + } + + public static MessageDigest getDigest() throws IOException + { + try + { + return MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException ex) + { + throw new IOException(ex); + } + } + + public List getLines() + { + try + { + final BufferedReader reader = new BufferedReader(new FileReader(file)); + try + { + final List lines = new ArrayList(); + do + { + final String line = reader.readLine(); + if (line == null) + { + break; + } + else + { + lines.add(line); + } + } + while (true); + return lines; + } + finally + { + reader.close(); + } + } + catch (IOException ex) + { + Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); + return Collections.emptyList(); + } + } +} diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 4c5a49ed2..c78091ea4 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -1,5 +1,5 @@ # This determines the command prefix when there are conflicts (/name:home, /name:help, etc.) -name: Essentials +name: Essentials3 main: com.earth2me.essentials.Essentials # Note to developers: This next line cannot change, or the automatic versioning system will break. version: TeamCity diff --git a/Essentials2Compat/build.xml b/Essentials2Compat/build.xml new file mode 100644 index 000000000..2a6d21a52 --- /dev/null +++ b/Essentials2Compat/build.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project Essentials2Compat. + + + diff --git a/Essentials2Compat/manifest.mf b/Essentials2Compat/manifest.mf new file mode 100644 index 000000000..328e8e5bc --- /dev/null +++ b/Essentials2Compat/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Essentials2Compat/nbproject/build-impl.xml b/Essentials2Compat/nbproject/build-impl.xml new file mode 100644 index 000000000..117d471db --- /dev/null +++ b/Essentials2Compat/nbproject/build-impl.xml @@ -0,0 +1,1092 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + Must select one file in the IDE or set profile.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Essentials2Compat/nbproject/genfiles.properties b/Essentials2Compat/nbproject/genfiles.properties new file mode 100644 index 000000000..ab97b0ef6 --- /dev/null +++ b/Essentials2Compat/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=cfe919e8 +build.xml.script.CRC32=ec95d082 +build.xml.stylesheet.CRC32=28e38971@1.50.1.46 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=cfe919e8 +nbproject/build-impl.xml.script.CRC32=9b7e0383 +nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46 diff --git a/Essentials2Compat/nbproject/project.properties b/Essentials2Compat/nbproject/project.properties new file mode 100644 index 000000000..99a18a932 --- /dev/null +++ b/Essentials2Compat/nbproject/project.properties @@ -0,0 +1,126 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=Essentials2Compat +application.vendor= +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=120 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAnnotationArgs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineArrayInit=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineAssignment=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineBinaryOp=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineCallArgs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineDisjunctiveCatchTypes=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineFor=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineMethodParams=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineParenthesized=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTernaryOp=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineTryResources=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader=0 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesBeforeClass=2 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=* +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indentCasesFromSwitch=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.separateImportGroups=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceAfterTypeCast=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=4 +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Essentials2Compat.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.bukkit.jar=../lib/bukkit.jar +includes=** +jar.archive.disabled=${jnlp.enabled} +jar.compress=true +jar.index=${jnlp.enabled} +javac.classpath=\ + ${file.reference.bukkit.jar}:\ + ${reference.Essentials.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jnlp.codebase.type=no.codebase +jnlp.descriptor=application +jnlp.enabled=false +jnlp.mixed.code=default +jnlp.offline-allowed=false +jnlp.signed=false +jnlp.signing= +jnlp.signing.alias= +jnlp.signing.keystore= +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +project.Essentials=../Essentials +reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Essentials2Compat/nbproject/project.xml b/Essentials2Compat/nbproject/project.xml new file mode 100644 index 000000000..244dc59a9 --- /dev/null +++ b/Essentials2Compat/nbproject/project.xml @@ -0,0 +1,28 @@ + + + org.netbeans.modules.java.j2seproject + + + Essentials2Compat + + + + + + + + + ../lib/nblibraries.properties + + + + Essentials + jar + + jar + clean + jar + + + + diff --git a/Essentials2Compat/src/com/earth2me/essentials/Essentials.java b/Essentials2Compat/src/com/earth2me/essentials/Essentials.java new file mode 100644 index 000000000..dc612e8d6 --- /dev/null +++ b/Essentials2Compat/src/com/earth2me/essentials/Essentials.java @@ -0,0 +1,22 @@ +package com.earth2me.essentials; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + + +public class Essentials extends JavaPlugin +{ + @Override + public void onEnable() + { + Bukkit.getLogger().info("You can remove this compatibility plugin, when all plugins are updated to Essentials 3"); + //TODO: Update files to new 3.0 format + //TODO: Move Eco Api here + } + + @Override + public void onDisable() + { + throw new UnsupportedOperationException("Not supported yet."); + } +} diff --git a/Essentials2Compat/src/com/earth2me/essentials/EssentialsConf.java b/Essentials2Compat/src/com/earth2me/essentials/EssentialsConf.java new file mode 100644 index 000000000..3a37f04b0 --- /dev/null +++ b/Essentials2Compat/src/com/earth2me/essentials/EssentialsConf.java @@ -0,0 +1,302 @@ +package com.earth2me.essentials; + +import static com.earth2me.essentials.I18n._; +import java.io.*; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.World; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.config.Configuration; + +@Deprecated +public class EssentialsConf extends Configuration +{ + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private transient File configFile; + private transient String templateName = null; + private transient Class resourceClass = EssentialsConf.class; + + public EssentialsConf(final File configFile) + { + super(configFile); + this.configFile = configFile; + if (this.root == null) + { + this.root = new HashMap(); + } + } + + @Override + public void load() + { + configFile = configFile.getAbsoluteFile(); + if (!configFile.getParentFile().exists()) + { + if (!configFile.getParentFile().mkdirs()) + { + LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString())); + } + } + // This will delete files where the first character is 0. In most cases they are broken. + if (configFile.exists() && configFile.length() != 0) + { + try + { + final InputStream input = new FileInputStream(configFile); + try + { + if (input.read() == 0) + { + input.close(); + configFile.delete(); + } + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + finally + { + try + { + input.close(); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + } + } + catch (FileNotFoundException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + } + + if (!configFile.exists()) + { + if (templateName != null) + { + LOGGER.log(Level.INFO, _("creatingConfigFromTemplate", configFile.toString())); + createFromTemplate(); + } + else + { + try + { + LOGGER.log(Level.INFO, _("creatingEmptyConfig", configFile.toString())); + if (!configFile.createNewFile()) + { + LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString())); + } + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("failedToCreateConfig", configFile.toString()), ex); + } + } + } + + try + { + super.load(); + } + catch (RuntimeException e) + { + LOGGER.log(Level.SEVERE, "File broken: " + configFile.toString()); + throw e; + } + + if (this.root == null) + { + this.root = new HashMap(); + } + } + + private void createFromTemplate() + { + InputStream istr = null; + OutputStream ostr = null; + try + { + istr = resourceClass.getResourceAsStream(templateName); + if (istr == null) + { + LOGGER.log(Level.SEVERE, _("couldNotFindTemplate", templateName)); + return; + } + ostr = new FileOutputStream(configFile); + byte[] buffer = new byte[1024]; + int length = 0; + length = istr.read(buffer); + while (length > 0) + { + ostr.write(buffer, 0, length); + length = istr.read(buffer); + } + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("failedToWriteConfig", configFile.toString()), ex); + } + finally + { + try + { + if (istr != null) + { + istr.close(); + } + } + catch (IOException ex) + { + Logger.getLogger(EssentialsConf.class.getName()).log(Level.SEVERE, null, ex); + } + try + { + if (ostr != null) + { + ostr.close(); + } + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("failedToCloseConfig", configFile.toString()), ex); + } + } + } + + public void setTemplateName(final String templateName) + { + this.templateName = templateName; + } + + public File getFile() + { + return configFile; + } + + public void setTemplateName(final String templateName, final Class resClass) + { + this.templateName = templateName; + this.resourceClass = resClass; + } + + public boolean hasProperty(final String path) + { + return getProperty(path) != null; + } + + public Location getLocation(final String path, final Server server) throws Exception + { + final String worldName = getString((path == null ? "" : path + ".") + "world"); + if (worldName == null || worldName.isEmpty()) + { + return null; + } + final World world = server.getWorld(worldName); + if (world == null) + { + throw new Exception(_("invalidWorld")); + } + return new Location(world, + getDouble((path == null ? "" : path + ".") + "x", 0), + getDouble((path == null ? "" : path + ".") + "y", 0), + getDouble((path == null ? "" : path + ".") + "z", 0), + (float)getDouble((path == null ? "" : path + ".") + "yaw", 0), + (float)getDouble((path == null ? "" : path + ".") + "pitch", 0)); + } + + public void setProperty(final String path, final Location loc) + { + setProperty((path == null ? "" : path + ".") + "world", loc.getWorld().getName()); + setProperty((path == null ? "" : path + ".") + "x", loc.getX()); + setProperty((path == null ? "" : path + ".") + "y", loc.getY()); + setProperty((path == null ? "" : path + ".") + "z", loc.getZ()); + setProperty((path == null ? "" : path + ".") + "yaw", loc.getYaw()); + setProperty((path == null ? "" : path + ".") + "pitch", loc.getPitch()); + } + + public ItemStack getItemStack(final String path) + { + final ItemStack stack = new ItemStack( + Material.valueOf(getString(path + ".type", "AIR")), + getInt(path + ".amount", 1), + (short)getInt(path + ".damage", 0)); + final List enchants = getKeys(path + ".enchant"); + if (enchants != null) + { + for (String enchant : enchants) + { + final Enchantment enchantment = Enchantment.getByName(enchant.toUpperCase(Locale.ENGLISH)); + if (enchantment == null) + { + continue; + } + final int level = getInt(path + ".enchant." + enchant, enchantment.getStartLevel()); + stack.addUnsafeEnchantment(enchantment, level); + } + } + return stack; + /* + * , + * (byte)getInt(path + ".data", 0) + */ + } + + public void setProperty(final String path, final ItemStack stack) + { + final Map map = new HashMap(); + map.put("type", stack.getType().toString()); + map.put("amount", stack.getAmount()); + map.put("damage", stack.getDurability()); + Map enchantments = stack.getEnchantments(); + if (!enchantments.isEmpty()) + { + Map enchant = new HashMap(); + for (Map.Entry entry : enchantments.entrySet()) + { + enchant.put(entry.getKey().getName().toLowerCase(Locale.ENGLISH), entry.getValue()); + } + map.put("enchant", enchant); + } + // getData().getData() is broken + //map.put("data", stack.getDurability()); + setProperty(path, map); + } + + public long getLong(final String path, final long def) + { + try + { + final Number num = (Number)getProperty(path); + return num == null ? def : num.longValue(); + } + catch (ClassCastException ex) + { + return def; + } + } + + @Override + public double getDouble(final String path, final double def) + { + try + { + Number num = (Number)getProperty(path); + return num == null ? def : num.doubleValue(); + } + catch (ClassCastException ex) + { + return def; + } + } +} diff --git a/Essentials2Compat/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials2Compat/src/com/earth2me/essentials/EssentialsUpgrade.java new file mode 100644 index 000000000..05a5d4797 --- /dev/null +++ b/Essentials2Compat/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -0,0 +1,806 @@ +package com.earth2me.essentials; + +import static com.earth2me.essentials.I18n._; +import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.craftbukkit.FakeWorld; +import com.earth2me.essentials.settings.Spawns; +import com.earth2me.essentials.storage.YamlStorageWriter; +import java.io.*; +import java.math.BigInteger; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.inventory.ItemStack; + +@Deprecated +public class EssentialsUpgrade +{ + private final static Logger LOGGER = Logger.getLogger("Minecraft"); + private final transient IEssentials ess; + private final transient EssentialsConf doneFile; + + EssentialsUpgrade(final IEssentials essentials) + { + ess = essentials; + if (!ess.getDataFolder().exists()) + { + ess.getDataFolder().mkdirs(); + } + doneFile = new EssentialsConf(new File(ess.getDataFolder(), "upgrades-done.yml")); + doneFile.load(); + } + + private void moveWorthValuesToWorthYml() + { + if (doneFile.getBoolean("moveWorthValuesToWorthYml", false)) + { + return; + } + try + { + final File configFile = new File(ess.getDataFolder(), "config.yml"); + if (!configFile.exists()) + { + return; + } + final EssentialsConf conf = new EssentialsConf(configFile); + conf.load(); + final Worth worth = new Worth(ess); + boolean found = false; + for (Material mat : Material.values()) + { + final int id = mat.getId(); + final double value = conf.getDouble("worth-" + id, Double.NaN); + if (!Double.isNaN(value)) + { + found = true; + worth.setPrice(new ItemStack(mat, 1, (short)0, (byte)0), value); + } + } + if (found) + { + removeLinesFromConfig(configFile, "\\s*#?\\s*worth-[0-9]+.*", "# Worth values have been moved to worth.yml"); + } + doneFile.setProperty("moveWorthValuesToWorthYml", true); + doneFile.save(); + } + catch (Throwable e) + { + LOGGER.log(Level.SEVERE, _("upgradingFilesError"), e); + } + } + + private void moveMotdRulesToFile(String name) + { + if (doneFile.getBoolean("move" + name + "ToFile", false)) + { + return; + } + try + { + final File file = new File(ess.getDataFolder(), name + ".txt"); + if (file.exists()) + { + return; + } + final File configFile = new File(ess.getDataFolder(), "config.yml"); + if (!configFile.exists()) + { + return; + } + final EssentialsConf conf = new EssentialsConf(configFile); + conf.load(); + List lines = conf.getStringList(name, null); + if (lines != null && !lines.isEmpty()) + { + if (!file.createNewFile()) + { + throw new IOException("Failed to create file " + file); + } + PrintWriter writer = new PrintWriter(file); + + for (String line : lines) + { + writer.println(line); + } + writer.close(); + } + doneFile.setProperty("move" + name + "ToFile", true); + doneFile.save(); + } + catch (Throwable e) + { + LOGGER.log(Level.SEVERE, _("upgradingFilesError"), e); + } + } + + private void removeLinesFromConfig(File file, String regex, String info) throws Exception + { + boolean needUpdate = false; + final BufferedReader bReader = new BufferedReader(new FileReader(file)); + final File tempFile = File.createTempFile("essentialsupgrade", ".tmp.yml", ess.getDataFolder()); + final BufferedWriter bWriter = new BufferedWriter(new FileWriter(tempFile)); + do + { + final String line = bReader.readLine(); + if (line == null) + { + break; + } + if (line.matches(regex)) + { + if (!needUpdate && info != null) + { + bWriter.write(info, 0, info.length()); + bWriter.newLine(); + } + needUpdate = true; + } + else + { + if (line.endsWith("\r\n")) + { + bWriter.write(line, 0, line.length() - 2); + } + else if (line.endsWith("\r") || line.endsWith("\n")) + { + bWriter.write(line, 0, line.length() - 1); + } + else + { + bWriter.write(line, 0, line.length()); + } + bWriter.newLine(); + } + } + while (true); + bReader.close(); + bWriter.close(); + if (needUpdate) + { + if (!file.renameTo(new File(file.getParentFile(), file.getName().concat("." + System.currentTimeMillis() + ".upgradebackup")))) + { + throw new Exception(_("configFileMoveError")); + } + if (!tempFile.renameTo(file)) + { + throw new Exception(_("configFileRenameError")); + } + } + else + { + tempFile.delete(); + } + } + + private void updateUsersToNewDefaultHome() + { + if (doneFile.getBoolean("updateUsersToNewDefaultHome", false)) + { + return; + } + final File userdataFolder = new File(ess.getDataFolder(), "userdata"); + if (!userdataFolder.exists() || !userdataFolder.isDirectory()) + { + return; + } + final File[] userFiles = userdataFolder.listFiles(); + + for (File file : userFiles) + { + if (!file.isFile() || !file.getName().endsWith(".yml")) + { + continue; + } + final EssentialsConf config = new EssentialsConf(file); + try + { + config.load(); + if (config.hasProperty("home") && !config.hasProperty("home.default")) + { + @SuppressWarnings("unchecked") + final List vals = (List)config.getProperty("home"); + if (vals == null) + { + continue; + } + World world = ess.getServer().getWorlds().get(0); + if (vals.size() > 5) + { + world = ess.getServer().getWorld((String)vals.get(5)); + } + if (world != null) + { + final Location loc = new Location( + world, + ((Number)vals.get(0)).doubleValue(), + ((Number)vals.get(1)).doubleValue(), + ((Number)vals.get(2)).doubleValue(), + ((Number)vals.get(3)).floatValue(), + ((Number)vals.get(4)).floatValue()); + + final String worldName = world.getName().toLowerCase(Locale.ENGLISH); + if (worldName != null && !worldName.isEmpty()) + { + config.removeProperty("home"); + config.setProperty("home.default", worldName); + config.setProperty("home.worlds." + worldName, loc); + config.save(); + } + } + } + } + catch (RuntimeException ex) + { + LOGGER.log(Level.INFO, "File: " + file.toString()); + throw ex; + } + } + doneFile.setProperty("updateUsersToNewDefaultHome", true); + doneFile.save(); + } + + private void updateUsersPowerToolsFormat() + { + if (doneFile.getBoolean("updateUsersPowerToolsFormat", false)) + { + return; + } + final File userdataFolder = new File(ess.getDataFolder(), "userdata"); + if (!userdataFolder.exists() || !userdataFolder.isDirectory()) + { + return; + } + final File[] userFiles = userdataFolder.listFiles(); + + for (File file : userFiles) + { + if (!file.isFile() || !file.getName().endsWith(".yml")) + { + continue; + } + final EssentialsConf config = new EssentialsConf(file); + try + { + config.load(); + if (config.hasProperty("powertools")) + { + @SuppressWarnings("unchecked") + final Map powertools = (Map)config.getProperty("powertools"); + if (powertools == null) + { + continue; + } + for (Map.Entry entry : powertools.entrySet()) + { + if (entry.getValue() instanceof String) + { + List temp = new ArrayList(); + temp.add((String)entry.getValue()); + ((Map)powertools).put(entry.getKey(), temp); + } + } + config.save(); + } + } + catch (RuntimeException ex) + { + LOGGER.log(Level.INFO, "File: " + file.toString()); + throw ex; + } + } + doneFile.setProperty("updateUsersPowerToolsFormat", true); + doneFile.save(); + } + + private void updateUsersHomesFormat() + { + if (doneFile.getBoolean("updateUsersHomesFormat", false)) + { + return; + } + final File userdataFolder = new File(ess.getDataFolder(), "userdata"); + if (!userdataFolder.exists() || !userdataFolder.isDirectory()) + { + return; + } + final File[] userFiles = userdataFolder.listFiles(); + + for (File file : userFiles) + { + if (!file.isFile() || !file.getName().endsWith(".yml")) + { + continue; + } + final EssentialsConf config = new EssentialsConf(file); + try + { + + config.load(); + if (config.hasProperty("home") && config.hasProperty("home.default")) + { + @SuppressWarnings("unchecked") + final String defworld = (String)config.getProperty("home.default"); + final Location defloc = getFakeLocation(config, "home.worlds." + defworld); + if (defloc != null) + { + config.setProperty("homes.home", defloc); + } + + List worlds = config.getKeys("home.worlds"); + Location loc; + String worldName; + + if (worlds == null) + { + continue; + } + for (String world : worlds) + { + if (defworld.equalsIgnoreCase(world)) + { + continue; + } + loc = getFakeLocation(config, "home.worlds." + world); + if (loc == null) + { + continue; + } + worldName = loc.getWorld().getName().toLowerCase(Locale.ENGLISH); + if (worldName != null && !worldName.isEmpty()) + { + config.setProperty("homes." + worldName, loc); + } + } + config.removeProperty("home"); + config.save(); + } + + } + catch (RuntimeException ex) + { + LOGGER.log(Level.INFO, "File: " + file.toString()); + throw ex; + } + } + doneFile.setProperty("updateUsersHomesFormat", true); + doneFile.save(); + } + + /*private void moveUsersDataToUserdataFolder() + { + final File usersFile = new File(ess.getDataFolder(), "users.yml"); + if (!usersFile.exists()) + { + return; + } + final EssentialsConf usersConfig = new EssentialsConf(usersFile); + usersConfig.load(); + for (String username : usersConfig.getKeys(null)) + { + final User user = new User(new OfflinePlayer(username, ess), ess); + final String nickname = usersConfig.getString(username + ".nickname"); + if (nickname != null && !nickname.isEmpty() && !nickname.equals(username)) + { + user.setNickname(nickname); + } + final List mails = usersConfig.getStringList(username + ".mail", null); + if (mails != null && !mails.isEmpty()) + { + user.setMails(mails); + } + if (!user.hasHome()) + { + @SuppressWarnings("unchecked") + final List vals = (List)usersConfig.getProperty(username + ".home"); + if (vals != null) + { + World world = ess.getServer().getWorlds().get(0); + if (vals.size() > 5) + { + world = getFakeWorld((String)vals.get(5)); + } + if (world != null) + { + user.setHome("home", new Location(world, + ((Number)vals.get(0)).doubleValue(), + ((Number)vals.get(1)).doubleValue(), + ((Number)vals.get(2)).doubleValue(), + ((Number)vals.get(3)).floatValue(), + ((Number)vals.get(4)).floatValue())); + } + } + } + } + usersFile.renameTo(new File(usersFile.getAbsolutePath() + ".old")); + }*/ + + private void convertWarps() + { + final File warpsFolder = new File(ess.getDataFolder(), "warps"); + if (!warpsFolder.exists()) + { + warpsFolder.mkdirs(); + } + final File[] listOfFiles = warpsFolder.listFiles(); + if (listOfFiles.length >= 1) + { + for (int i = 0; i < listOfFiles.length; i++) + { + final String filename = listOfFiles[i].getName(); + if (listOfFiles[i].isFile() && filename.endsWith(".dat")) + { + try + { + final BufferedReader rx = new BufferedReader(new FileReader(listOfFiles[i])); + double x, y, z; + float yaw, pitch; + String worldName; + try + { + if (!rx.ready()) + { + continue; + } + x = Double.parseDouble(rx.readLine().trim()); + if (!rx.ready()) + { + continue; + } + y = Double.parseDouble(rx.readLine().trim()); + if (!rx.ready()) + { + continue; + } + z = Double.parseDouble(rx.readLine().trim()); + if (!rx.ready()) + { + continue; + } + yaw = Float.parseFloat(rx.readLine().trim()); + if (!rx.ready()) + { + continue; + } + pitch = Float.parseFloat(rx.readLine().trim()); + worldName = rx.readLine(); + } + finally + { + rx.close(); + } + World w = null; + for (World world : ess.getServer().getWorlds()) + { + if (world.getEnvironment() != World.Environment.NETHER) + { + w = world; + break; + } + } + if (worldName != null) + { + worldName = worldName.trim(); + World w1 = null; + w1 = getFakeWorld(worldName); + if (w1 != null) + { + w = w1; + } + } + final Location loc = new Location(w, x, y, z, yaw, pitch); + ess.getWarps().setWarp(filename.substring(0, filename.length() - 4), loc); + if (!listOfFiles[i].renameTo(new File(warpsFolder, filename + ".old"))) + { + throw new Exception(_("fileRenameError", filename)); + } + } + catch (Exception ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + } + } + + } + final File warpFile = new File(ess.getDataFolder(), "warps.txt"); + if (warpFile.exists()) + { + try + { + final BufferedReader rx = new BufferedReader(new FileReader(warpFile)); + try + { + for (String[] parts = new String[0]; rx.ready(); parts = rx.readLine().split(":")) + { + if (parts.length < 6) + { + continue; + } + final String name = parts[0]; + final double x = Double.parseDouble(parts[1].trim()); + final double y = Double.parseDouble(parts[2].trim()); + final double z = Double.parseDouble(parts[3].trim()); + final float yaw = Float.parseFloat(parts[4].trim()); + final float pitch = Float.parseFloat(parts[5].trim()); + if (name.isEmpty()) + { + continue; + } + World w = null; + for (World world : ess.getServer().getWorlds()) + { + if (world.getEnvironment() != World.Environment.NETHER) + { + w = world; + break; + } + } + final Location loc = new Location(w, x, y, z, yaw, pitch); + ess.getWarps().setWarp(name, loc); + if (!warpFile.renameTo(new File(ess.getDataFolder(), "warps.txt.old"))) + { + throw new Exception(_("fileRenameError", "warps.txt")); + } + } + } + finally + { + rx.close(); + } + } + catch (Exception ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + } + } + + /*private void sanitizeAllUserFilenames() + { + if (doneFile.getBoolean("sanitizeAllUserFilenames", false)) + { + return; + } + final File usersFolder = new File(ess.getDataFolder(), "userdata"); + if (!usersFolder.exists()) + { + return; + } + final File[] listOfFiles = usersFolder.listFiles(); + for (int i = 0; i < listOfFiles.length; i++) + { + final String filename = listOfFiles[i].getName(); + if (!listOfFiles[i].isFile() || !filename.endsWith(".yml")) + { + continue; + } + final String sanitizedFilename = Util.sanitizeFileName(filename.substring(0, filename.length() - 4)) + ".yml"; + if (sanitizedFilename.equals(filename)) + { + continue; + } + final File tmpFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename + ".tmp"); + final File newFile = new File(listOfFiles[i].getParentFile(), sanitizedFilename); + if (!listOfFiles[i].renameTo(tmpFile)) + { + LOGGER.log(Level.WARNING, _("userdataMoveError", filename, sanitizedFilename)); + continue; + } + if (newFile.exists()) + { + LOGGER.log(Level.WARNING, _("duplicatedUserdata", filename, sanitizedFilename)); + continue; + } + if (!tmpFile.renameTo(newFile)) + { + LOGGER.log(Level.WARNING, _("userdataMoveBackError", sanitizedFilename, sanitizedFilename)); + } + } + doneFile.setProperty("sanitizeAllUserFilenames", true); + doneFile.save(); + }*/ + + private World getFakeWorld(final String name) + { + final File bukkitDirectory = ess.getDataFolder().getParentFile().getParentFile(); + final File worldDirectory = new File(bukkitDirectory, name); + if (worldDirectory.exists() && worldDirectory.isDirectory()) + { + return new FakeWorld(worldDirectory.getName(), World.Environment.NORMAL); + } + return null; + } + + public Location getFakeLocation(EssentialsConf config, String path) + { + String worldName = config.getString((path != null ? path + "." : "") + "world"); + if (worldName == null || worldName.isEmpty()) + { + return null; + } + World world = getFakeWorld(worldName); + if (world == null) + { + return null; + } + return new Location(world, + config.getDouble((path != null ? path + "." : "") + "x", 0), + config.getDouble((path != null ? path + "." : "") + "y", 0), + config.getDouble((path != null ? path + "." : "") + "z", 0), + (float)config.getDouble((path != null ? path + "." : "") + "yaw", 0), + (float)config.getDouble((path != null ? path + "." : "") + "pitch", 0)); + } + + private void deleteOldItemsCsv() + { + if (doneFile.getBoolean("deleteOldItemsCsv", false)) + { + return; + } + final File file = new File(ess.getDataFolder(), "items.csv"); + if (file.exists()) + { + try + { + final Set oldconfigs = new HashSet(); + oldconfigs.add(new BigInteger("66ec40b09ac167079f558d1099e39f10", 16)); // sep 1 + oldconfigs.add(new BigInteger("34284de1ead43b0bee2aae85e75c041d", 16)); // crlf + oldconfigs.add(new BigInteger("c33bc9b8ee003861611bbc2f48eb6f4f", 16)); // jul 24 + oldconfigs.add(new BigInteger("6ff17925430735129fc2a02f830c1daa", 16)); // crlf + + MessageDigest digest = ManagedFile.getDigest(); + final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); + final DigestInputStream dis = new DigestInputStream(bis, digest); + final byte[] buffer = new byte[1024]; + try + { + while (dis.read(buffer) != -1) + { + } + } + finally + { + dis.close(); + } + + BigInteger hash = new BigInteger(1, digest.digest()); + if (oldconfigs.contains(hash) && !file.delete()) + { + throw new IOException("Could not delete file " + file.toString()); + } + doneFile.setProperty("deleteOldItemsCsv", true); + doneFile.save(); + } + catch (IOException ex) + { + Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); + } + } + } + + 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 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(); + } + + private void updateJailsToNewJailsConfig() + { + if (doneFile.getBoolean("updateJailsToNewJailsConfig", false)) + { + return; + } + final File configFile = new File(ess.getDataFolder(), "jail.yml"); + if (configFile.exists()) + { + + final EssentialsConf config = new EssentialsConf(configFile); + try + { + config.load(); + if (!config.hasProperty("jails")) + { + final com.earth2me.essentials.settings.Jails jails = new com.earth2me.essentials.settings.Jails(); + List keys = config.getKeys(); + for (String jailName : keys) + { + Location loc = getFakeLocation(config, jailName); + jails.getJails().put(jailName.toLowerCase(Locale.ENGLISH), loc); + } + if (!configFile.renameTo(new File(ess.getDataFolder(), "jail.yml.old"))) + { + throw new Exception(_("fileRenameError", "jail.yml")); + } + PrintWriter writer = new PrintWriter(configFile); + try + { + new YamlStorageWriter(writer).save(jails); + } + finally + { + writer.close(); + } + } + } + catch (Exception ex) + { + Bukkit.getLogger().log(Level.SEVERE, ex.getMessage(), ex); + } + } + doneFile.setProperty("updateJailsToNewJailsConfig", true); + doneFile.save(); + } + + public void beforeSettings() + { + if (!ess.getDataFolder().exists()) + { + ess.getDataFolder().mkdirs(); + } + moveWorthValuesToWorthYml(); + moveMotdRulesToFile("motd"); + moveMotdRulesToFile("rules"); + } + + public void afterSettings() + { + //TODO? + //sanitizeAllUserFilenames(); + updateUsersToNewDefaultHome(); + //moveUsersDataToUserdataFolder(); + convertWarps(); + updateUsersPowerToolsFormat(); + updateUsersHomesFormat(); + deleteOldItemsCsv(); + updateSpawnsToNewSpawnsConfig(); + updateJailsToNewJailsConfig(); + } +} diff --git a/Essentials2Compat/src/plugin.yml b/Essentials2Compat/src/plugin.yml new file mode 100644 index 000000000..e3d9afe83 --- /dev/null +++ b/Essentials2Compat/src/plugin.yml @@ -0,0 +1,6 @@ +name: Essentials +main: com.earth2me.essentials.Essentials +version: 2.9 +website: http://tiny.cc/EssentialsWiki +description: Compatibility plugin for older plugins +authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits] diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/ConfigHolder.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/ConfigHolder.java new file mode 100644 index 000000000..e2d82d644 --- /dev/null +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/ConfigHolder.java @@ -0,0 +1,27 @@ +package com.earth2me.essentials.geoip; + +import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.settings.geoip.GeoIP; +import com.earth2me.essentials.storage.AsyncStorageObjectHolder; +import java.io.File; +import java.io.IOException; +import org.bukkit.plugin.Plugin; + +public class ConfigHolder extends AsyncStorageObjectHolder +{ + private final transient Plugin geoip; + + public ConfigHolder(final IEssentials ess, final Plugin geoip) + { + super(ess, GeoIP.class); + this.geoip = geoip; + onReload(); + } + + @Override + public File getStorageFile() throws IOException + { + return new File(geoip.getDataFolder(), "config.yml"); + } + +} diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java index f9436d7f0..783684ef8 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java @@ -36,8 +36,9 @@ public class EssentialsGeoIP extends JavaPlugin this.setEnabled(false); return; } - final EssentialsGeoIPPlayerListener playerListener = new EssentialsGeoIPPlayerListener(getDataFolder(), ess); + final EssentialsGeoIPPlayerListener playerListener = new EssentialsGeoIPPlayerListener(this, ess); pm.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); + ess.addReloadListener(playerListener); logger.info(_("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), "essentials team")); diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java index 5a33fecc9..aa54dbf25 100644 --- a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java +++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java @@ -1,9 +1,8 @@ package com.earth2me.essentials.geoip; -import com.earth2me.essentials.EssentialsConf; import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.api.IReload; import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.api.IReload; import com.earth2me.essentials.api.IUser; import com.maxmind.geoip.Location; import com.maxmind.geoip.LookupService; @@ -19,165 +18,205 @@ import java.util.zip.GZIPInputStream; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerListener; +import org.bukkit.plugin.Plugin; public class EssentialsGeoIPPlayerListener extends PlayerListener implements IReload { - LookupService ls = null; - private static final Logger logger = Logger.getLogger("Minecraft"); - File databaseFile; - File dataFolder; - EssentialsConf config; + private transient LookupService ls = null; + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private transient File databaseFile; + private final transient ConfigHolder config; private final transient IEssentials ess; + private final transient Plugin geoip; - public EssentialsGeoIPPlayerListener(File dataFolder, IEssentials ess) + public EssentialsGeoIPPlayerListener(final Plugin geoip, final IEssentials ess) { + super(); this.ess = ess; - this.dataFolder = dataFolder; - this.config = new EssentialsConf(new File(dataFolder, "config.yml")); - config.setTemplateName("/config.yml", EssentialsGeoIP.class); + this.geoip = geoip; + this.config = new ConfigHolder(ess, geoip); onReload(); } @Override - public void onPlayerJoin(PlayerJoinEvent event) + public void onPlayerJoin(final PlayerJoinEvent event) { - IUser u = ess.getUser(event.getPlayer()); + final IUser u = ess.getUser(event.getPlayer()); if (u.isAuthorized("essentials.geoip.hide")) { return; } - InetAddress address = event.getPlayer().getAddress().getAddress(); - StringBuilder sb = new StringBuilder(); - if (config.getBoolean("database.show-cities", false)) + config.acquireReadLock(); + try { - Location loc = ls.getLocation(address); - if (loc == null) - { - return; - } - if (loc.city != null) + final InetAddress address = event.getPlayer().getAddress().getAddress(); + final StringBuilder builder = new StringBuilder(); + if (config.getData().getDatabase().isShowCities()) { - sb.append(loc.city).append(", "); - } - String region = regionName.regionNameByCode(loc.countryCode, loc.region); - if (region != null) - { - sb.append(region).append(", "); + final Location loc = ls.getLocation(address); + if (loc == null) + { + return; + } + if (loc.city != null) + { + builder.append(loc.city).append(", "); + } + final String region = regionName.regionNameByCode(loc.countryCode, loc.region); + if (region != null) + { + builder.append(region).append(", "); + } + builder.append(loc.countryName); } - sb.append(loc.countryName); - } - else - { - sb.append(ls.getCountry(address).getName()); - } - if (config.getBoolean("show-on-whois", true)) - { - u.acquireWriteLock(); - try + else { - u.getData().setGeolocation(sb.toString()); + builder.append(ls.getCountry(address).getName()); } - finally + if (config.getData().isShowOnWhois()) { - u.unlock(); + u.acquireWriteLock(); + try + { + u.getData().setGeolocation(builder.toString()); + } + finally + { + u.unlock(); + } } - } - if (config.getBoolean("show-on-login", true) && !u.isHidden()) - { - for (Player player : event.getPlayer().getServer().getOnlinePlayers()) + if (config.getData().isShowOnLogin() && !u.isHidden()) { - IUser user = ess.getUser(player); - if (user.isAuthorized("essentials.geoip.show")) + for (Player player : event.getPlayer().getServer().getOnlinePlayers()) { - user.sendMessage(_("geoipJoinFormat", u.getDisplayName(), sb.toString())); + final IUser user = ess.getUser(player); + if (user.isAuthorized("essentials.geoip.show")) + { + user.sendMessage(_("geoipJoinFormat", user.getDisplayName(), builder.toString())); + } } } } + finally + { + config.unlock(); + } } @Override public final void onReload() { - config.load(); - - if (config.getBoolean("database.show-cities", false)) - { - databaseFile = new File(dataFolder, "GeoIPCity.dat"); - } - else - { - databaseFile = new File(dataFolder, "GeoIP.dat"); - } - if (!databaseFile.exists()) + config.onReload(); + config.acquireReadLock(); + try { - if (config.getBoolean("database.download-if-missing", true)) + if (config.getData().getDatabase().isShowCities()) { - downloadDatabase(); + databaseFile = new File(geoip.getDataFolder(), "GeoIPCity.dat"); } else { - logger.log(Level.SEVERE, _("cantFindGeoIpDB")); - return; + databaseFile = new File(geoip.getDataFolder(), "GeoIP.dat"); + } + if (!databaseFile.exists()) + { + if (config.getData().getDatabase().isDownloadIfMissing()) + { + if (config.getData().getDatabase().isShowCities()) + { + downloadDatabase(config.getData().getDatabase().getDownloadUrlCity()); + } + else + { + downloadDatabase(config.getData().getDatabase().getDownloadUrl()); + } + } + else + { + LOGGER.log(Level.SEVERE, _("cantFindGeoIpDB")); + return; + } + } + try + { + ls = new LookupService(databaseFile); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("cantReadGeoIpDB"), ex); } } - try - { - ls = new LookupService(databaseFile); - } - catch (IOException ex) + finally { - logger.log(Level.SEVERE, _("cantReadGeoIpDB"), ex); + config.unlock(); } } - private void downloadDatabase() + private void downloadDatabase(final String url) { + if (url == null || url.isEmpty()) + { + LOGGER.log(Level.SEVERE, _("geoIpUrlEmpty")); + return; + } + InputStream input = null; + OutputStream output = null; try { - String url; - if (config.getBoolean("database.show-cities", false)) - { - url = config.getString("database.download-url-city"); - } - else - { - url = config.getString("database.download-url"); - } - if (url == null || url.isEmpty()) - { - logger.log(Level.SEVERE, _("geoIpUrlEmpty")); - return; - } - logger.log(Level.INFO, _("downloadingGeoIp")); - URL downloadUrl = new URL(url); - URLConnection conn = downloadUrl.openConnection(); + LOGGER.log(Level.INFO, _("downloadingGeoIp")); + final URL downloadUrl = new URL(url); + final URLConnection conn = downloadUrl.openConnection(); conn.setConnectTimeout(10000); conn.connect(); - InputStream input = conn.getInputStream(); + input = conn.getInputStream(); if (url.endsWith(".gz")) { input = new GZIPInputStream(input); } - OutputStream output = new FileOutputStream(databaseFile); - byte[] buffer = new byte[2048]; + output = new FileOutputStream(databaseFile); + final byte[] buffer = new byte[2048]; int length = input.read(buffer); while (length >= 0) { output.write(buffer, 0, length); length = input.read(buffer); } - output.close(); input.close(); + output.close(); } catch (MalformedURLException ex) { - logger.log(Level.SEVERE, _("geoIpUrlInvalid"), ex); - return; + LOGGER.log(Level.SEVERE, _("geoIpUrlInvalid"), ex); } catch (IOException ex) { - logger.log(Level.SEVERE, _("connectionFailed"), ex); + LOGGER.log(Level.SEVERE, _("connectionFailed"), ex); + } + finally + { + if (output != null) + { + try + { + output.close(); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("connectionFailed"), ex); + } + } + if (input != null) + { + try + { + input.close(); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, _("connectionFailed"), ex); + } + } } } } diff --git a/EssentialsXMPP/nbproject/build-impl.xml b/EssentialsXMPP/nbproject/build-impl.xml index 3293bd709..239c397bf 100644 --- a/EssentialsXMPP/nbproject/build-impl.xml +++ b/EssentialsXMPP/nbproject/build-impl.xml @@ -610,6 +610,13 @@ is divided into following sections: + + + + + + + @@ -1063,6 +1070,13 @@ is divided into following sections: + + + + + + + diff --git a/EssentialsXMPP/nbproject/genfiles.properties b/EssentialsXMPP/nbproject/genfiles.properties index ae2a6f962..bb9779474 100644 --- a/EssentialsXMPP/nbproject/genfiles.properties +++ b/EssentialsXMPP/nbproject/genfiles.properties @@ -3,6 +3,6 @@ build.xml.script.CRC32=db2fb22f build.xml.stylesheet.CRC32=28e38971@1.42.1.45 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=1012a5dd -nbproject/build-impl.xml.script.CRC32=8cccbe45 +nbproject/build-impl.xml.data.CRC32=6a299da6 +nbproject/build-impl.xml.script.CRC32=a83e8167 nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46 diff --git a/EssentialsXMPP/nbproject/project.properties b/EssentialsXMPP/nbproject/project.properties index 66d780451..dd7aa95e3 100644 --- a/EssentialsXMPP/nbproject/project.properties +++ b/EssentialsXMPP/nbproject/project.properties @@ -72,7 +72,8 @@ jar.index=${jnlp.enabled} javac.classpath=\ ${reference.Essentials.jar}:\ ${file.reference.smack-3.2.1.jar}:\ - ${file.reference.bukkit.jar} + ${file.reference.bukkit.jar}:\ + ${reference.Essentials2Compat.jar} # Space-separated list of extra javac options javac.compilerargs=-Xlint:unchecked javac.deprecation=false @@ -112,7 +113,9 @@ meta.inf.dir=${src.dir}/META-INF mkdist.disabled=true platform.active=default_platform project.Essentials=../Essentials +project.Essentials2Compat=../Essentials2Compat reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar +reference.Essentials2Compat.jar=${project.Essentials2Compat}/dist/Essentials2Compat.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/EssentialsXMPP/nbproject/project.xml b/EssentialsXMPP/nbproject/project.xml index 5c9eee1dd..e5ee6cd11 100644 --- a/EssentialsXMPP/nbproject/project.xml +++ b/EssentialsXMPP/nbproject/project.xml @@ -23,6 +23,14 @@ clean jar + + Essentials2Compat + jar + + jar + clean + jar + diff --git a/build.xml b/build.xml index 9e022a941..326a0b91e 100644 --- a/build.xml +++ b/build.xml @@ -14,6 +14,7 @@ + -- cgit v1.2.3