From 45f88016fce4d170cac22bbbdc040fdbfe3d14f1 Mon Sep 17 00:00:00 2001 From: okamosy Date: Sun, 21 Aug 2011 02:50:48 +0100 Subject: [PATCH 01/53] Added ability to assign multiple powertools to an item Added option to list commands assigned powertools --- .../essentials/EssentialsPlayerListener.java | 29 +++--- .../essentials/commands/Commandpowertool.java | 92 ++++++++++++++++++- Essentials/src/messages.properties | 9 +- Essentials/src/messages_da.properties | 9 +- Essentials/src/messages_de.properties | 9 +- Essentials/src/messages_en.properties | 9 +- Essentials/src/messages_fr.properties | 9 +- Essentials/src/messages_nl.properties | 9 +- Essentials/src/plugin.yml | 2 +- 9 files changed, 149 insertions(+), 28 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index ff32a9636..1dbc72772 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -435,21 +435,26 @@ public class EssentialsPlayerListener extends PlayerListener { return; } - if (command.matches(".*\\{player\\}.*")) + + // We need to loop through each command and execute + for (String commandPtr : command.split("\\|")) { - //user.sendMessage("Click a player to use this command"); - return; - } - if (command.startsWith("c:")) - { - for (Player p : server.getOnlinePlayers()) + if (commandPtr.matches(".*\\{player\\}.*")) { - p.sendMessage(user.getDisplayName() + ":" + command.substring(2)); + //user.sendMessage("Click a player to use this command"); + continue; + } + else if (commandPtr.startsWith("c:")) + { + for (Player p : server.getOnlinePlayers()) + { + p.sendMessage(user.getDisplayName() + ":" + commandPtr.substring(2)); + } + } + else + { + user.getServer().dispatchCommand(user, commandPtr); } - } - else - { - user.getServer().dispatchCommand(user, command); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index c7bd34705..90f4803ca 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -17,23 +17,109 @@ public class Commandpowertool extends EssentialsCommand @Override protected void run(Server server, User user, String commandLabel, String[] args) throws Exception { - ItemStack is = user.getItemInHand(); if (is == null || is.getType() == Material.AIR) { user.sendMessage(Util.i18n("powerToolAir")); return; } + + String itemName = is.getType().toString().toLowerCase().replaceAll("_", " "); String command = getFinalArg(args, 0); if (command != null && !command.isEmpty()) { - user.sendMessage(Util.format("powerToolAttach",is.getType().toString().toLowerCase().replaceAll("_", " "))); + if (command.equalsIgnoreCase("list")) + { + String powertools = user.getPowertool(is); + if (powertools == null) + { + user.sendMessage(Util.format("powerToolListEmpty", itemName)); + } + else + { + user.sendMessage(Util.format("powerToolList", powertools.replace("|", ", "), itemName)); + } + return; + } + if (command.startsWith("r:")) + { + try + { + String removedCommand = command.substring(2); + command = removePowerTool(user, removedCommand, is, itemName); + user.sendMessage(Util.format("powerToolRemove", removedCommand, itemName)); + } + catch (Exception e) + { + user.sendMessage(e.getMessage()); + return; + } + } + else + { + if (command.startsWith("a:")) + { + try + { + command = appendPowerTool(user, command, is, itemName); + } + catch (Exception e) + { + user.sendMessage(e.getMessage()); + return; + } + } + + user.sendMessage(Util.format("powerToolAttach", command.replace("|", ", "), itemName)); + } } else { - user.sendMessage(Util.format("powerToolRemove", is.getType().toString().toLowerCase().replaceAll("_", " "))); + user.sendMessage(Util.format("powerToolRemoveAll", itemName)); } + charge(user); user.setPowertool(is, command); } + + private String appendPowerTool(User user, String command, ItemStack is, String itemName) throws Exception + { + command = command.substring(2); // Ignore the first 2 chars + String powertools = user.getPowertool(is); + if (powertools != null) + { + if (powertools.contains(command)) + { + throw new Exception((Util.format("powerToolAlreadySet", command, itemName))); + } + + StringBuilder newCommand = new StringBuilder(); + command = newCommand.append(powertools).append("|").append(command).toString(); + } + + return command; + } + + private String removePowerTool(User user, String command, ItemStack is, String itemName) throws Exception + { + String powertools = user.getPowertool(is); + if (!powertools.contains(command)) + { + throw new Exception((Util.format("powerToolNoSuchCommandAssigned", command, itemName))); + } + + command = powertools.replace(command, "").replace("||", "|"); + + // Trim off any leading/trailing '|' chars + if (command.startsWith("|")) + { + command = command.substring(1); + } + if (command.endsWith("|")) + { + command = command.substring(0, command.length() - 1); + } + + return command; + } } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 089d05670..fe4e63459 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77You have been unmuted pong = Pong! possibleWorlds = \u00a77Possible worlds are the numbers 0 through {0}. powerToolAir = Command can''t be attached to air. -powerToolAttach = Command assigned to {0} -powerToolRemove = Command removed from {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 41b34ab0e..cacc9a86b 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77You have been unmuted pong = Pong! possibleWorlds = \u00a77Mulige verdener er numrene 0 igennem {0}. powerToolAir = Kommando kan ikke blive tildelt luft. -powerToolAttach = Kommando tildelt til {0} -powerToolRemove = Kommando fjernet fra {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Beskyttelses ejer: {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index d85cd4350..a4bcea0b2 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77Du bist nicht mehr stumm. pong = Pong! possibleWorlds = \u00a77M\u00f6gliche Welten sind nummeriet von 0 bis {0}. powerToolAir = Befehl kann nicht mit Luft verbunden werden. -powerToolAttach = Befehl verbunden mit {0} -powerToolRemove = Befehl entfernt von {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Besitzer dieses Blocks: {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 4c1ad26d4..0c30aec96 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77You have been unmuted pong = Pong! possibleWorlds = \u00a77Possible worlds are the numbers 0 through {0}. powerToolAir = Command can''t be attached to air. -powerToolAttach = Command assigned to {0} -powerToolRemove = Command removed from {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 0849c78d6..1abae6fbc 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77You have been unmuted pong = Pong! possibleWorlds = \u00a77Les mondes possibles sont les nombres 0 par {0}. powerToolAir = La commande ne peut pas \u00eatre attach\u00e9e \u00e0 l''air. -powerToolAttach = Commande assign\u00e9e \u00e0 {0} -powerToolRemove = Commande enlev\u00e9e \u00e0 {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index a76084a55..dc41e499b 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -225,8 +225,13 @@ playerUnmuted = \u00a77Speler mag weer praten pong = Pong! possibleWorlds = \u00a77Mogelijk zijn de werelden de nummer 0 tot en met {0}. powerToolAir = Command kan niet worden bevestigd aan lucht. -powerToolAttach = Command toegewezen aan {0} -powerToolRemove = Command verwijderd van {0} +powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. +powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. +powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. +powerToolListEmpty = {0} has no commands assigned. +powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. +powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. +powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Beschermingeigenaar: {0} pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 1acef22e8..031accc27 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -204,7 +204,7 @@ commands: aliases: [pong,eping,epong] powertool: description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click. - usage: / [command] + usage: / [a:r:][command] aliases: [pt,epowertool,ept] ptime: description: Adjust player's client time. Add @ prefix to fix. From 43d7fb367b9d16fd7c7efc2ecf002a3bf91fb747 Mon Sep 17 00:00:00 2001 From: okamosy Date: Sun, 21 Aug 2011 17:52:58 +0100 Subject: [PATCH 02/53] converted powertool config to use lists instead of tokenized strings Powertool update --- .../essentials/EssentialsPlayerListener.java | 6 ++-- .../src/com/earth2me/essentials/UserData.java | 32 +++++++++++++++---- .../essentials/commands/Commandpowertool.java | 4 +-- Essentials/src/plugin.yml | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 1dbc72772..7552e96db 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -430,14 +430,14 @@ public class EssentialsPlayerListener extends PlayerListener { return; } - final String command = user.getPowertool(is); - if (command == null || command.isEmpty()) + final List commands = user.getPowertool(is); + if (commands == null || commands.isEmpty()) { return; } // We need to loop through each command and execute - for (String commandPtr : command.split("\\|")) + for (String commandPtr : commands) { if (commandPtr.matches(".*\\{player\\}.*")) { diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 896339642..7cad0de93 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -173,26 +173,46 @@ public abstract class UserData extends PlayerExtension implements IConf config.setProperty("unlimited", unlimited); config.save(); } - private Map powertools; + private Map powertools; @SuppressWarnings("unchecked") - private Map getPowertools() + private Map getPowertools() { Object o = config.getProperty("powertools"); + if (o instanceof Map) { - return (Map)o; + for(Map.Entry entry : ((Map)o).entrySet()) + { + if(entry.getValue() instanceof String) + { + List temp = new ArrayList(); + temp.add((String)entry.getValue()); + ((Map)o).put(entry.getKey(), temp); + } + } + + return (Map)o; } else { - return new HashMap(); + return new HashMap(); } } - public String getPowertool(ItemStack stack) + public List getPowertool(ItemStack stack) { - return powertools.get(stack.getTypeId()); + return (List)powertools.get(stack.getTypeId()); + } + + public List getPowertoolList(ItemStack stack) + { + Map tools = (Map)config.getProperty("powertools"); + List commands; + + commands = (List)tools.get(stack.getTypeId()); + return commands; } public void setPowertool(ItemStack stack, String command) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 90f4803ca..3f56772f4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -30,8 +30,8 @@ public class Commandpowertool extends EssentialsCommand { if (command.equalsIgnoreCase("list")) { - String powertools = user.getPowertool(is); - if (powertools == null) + List powertools = user.getPowertool(is); + if (powertools == null || powertools.empty()) { user.sendMessage(Util.format("powerToolListEmpty", itemName)); } diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 031accc27..d8a772a3a 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -204,7 +204,7 @@ commands: aliases: [pong,eping,epong] powertool: description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click. - usage: / [a:r:][command] + usage: / [list|a:|r:][command] aliases: [pt,epowertool,ept] ptime: description: Adjust player's client time. Add @ prefix to fix. From 812a3573619047a368ad55932f3af18607d0be08 Mon Sep 17 00:00:00 2001 From: okamosy Date: Sun, 21 Aug 2011 19:02:01 +0100 Subject: [PATCH 03/53] added config upgrade for powertools --- .../essentials/EssentialsEntityListener.java | 14 +++-- .../essentials/EssentialsPlayerListener.java | 14 ++--- .../essentials/EssentialsUpgrade.java | 56 +++++++++++++++++++ .../src/com/earth2me/essentials/UserData.java | 10 ---- .../essentials/commands/Commandpowertool.java | 12 ++-- 5 files changed, 79 insertions(+), 27 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 0d4759c64..3e53e3eea 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import java.util.List; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -35,12 +36,15 @@ public class EssentialsEntityListener extends EntityListener User defender = ess.getUser(eDefend); User attacker = ess.getUser(eAttack); ItemStack is = attacker.getItemInHand(); - String command = attacker.getPowertool(is); - if (command != null && !command.isEmpty()) + List commandList = attacker.getPowertool(is); + for(String command : commandList) { - attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName())); - event.setCancelled(true); - return; + if (command != null && !command.isEmpty()) + { + attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName())); + event.setCancelled(true); + return; + } } } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 7552e96db..5830c5875 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -430,30 +430,30 @@ public class EssentialsPlayerListener extends PlayerListener { return; } - final List commands = user.getPowertool(is); - if (commands == null || commands.isEmpty()) + final List commandList = user.getPowertool(is); + if (commandList == null || commandList.isEmpty()) { return; } // We need to loop through each command and execute - for (String commandPtr : commands) + for (String command : commandList) { - if (commandPtr.matches(".*\\{player\\}.*")) + if (command.matches(".*\\{player\\}.*")) { //user.sendMessage("Click a player to use this command"); continue; } - else if (commandPtr.startsWith("c:")) + else if (command.startsWith("c:")) { for (Player p : server.getOnlinePlayers()) { - p.sendMessage(user.getDisplayName() + ":" + commandPtr.substring(2)); + p.sendMessage(user.getDisplayName() + ":" + command.substring(2)); } } else { - user.getServer().dispatchCommand(user, commandPtr); + user.getServer().dispatchCommand(user, command); } } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index c6c7effd8..2ebc73c75 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -5,7 +5,9 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Location; @@ -197,6 +199,59 @@ public class EssentialsUpgrade 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 moveUsersDataToUserdataFolder() { final File usersFile = new File(ess.getDataFolder(), "users.yml"); @@ -457,5 +512,6 @@ public class EssentialsUpgrade updateUsersToNewDefaultHome(); moveUsersDataToUserdataFolder(); convertWarps(); + updateUsersPowerToolsFormat(); } } diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 7cad0de93..c90afb6d8 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -182,16 +182,6 @@ public abstract class UserData extends PlayerExtension implements IConf if (o instanceof Map) { - for(Map.Entry entry : ((Map)o).entrySet()) - { - if(entry.getValue() instanceof String) - { - List temp = new ArrayList(); - temp.add((String)entry.getValue()); - ((Map)o).put(entry.getKey(), temp); - } - } - return (Map)o; } else diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 3f56772f4..a96c78db4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -2,6 +2,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import java.util.List; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; @@ -31,13 +32,13 @@ public class Commandpowertool extends EssentialsCommand if (command.equalsIgnoreCase("list")) { List powertools = user.getPowertool(is); - if (powertools == null || powertools.empty()) + if (powertools == null || powertools.isEmpty()) { user.sendMessage(Util.format("powerToolListEmpty", itemName)); } else { - user.sendMessage(Util.format("powerToolList", powertools.replace("|", ", "), itemName)); + user.sendMessage(Util.format("powerToolList", powertools.toString(), itemName)); } return; } @@ -85,7 +86,7 @@ public class Commandpowertool extends EssentialsCommand private String appendPowerTool(User user, String command, ItemStack is, String itemName) throws Exception { command = command.substring(2); // Ignore the first 2 chars - String powertools = user.getPowertool(is); + /*String powertools = user.getPowertool(is); if (powertools != null) { if (powertools.contains(command)) @@ -96,12 +97,13 @@ public class Commandpowertool extends EssentialsCommand StringBuilder newCommand = new StringBuilder(); command = newCommand.append(powertools).append("|").append(command).toString(); } - +*/ return command; } private String removePowerTool(User user, String command, ItemStack is, String itemName) throws Exception { + /* String powertools = user.getPowertool(is); if (!powertools.contains(command)) { @@ -119,7 +121,7 @@ public class Commandpowertool extends EssentialsCommand { command = command.substring(0, command.length() - 1); } - +*/ return command; } } From e10675dfdc6ca17c42ebd63af107a8974506ead1 Mon Sep 17 00:00:00 2001 From: okamosy Date: Sun, 21 Aug 2011 19:33:37 +0100 Subject: [PATCH 04/53] Completed changing powertool config from tokenized string to lists --- .../src/com/earth2me/essentials/UserData.java | 15 ++------ .../essentials/commands/Commandpowertool.java | 38 +++++++++++++------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index c90afb6d8..b72f105ee 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -196,24 +196,15 @@ public abstract class UserData extends PlayerExtension implements IConf return (List)powertools.get(stack.getTypeId()); } - public List getPowertoolList(ItemStack stack) + public void setPowertool(ItemStack stack, List commandList) { - Map tools = (Map)config.getProperty("powertools"); - List commands; - - commands = (List)tools.get(stack.getTypeId()); - return commands; - } - - public void setPowertool(ItemStack stack, String command) - { - if (command == null || command.isEmpty()) + if (commandList == null || commandList.isEmpty()) { powertools.remove(stack.getTypeId()); } else { - powertools.put(stack.getTypeId(), command); + powertools.put(stack.getTypeId(), commandList); } config.setProperty("powertools", powertools); config.save(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index a96c78db4..c1450046a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -2,6 +2,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import java.util.ArrayList; import java.util.List; import org.bukkit.Material; import org.bukkit.Server; @@ -19,6 +20,7 @@ public class Commandpowertool extends EssentialsCommand protected void run(Server server, User user, String commandLabel, String[] args) throws Exception { ItemStack is = user.getItemInHand(); + List powertools = user.getPowertool(is); if (is == null || is.getType() == Material.AIR) { user.sendMessage(Util.i18n("powerToolAir")); @@ -31,7 +33,6 @@ public class Commandpowertool extends EssentialsCommand { if (command.equalsIgnoreCase("list")) { - List powertools = user.getPowertool(is); if (powertools == null || powertools.isEmpty()) { user.sendMessage(Util.format("powerToolListEmpty", itemName)); @@ -46,9 +47,15 @@ public class Commandpowertool extends EssentialsCommand { try { - String removedCommand = command.substring(2); - command = removePowerTool(user, removedCommand, is, itemName); - user.sendMessage(Util.format("powerToolRemove", removedCommand, itemName)); + command = command.substring(2); + if (!powertools.contains(command)) + { + user.sendMessage(Util.format("powerToolNoSuchCommandAssigned", command, itemName)); + return; + } + + powertools.remove(command); + user.sendMessage(Util.format("powerToolRemove", command, itemName)); } catch (Exception e) { @@ -60,18 +67,25 @@ public class Commandpowertool extends EssentialsCommand { if (command.startsWith("a:")) { - try + command = command.substring(2); + if(powertools.contains(command)) { - command = appendPowerTool(user, command, is, itemName); - } - catch (Exception e) - { - user.sendMessage(e.getMessage()); + user.sendMessage(Util.format("powerToolAlreadySet", command, itemName)); return; } } + else if (powertools != null && !powertools.isEmpty()) + { + // Replace all commands with this one + powertools.clear(); + } + else + { + powertools = new ArrayList(); + } - user.sendMessage(Util.format("powerToolAttach", command.replace("|", ", "), itemName)); + powertools.add(command); + user.sendMessage(Util.format("powerToolAttach", powertools.toString(), itemName)); } } else @@ -80,7 +94,7 @@ public class Commandpowertool extends EssentialsCommand } charge(user); - user.setPowertool(is, command); + user.setPowertool(is, powertools); } private String appendPowerTool(User user, String command, ItemStack is, String itemName) throws Exception From c0d21b6044724de6f22f8924fa129a640e505faf Mon Sep 17 00:00:00 2001 From: okamosy Date: Sun, 21 Aug 2011 20:06:25 +0100 Subject: [PATCH 05/53] Removed commented-out code --- .../essentials/commands/Commandpowertool.java | 42 ------------------- 1 file changed, 42 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index c1450046a..bc1ccd801 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -96,46 +96,4 @@ public class Commandpowertool extends EssentialsCommand charge(user); user.setPowertool(is, powertools); } - - private String appendPowerTool(User user, String command, ItemStack is, String itemName) throws Exception - { - command = command.substring(2); // Ignore the first 2 chars - /*String powertools = user.getPowertool(is); - if (powertools != null) - { - if (powertools.contains(command)) - { - throw new Exception((Util.format("powerToolAlreadySet", command, itemName))); - } - - StringBuilder newCommand = new StringBuilder(); - command = newCommand.append(powertools).append("|").append(command).toString(); - } -*/ - return command; - } - - private String removePowerTool(User user, String command, ItemStack is, String itemName) throws Exception - { - /* - String powertools = user.getPowertool(is); - if (!powertools.contains(command)) - { - throw new Exception((Util.format("powerToolNoSuchCommandAssigned", command, itemName))); - } - - command = powertools.replace(command, "").replace("||", "|"); - - // Trim off any leading/trailing '|' chars - if (command.startsWith("|")) - { - command = command.substring(1); - } - if (command.endsWith("|")) - { - command = command.substring(0, command.length() - 1); - } -*/ - return command; - } } From 91393e3180c01ae2e3db5501d583e5aa26d79058 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 23 Aug 2011 01:28:01 +0200 Subject: [PATCH 06/53] Show filename on yaml error --- Essentials/src/com/earth2me/essentials/EssentialsConf.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index eaf23b773..82d4876f5 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -68,7 +68,12 @@ public class EssentialsConf extends Configuration } } } - super.load(); + try { + super.load(); + } catch(RuntimeException e) { + logger.log(Level.INFO, "File: " + configFile.toString()); + throw e; + } if (this.root == null) { this.root = new HashMap(); From 90419cdbf5c39548f516bc36ef2410968d927356 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 23 Aug 2011 02:46:19 +0200 Subject: [PATCH 07/53] Update check for Essentials --- .../com/earth2me/essentials/Essentials.java | 4 +- .../essentials/EssentialsUpdateTimer.java | 72 +++++++++++-------- .../com/earth2me/essentials/ISettings.java | 6 +- .../src/com/earth2me/essentials/Settings.java | 6 ++ Essentials/src/config.yml | 3 + 5 files changed, 59 insertions(+), 32 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 56693632e..b74b2b5c4 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -209,10 +209,10 @@ public class Essentials extends JavaPlugin implements IEssentials final EssentialsTimer timer = new EssentialsTimer(this); getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 50); Economy.setEss(this); - if (enableErrorLogging) + if (getSettings().isUpdateEnabled()) { updateTimer = new EssentialsUpdateTimer(this); - getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 50, 50 * 60 * (this.getDescription().getVersion().startsWith("Dev") ? 60 : 360)); + getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 20 * 60, 20 * 3600 * 6); } LOGGER.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Util.joinList(this.getDescription().getAuthors()))); } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpdateTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsUpdateTimer.java index f00f644cd..6f7579d4e 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpdateTimer.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpdateTimer.java @@ -4,65 +4,81 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; -import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.bukkit.entity.Player; class EssentialsUpdateTimer implements Runnable { - private URL url; - private final Essentials ess; - private static final Logger logger = Logger.getLogger("Minecraft"); - - public EssentialsUpdateTimer(Essentials ess) + private transient URL url; + private final transient IEssentials ess; + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private final transient Pattern pattern = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-[0-9]+-[0-9a-z]+-b([0-9]+)jnks.*"); + + public EssentialsUpdateTimer(final IEssentials ess) { this.ess = ess; try { - url = new URL("http://127.0.0.1:8080/check"); + url = new URL("http://essentialsupdate.appspot.com/check"); } catch (MalformedURLException ex) { - logger.log(Level.SEVERE, "Invalid url!", ex); + LOGGER.log(Level.SEVERE, "Invalid url!", ex); } } + @Override public void run() { try { - StringBuilder sb = new StringBuilder(); - sb.append("v=").append(URLEncoder.encode(ess.getDescription().getVersion(),"UTF-8")); - sb.append("&b=").append(URLEncoder.encode(ess.getServer().getVersion(),"UTF-8")); - sb.append("&jv=").append(URLEncoder.encode(System.getProperty("java.version"),"UTF-8")); - sb.append("&l=").append(URLEncoder.encode(Util.getCurrentLocale().toString(),"UTF-8")); - sb.append("&on=").append(URLEncoder.encode(System.getProperty("os.name"),"UTF-8")); - sb.append("&ov=").append(URLEncoder.encode(System.getProperty("os.version"),"UTF-8")); - for (BigInteger bigInteger : ess.getErrors().keySet()) + final StringBuilder builder = new StringBuilder(); + String bukkitVersion = ess.getServer().getVersion(); + final Matcher versionMatch = pattern.matcher(bukkitVersion); + if (versionMatch.matches()) { - sb.append("&e[]=").append(bigInteger.toString(36)); + bukkitVersion = versionMatch.group(4); } - URLConnection conn = url.openConnection(); + builder.append("v=").append(URLEncoder.encode(ess.getDescription().getVersion(), "UTF-8")); + builder.append("&b=").append(URLEncoder.encode(bukkitVersion, "UTF-8")); + final URLConnection conn = url.openConnection(); conn.setConnectTimeout(10000); conn.setDoOutput(true); conn.connect(); - OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); - wr.write(sb.toString()); - wr.flush(); - BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); - String ret = br.readLine(); - wr.close(); - br.close(); - logger.log(Level.INFO, ret); + final OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); + writer.write(builder.toString()); + writer.flush(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + final String ret = reader.readLine(); + writer.close(); + reader.close(); + if (!ret.isEmpty() && !ret.equalsIgnoreCase("OK")) + { + LOGGER.log(Level.INFO, "Essentials Update-Check: " + ret); + if (ret.startsWith("New Version")) + { + for (Player player : ess.getServer().getOnlinePlayers()) + { + final User user = ess.getUser(player); + if (user.isAuthorized("essentials.admin.notices.update")) + { + user.sendMessage(ret); + } + } + } + } } catch (IOException ex) { - logger.log(Level.SEVERE, "Failed to open connection", ex); + LOGGER.log(Level.SEVERE, "Failed to open connection", ex); } - } + } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 13717f469..566218e95 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -129,7 +129,9 @@ public interface ISettings extends IConf boolean isPlayerCommand(String string); - public boolean useBukkitPermissions(); + boolean useBukkitPermissions(); - public boolean addPrefixSuffix(); + boolean addPrefixSuffix(); + + boolean isUpdateEnabled(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 1700dec3a..b6e1f3758 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -473,4 +473,10 @@ public class Settings implements ISettings { return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat")); } + + @Override + public boolean isUpdateEnabled() + { + return config.getBoolean("update-check", true); + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 5e3f581b8..1c9d73f5f 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -230,6 +230,9 @@ remove-god-on-disconnect: false # This only works if no other permission plugins are installed use-bukkit-permissions: false +# Check for updates +update-check: true + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # From 0592c1fe11de349800c34a566d70f7b1c88956fb Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 03:42:32 +0100 Subject: [PATCH 08/53] Added multiple homes. Permissions currently: essentials.sethome.multiple and essentials.sethome.multiple.unlimited New config setting: multiple-homes (default value 5) --- .../essentials/EssentialsUpgrade.java | 5 +- .../com/earth2me/essentials/ISettings.java | 2 + .../src/com/earth2me/essentials/IUser.java | 4 +- .../src/com/earth2me/essentials/Settings.java | 6 + .../src/com/earth2me/essentials/Teleport.java | 30 +++-- .../src/com/earth2me/essentials/User.java | 104 +++++++++--------- .../src/com/earth2me/essentials/UserData.java | 100 ++++++++++------- .../essentials/commands/Commandhome.java | 52 +++++++-- .../essentials/commands/Commandsethome.java | 15 ++- Essentials/src/config.yml | 4 + 10 files changed, 206 insertions(+), 116 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index 2ebc73c75..25bf6291d 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -287,12 +287,12 @@ public class EssentialsUpgrade } if (world != null) { - user.setHome(new Location(world, + 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()), true); + ((Number)vals.get(4)).floatValue())); } } } @@ -513,5 +513,6 @@ public class EssentialsUpgrade moveUsersDataToUserdataFolder(); convertWarps(); updateUsersPowerToolsFormat(); + //TODO: Convert 2.5.7 homes to new format } } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 13717f469..cf8301d2a 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -72,6 +72,8 @@ public interface ISettings extends IConf boolean getReclaimSetting(); boolean getRespawnAtHome(); + + int getMultipleHomes(); boolean getSortListByGroups(); diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index 5b2e7075e..0f470a7ab 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -45,7 +45,9 @@ public interface IUser void setLastLocation(); - Location getHome(Location location); + Location getHome(String name); + + Location getHome(Location loc); String getName(); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 1700dec3a..03b810c90 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -30,6 +30,12 @@ public class Settings implements ISettings { return config.getBoolean("respawn-at-home", false); } + + @Override + public int getMultipleHomes() + { + return config.getInt("multiple-homes", 5); + } @Override public boolean getBedSetsHome() diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java index 9fb9b7433..badc0e267 100644 --- a/Essentials/src/com/earth2me/essentials/Teleport.java +++ b/Essentials/src/com/earth2me/essentials/Teleport.java @@ -10,6 +10,8 @@ import org.bukkit.entity.Entity; public class Teleport implements Runnable { private static final double MOVE_CONSTANT = 0.3; + + private static class Target { private final Location location; @@ -57,9 +59,9 @@ public class Teleport implements Runnable this.started = System.currentTimeMillis(); this.delay = delay; this.health = user.getHealth(); - this.initX = Math.round(user.getLocation().getX()*MOVE_CONSTANT); - this.initY = Math.round(user.getLocation().getY()*MOVE_CONSTANT); - this.initZ = Math.round(user.getLocation().getZ()*MOVE_CONSTANT); + this.initX = Math.round(user.getLocation().getX() * MOVE_CONSTANT); + this.initY = Math.round(user.getLocation().getY() * MOVE_CONSTANT); + this.initZ = Math.round(user.getLocation().getZ() * MOVE_CONSTANT); this.teleportTarget = target; this.chargeFor = chargeFor; } @@ -72,9 +74,9 @@ public class Teleport implements Runnable cancel(); return; } - if (Math.round(user.getLocation().getX()*MOVE_CONSTANT) != initX - || Math.round(user.getLocation().getY()*MOVE_CONSTANT) != initY - || Math.round(user.getLocation().getZ()*MOVE_CONSTANT) != initZ + if (Math.round(user.getLocation().getX() * MOVE_CONSTANT) != initX + || Math.round(user.getLocation().getY() * MOVE_CONSTANT) != initY + || Math.round(user.getLocation().getZ() * MOVE_CONSTANT) != initZ || user.getHealth() < health) { // user moved, cancel teleport cancel(true); @@ -92,7 +94,7 @@ public class Teleport implements Runnable user.sendMessage(Util.i18n("teleportationCommencing")); try { - + now(teleportTarget); if (chargeFor != null) { @@ -229,7 +231,7 @@ public class Teleport implements Runnable cooldown(false); now(new Target(loc)); } - + public void now(Location loc, Trade chargeFor) throws Exception { cooldown(false); @@ -261,9 +263,19 @@ public class Teleport implements Runnable home(user, chargeFor); } + public void home(String home, Trade chargeFor) throws Exception + { + home(user, home, chargeFor); + } + public void home(IUser user, Trade chargeFor) throws Exception { - Location loc = user.getHome(this.user.getLocation()); + home(user, "0", chargeFor); + } + + public void home(IUser user, String home, Trade chargeFor) throws Exception + { + final Location loc = user.getHome(home); if (loc == null) { if (ess.getSettings().spawnIfNoHome()) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 6c18c03ae..f8f7d7afa 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -6,6 +6,7 @@ import java.util.Calendar; import java.util.GregorianCalendar; import java.util.logging.Logger; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,44 +21,44 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private final Teleport teleport; private long lastActivity; private boolean hidden = false; - + User(Player base, IEssentials ess) { super(base, ess); teleport = new Teleport(this, ess); } - + User update(Player base) { setBase(base); return this; } - + public boolean isAuthorized(IEssentialsCommand cmd) { return isAuthorized(cmd, "essentials."); } - + public boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix) { return isAuthorized(permissionPrefix + (cmd.getName().equals("r") ? "msg" : cmd.getName())); } - + public boolean isAuthorized(String node) { if (isOp()) { return true; } - + if (isJailed()) { return false; } - + return ess.getPermissionsHandler().hasPermission(this, node); } - + public void healCooldown() throws Exception { Calendar now = new GregorianCalendar(); @@ -75,12 +76,12 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } setLastHealTimestamp(now.getTimeInMillis()); } - + public void giveMoney(double value) { giveMoney(value, null); } - + public void giveMoney(double value, CommandSender initiator) { if (value == 0) @@ -94,7 +95,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser initiator.sendMessage((Util.format("addedToOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName()))); } } - + public void payUser(User reciever, double value) throws Exception { if (value == 0) @@ -113,12 +114,12 @@ public class User extends UserData implements Comparable, IReplyTo, IUser reciever.sendMessage(Util.format("moneyRecievedFrom", Util.formatCurrency(value, ess), getDisplayName())); } } - + public void takeMoney(double value) { takeMoney(value, null); } - + public void takeMoney(double value, CommandSender initiator) { if (value == 0) @@ -132,43 +133,43 @@ public class User extends UserData implements Comparable, IReplyTo, IUser initiator.sendMessage((Util.format("takenFromOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName()))); } } - + public boolean canAfford(double cost) { double mon = getMoney(); return mon >= cost || isAuthorized("essentials.eco.loan"); } - + public void dispose() { this.base = new OfflinePlayer(getName(), ess); } - + public boolean getJustPortaled() { return justPortaled; } - + public void setJustPortaled(boolean value) { justPortaled = value; } - + public void setReplyTo(CommandSender user) { replyTo = user; } - + public CommandSender getReplyTo() { return replyTo; } - + public int compareTo(User t) { return ChatColor.stripColor(this.getDisplayName()).compareToIgnoreCase(ChatColor.stripColor(t.getDisplayName())); } - + @Override public boolean equals(Object o) { @@ -177,51 +178,56 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return false; } return ChatColor.stripColor(this.getDisplayName()).equalsIgnoreCase(ChatColor.stripColor(((User)o).getDisplayName())); - + } - + @Override public int hashCode() { return ChatColor.stripColor(this.getDisplayName()).hashCode(); } - + public Boolean canSpawnItem(int itemId) { return !ess.getSettings().itemSpawnBlacklist().contains(itemId); } - + + public Location getHome() + { + return getHome(getHomes().get(0)); + } + public void setHome() { - setHome(getLocation(), true); + setHome("home", getLocation()); } - - public void setHome(boolean defaultHome) + + public void setHome(String name) { - setHome(getLocation(), defaultHome); + setHome(name, getLocation()); } - + public void setLastLocation() { setLastLocation(getLocation()); } - + public void requestTeleport(User player, boolean here) { teleportRequester = player; teleportRequestHere = here; } - + public User getTeleportRequest() { return teleportRequester; } - + public boolean isTeleportRequestHere() { return teleportRequestHere; } - + public String getNick() { final StringBuilder nickname = new StringBuilder(); @@ -245,12 +251,12 @@ public class User extends UserData implements Comparable, IReplyTo, IUser { } } - + if (ess.getSettings().addPrefixSuffix()) { final String prefix = ess.getPermissionsHandler().getPrefix(this).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); final String suffix = ess.getPermissionsHandler().getSuffix(this).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); - + nickname.insert(0, prefix); nickname.append(suffix); if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§")) @@ -258,25 +264,25 @@ public class User extends UserData implements Comparable, IReplyTo, IUser nickname.append("§f"); } } - + return nickname.toString(); } - + public Teleport getTeleport() { return teleport; } - + public long getLastActivity() { return lastActivity; } - + public void setLastActivity(long timestamp) { lastActivity = timestamp; } - + @Override public double getMoney() { @@ -298,7 +304,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } return super.getMoney(); } - + @Override public void setMoney(double value) { @@ -320,14 +326,14 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } super.setMoney(value); } - + @Override public void setAfk(boolean set) { this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set); super.setAfk(set); } - + @Override public boolean toggleAfk() { @@ -335,17 +341,17 @@ public class User extends UserData implements Comparable, IReplyTo, IUser this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now); return now; } - + public boolean isHidden() { return hidden; } - + public void setHidden(boolean hidden) { this.hidden = hidden; } - + public void checkJailTimeout(final long currentTime) { if (getJailTimeout() > 0 && getJailTimeout() < currentTime && isJailed()) @@ -363,7 +369,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } } } - + public void checkMuteTimeout(final long currentTime) { if (getMuteTimeout() > 0 && getMuteTimeout() < currentTime && isMuted()) @@ -373,7 +379,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser setMuted(false); } } - + public void checkBanTimeout(final long currentTime) { if (getBanTimeout() > 0 && getBanTimeout() < currentTime && ess.getBans().isNameBanned(getName())) diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index b72f105ee..1467f496d 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -5,11 +5,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; 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.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -36,7 +34,8 @@ public abstract class UserData extends PlayerExtension implements IConf config.load(); money = _getMoney(); unlimited = _getUnlimited(); - powertools = getPowertools(); + powertools = _getPowertools(); + homes = _getHomes(); lastLocation = _getLastLocation(); lastTeleportTimestamp = _getLastTeleportTimestamp(); lastHealTimestamp = _getLastHealTimestamp(); @@ -89,6 +88,63 @@ public abstract class UserData extends PlayerExtension implements IConf 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) + { + Location loc = (Location)homes.get(name); + if (loc == null) + { + loc = (Location)homes.get(getHomes().get(Integer.parseInt(name) - 1)); + } + + return loc; + } + + public Location getHome(Location world) + { + Location loc; + for (String home : getHomes()) + { + loc = (Location)homes.get(home); + if (world.getWorld() == loc.getWorld()) + { + return loc; + } + + } + loc = (Location)homes.get(getHomes().get(0)); + return loc; + } + + public List getHomes() + { + List list = new ArrayList(homes.keySet()); + return list; + + } + + public void setHome(String name, Location loc) + { + homes.put(name, loc); + config.setProperty("homes." + name, loc); + config.save(); + } public boolean hasHome() { @@ -99,40 +155,6 @@ public abstract class UserData extends PlayerExtension implements IConf return false; } - public Location getHome(Location location) - { - if (!hasHome()) - { - return null; - } - World world = location.getWorld(); - String worldHome = "home.worlds." + world.getName().toLowerCase(); - if (!config.hasProperty(worldHome)) - { - String defaultWorld = config.getString("home.default"); - worldHome = "home.worlds." + defaultWorld; - } - Location loc = config.getLocation(worldHome, getServer()); - return loc; - } - - public void setHome(Location loc, boolean b) - { - String worldName = loc.getWorld().getName().toLowerCase(); - if (worldName == null || worldName.isEmpty()) - { - logger.log(Level.WARNING, Util.i18n("emptyWorldName")); - return; - } - if (b || !config.hasProperty("home.default")) - { - config.setProperty("home.default", worldName); - } - - config.setProperty("home.worlds." + worldName, loc); - config.save(); - } - public String getNickname() { return config.getString("nickname"); @@ -176,10 +198,10 @@ public abstract class UserData extends PlayerExtension implements IConf private Map powertools; @SuppressWarnings("unchecked") - private Map getPowertools() + private Map _getPowertools() { Object o = config.getProperty("powertools"); - + if (o instanceof Map) { return (Map)o; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index 2649a9cb0..cb7ba57ae 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.Trade; import org.bukkit.Server; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import java.util.List; public class Commandhome extends EssentialsCommand @@ -18,24 +19,51 @@ public class Commandhome extends EssentialsCommand { Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); - if(args.length > 0 && user.isAuthorized("essentials.home.others")) + if (args.length == 0) + { + List homes = user.getHomes(); + if (homes.isEmpty()) + { + throw new Exception(Util.i18n("noHomeSet")); + } + else if (homes.size() == 1) + { + user.getTeleport().home(homes.get(0), charge); + } + else + { + //TODO: move to messages file + user.sendMessage("Homes: " + homes.toString()); + } + + } + else { User u; - try + String homeName; + String[] nameParts = args[0].split(":"); + if (nameParts.length == 1) { - u = getPlayer(server, args, 0); + u = user; + homeName = nameParts[0]; } - catch(NoSuchFieldException ex) + else { - u = ess.getOfflineUser(args[0]); + try + { + u = getPlayer(server, args, 0); + } + catch (NoSuchFieldException ex) + { + u = ess.getOfflineUser(args[0]); + } + if (u == null) + { + throw new Exception(Util.i18n("playerNotFound")); + } + homeName = nameParts[1]; } - if (u == null) - { - throw new Exception(Util.i18n("playerNotFound")); - } - user.getTeleport().home(u, charge); - return; + user.getTeleport().home(u, homeName, charge); } - user.getTeleport().home(charge); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 154017d43..bb0d136c5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -19,14 +19,21 @@ public class Commandsethome extends EssentialsCommand { if (args.length < 2) { - user.setHome(args[0].equalsIgnoreCase("default")); + if (user.isAuthorized("essentials.sethome.multiple")) + { + if (user.isAuthorized("essentials.sethome.multiple.unlimited") || user.getHomes().size() <= ess.getSettings().getMultipleHomes()) + { + user.setHome(args[0]); + } + + } } else { if (user.isAuthorized("essentials.sethome.others")) { User usersHome = ess.getUser(ess.getServer().getPlayer(args[0])); - if(usersHome == null) + if (usersHome == null) { usersHome = ess.getOfflineUser(args[0]); } @@ -34,13 +41,13 @@ public class Commandsethome extends EssentialsCommand { throw new Exception(Util.i18n("playerNotFound")); } - usersHome.setHome(user.getLocation(), args[1].equalsIgnoreCase("default")); + usersHome.setHome(args[1], user.getLocation()); } } } else { - user.setHome(false); + user.setHome(); } charge(user); user.sendMessage(Util.i18n("homeSet")); diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 5e3f581b8..885d16047 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -246,6 +246,10 @@ bed-sethome: false #if no home is set send you to spawn when /home is used spawn-if-no-home: false +# If users have essentials.sethome.multiple how many homes can they have +# People with essentials.sethome.multiple.unlimited are not limited by this number +multiple-homes: 5 + ############################################################ # +------------------------------------------------------+ # From 6ee70176034ca9c96cfef551effcd562ddba1df2 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 06:09:34 +0100 Subject: [PATCH 09/53] Adding Home upgrade script. Tidying up home code. --- .../essentials/EssentialsUpgrade.java | 84 +++++++++++++++++-- .../src/com/earth2me/essentials/IUser.java | 4 +- .../src/com/earth2me/essentials/Teleport.java | 18 +--- .../src/com/earth2me/essentials/User.java | 1 + .../src/com/earth2me/essentials/UserData.java | 20 ++++- .../essentials/commands/Commandhome.java | 63 +++++++------- Essentials/src/messages.properties | 2 +- Essentials/src/messages_da.properties | 2 +- Essentials/src/messages_de.properties | 2 +- Essentials/src/messages_en.properties | 2 +- Essentials/src/messages_fr.properties | 2 +- Essentials/src/messages_nl.properties | 2 +- 12 files changed, 133 insertions(+), 69 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index 25bf6291d..c5d590e14 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -252,6 +252,78 @@ public class EssentialsUpgrade 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 = config.getLocation("home.worlds." + defworld, ess.getServer()); + + String worldName = defloc.getWorld().getName().toLowerCase(); + config.setProperty("homes.home", defloc); + + List worlds = config.getKeys("home.worlds"); + Location loc; + + if (worlds == null) + { + continue; + } + for (String world : worlds) + { + if (defworld.equalsIgnoreCase(world)) + { + continue; + } + loc = config.getLocation("home.worlds." + world, ess.getServer()); + if (loc == null) + { + continue; + } + worldName = loc.getWorld().getName().toLowerCase(); + 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"); @@ -288,11 +360,11 @@ public class EssentialsUpgrade 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())); + ((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())); } } } @@ -513,6 +585,6 @@ public class EssentialsUpgrade moveUsersDataToUserdataFolder(); convertWarps(); updateUsersPowerToolsFormat(); - //TODO: Convert 2.5.7 homes to new format + updateUsersHomesFormat(); } } diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index 0f470a7ab..c48d5d772 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -22,7 +22,7 @@ public interface IUser boolean isAuthorized(String node); boolean isAuthorized(IEssentialsCommand cmd); - + boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix); void setLastTeleportTimestamp(long time); @@ -46,7 +46,7 @@ public interface IUser void setLastLocation(); Location getHome(String name); - + Location getHome(Location loc); String getName(); diff --git a/Essentials/src/com/earth2me/essentials/Teleport.java b/Essentials/src/com/earth2me/essentials/Teleport.java index badc0e267..14574b83c 100644 --- a/Essentials/src/com/earth2me/essentials/Teleport.java +++ b/Essentials/src/com/earth2me/essentials/Teleport.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.commands.NotEnoughArgumentsException; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.logging.Logger; @@ -258,21 +259,6 @@ public class Teleport implements Runnable back(null); } - public void home(Trade chargeFor) throws Exception - { - home(user, chargeFor); - } - - public void home(String home, Trade chargeFor) throws Exception - { - home(user, home, chargeFor); - } - - public void home(IUser user, Trade chargeFor) throws Exception - { - home(user, "0", chargeFor); - } - public void home(IUser user, String home, Trade chargeFor) throws Exception { final Location loc = user.getHome(home); @@ -284,7 +270,7 @@ public class Teleport implements Runnable } else { - throw new Exception(user == this.user ? Util.i18n("noHomeSet") : Util.i18n("noHomeSetPlayer")); + throw new NotEnoughArgumentsException(); } } teleport(new Target(loc), chargeFor); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index f8f7d7afa..3a14bca8b 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.commands.IEssentialsCommand; +import com.earth2me.essentials.commands.NotEnoughArgumentsException; import com.earth2me.essentials.register.payment.Method; import java.util.Calendar; import java.util.GregorianCalendar; diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 1467f496d..80f23cc05 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.commands.NotEnoughArgumentsException; import java.io.File; import java.util.ArrayList; import java.util.HashMap; @@ -107,10 +108,21 @@ public abstract class UserData extends PlayerExtension implements IConf public Location getHome(String name) { - Location loc = (Location)homes.get(name); + Location loc = config.getLocation("homes." + name, getServer()); if (loc == null) { - loc = (Location)homes.get(getHomes().get(Integer.parseInt(name) - 1)); + try + { + loc = config.getLocation("homes." + getHomes().get(Integer.parseInt(name) - 1), getServer()); + } + catch (IndexOutOfBoundsException e) + { + return null; + } + catch (NumberFormatException e) + { + return null; + } } return loc; @@ -121,14 +133,14 @@ public abstract class UserData extends PlayerExtension implements IConf Location loc; for (String home : getHomes()) { - loc = (Location)homes.get(home); + loc = config.getLocation("homes." + home, getServer()); if (world.getWorld() == loc.getWorld()) { return loc; } } - loc = (Location)homes.get(getHomes().get(0)); + loc = config.getLocation("homes." + getHomes().get(0), getServer()); return loc; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index cb7ba57ae..b06dec10b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -19,51 +19,44 @@ public class Commandhome extends EssentialsCommand { Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); - if (args.length == 0) + User u = user; + String homeName = ""; + String[] nameParts; + if (args.length > 0) { - List homes = user.getHomes(); - if (homes.isEmpty()) + nameParts = args[0].split(":"); + if (nameParts[0].length() == args[0].length()) { - throw new Exception(Util.i18n("noHomeSet")); - } - else if (homes.size() == 1) - { - user.getTeleport().home(homes.get(0), charge); - } - else - { - //TODO: move to messages file - user.sendMessage("Homes: " + homes.toString()); - } - - } - else - { - User u; - String homeName; - String[] nameParts = args[0].split(":"); - if (nameParts.length == 1) - { - u = user; homeName = nameParts[0]; } else { - try + u = getPlayer(server, nameParts[0].split(" "), 0, true); + if (nameParts.length > 1) { - u = getPlayer(server, args, 0); + homeName = nameParts[1]; } - catch (NoSuchFieldException ex) - { - u = ess.getOfflineUser(args[0]); - } - if (u == null) - { - throw new Exception(Util.i18n("playerNotFound")); - } - homeName = nameParts[1]; } + } + try + { user.getTeleport().home(u, homeName, charge); } + catch (NotEnoughArgumentsException e) + { + List homes = u.getHomes(); + if (homes.isEmpty()) + { + throw new Exception(u == user ? Util.i18n("noHomeSet") : Util.i18n("noHomeSetPlayer")); + } + else if ((homes.size() == 1) && u == user) + { + user.getTeleport().home(u, homes.get(0), charge); + } + else + { + user.sendMessage(Util.format("homes", homes.toString())); + } + } } } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 93bea8f26..aa4808268 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -63,7 +63,6 @@ disabled = disabled dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) duplicatedUserdata = Duplicated userdata: {0} and {1} -emptyWorldName = Set Home: World name is null or empty. enableUnlimited = \u00a77Giving unlimited amount of {0} to {1}. enabled = enabled errorCallingCommand = Error calling command /{0} @@ -96,6 +95,7 @@ helpConsole = To view help from the console, type ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: holeInFloor = Hole in floor +homes = Homes: {0} homeSet = \u00a77Home set. homeSetToBed = \u00a77Your home is now set to this bed. hour = hour diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index eb34951ea..2b4a9d28e 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -63,7 +63,6 @@ disabled = deaktiveret dontMoveMessage = \u00a77Teleportering vil begynde om {0}. Bev\u00e6g dig ikke. downloadingGeoIp = Downloader GeoIP database ... det her kan tage et stykke tid (land: 0.6 MB, by: 20MB) duplicatedUserdata = Duplikerede userdata: {0} og {1} -emptyWorldName = S\u00e6t Hjem: World navn er null eller tom. enableUnlimited = \u00a77Giver ubegr\u00e6nset m\u00e6ngde af {0} til {1}. enabled = aktiveret errorCallingCommand = Fejl ved opkald af kommando /{0} @@ -96,6 +95,7 @@ helpConsole = For at se hj\u00e6lp fra konsolen, skriv ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f: holeInFloor = Hul i gulv +homes = Homes: {0} homeSet = \u00a77Hjem sat. homeSetToBed = \u00a77Dit hjem er nu sat til denne seng. hour = time diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index cd6888c26..ab36074af 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -63,7 +63,6 @@ disabled = deaktiviert dontMoveMessage = \u00a77Teleportvorgang startet in {0}. Beweg dich nicht. downloadingGeoIp = Lade GeoIP-Datenbank ... dies kann etwas dauern (country: 0.6 MB, city: 20MB) duplicatedUserdata = Doppelte Datei in userdata: {0} und {1} -emptyWorldName = /sethome: Weltname ist null oder leer. enableUnlimited = \u00a77Gebe {1} unendliche Mengen von {0}. enabled = aktiviert errorCallingCommand = Fehler beim Aufrufen des Befehls /{0} @@ -96,6 +95,7 @@ helpConsole = Um die Hilfe der Konsole zu sehen, schreibe ?. helpOp = \u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f: holeInFloor = Loch im Boden +homes = Homes: {0} homeSet = \u00a77Zuhause gesetzt. homeSetToBed = \u00a77Dein Zuhause ist nun an diesem Bett. hour = Stunde diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index a2a7bf32b..3a4b5b9cf 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -63,7 +63,6 @@ disabled = disabled dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) duplicatedUserdata = Duplicated userdata: {0} and {1} -emptyWorldName = Set Home: World name is null or empty. enableUnlimited = \u00a77Giving unlimited amount of {0} to {1}. enabled = enabled errorCallingCommand = Error calling command /{0} @@ -96,6 +95,7 @@ helpConsole = To view help from the console, type ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: holeInFloor = Hole in floor +homes = Homes: {0} homeSet = \u00a77Home set. homeSetToBed = \u00a77Your home is now set to this bed. hour = hour diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index de388e2ad..d58a84f65 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -63,7 +63,6 @@ disabled = d\u00e9sactiv\u00e9 dontMoveMessage = \u00a77La t\u00e9l\u00e9portation commence dans {0}. Ne bougez pas. downloadingGeoIp = T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP ... cela peut prendre un moment (campagne : 0.6 Mo, ville : 20Mo) duplicatedUserdata = Donn\u00e9e utilisateur dupliqu\u00e9e: {0} et {1} -emptyWorldName = Set Home: Le nom du monte est nul ou vide. enableUnlimited = \u00a77Donner un nombre illimit\u00e9 de {0} \u00e0 {1}. enabled = activ\u00e9 errorCallingCommand = Erreur en appelant la commande /{0} @@ -96,6 +95,7 @@ helpConsole = Pour voir l''aide tapez ? helpOp = \u00a7c[Aide Admin]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f. holeInFloor = Trou dans le Sol. +homes = Homes: {0} homeSet = \u00a77Home d\u00e9fini. homeSetToBed = \u00a77Votre home est d\u00e9sormais d\u00e9fini sur ce lit. hour = heure diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index c9d3d7f4b..d73a9e508 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -63,7 +63,6 @@ disabled = uitgeschakeld dontMoveMessage = \u00a77Beginnen met teleporteren in {0}. Niet bewegen. downloadingGeoIp = Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country: 0.6 MB, city: 20MB) duplicatedUserdata = Dubbele userdata: {0} en {1}. -emptyWorldName = Set Home: Naam van wereld is leeg. enableUnlimited = \u00a77Oneindig aantal {0} aan {1} gegeven. enabled = ingeschakeld errorCallingCommand = Fout bij het aanroepen van de opdracht /{0} @@ -96,6 +95,7 @@ helpConsole = type ? om de consolehelp weer te geven. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f: holeInFloor = Gat in de vloer +homes = Homes: {0} homeSet = \u00a77Home ingesteld. homeSetToBed = \u00a77Je home is is nu verplaatst naar dit bed. hour = uur From bb32ec9567879dbc9432548333d3f7254cb8c351 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 07:04:33 +0100 Subject: [PATCH 10/53] Adding delhome Making sethome allow redefine --- .../src/com/earth2me/essentials/UserData.java | 14 +++++++ .../essentials/commands/Commanddelhome.java | 42 +++++++++++++++++++ .../essentials/commands/Commandsethome.java | 7 +++- Essentials/src/messages.properties | 2 + Essentials/src/messages_da.properties | 2 + Essentials/src/messages_de.properties | 2 + Essentials/src/messages_en.properties | 2 + Essentials/src/messages_fr.properties | 2 + Essentials/src/messages_nl.properties | 2 + Essentials/src/plugin.yml | 4 ++ 10 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 80f23cc05..030b5a479 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -158,6 +158,20 @@ public abstract class UserData extends PlayerExtension implements IConf config.save(); } + public void delHome(String name) throws Exception + { + if (getHome(name) != null) + { + 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")) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java new file mode 100644 index 000000000..7385268d9 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java @@ -0,0 +1,42 @@ +package com.earth2me.essentials.commands; + +import com.earth2me.essentials.User; +import org.bukkit.Server; +import org.bukkit.command.CommandSender; +import com.earth2me.essentials.Util; + + +public class Commanddelhome extends EssentialsCommand +{ + public Commanddelhome() + { + super("delhome"); + } + + @Override + public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception + { + User user; + String name; + if (args.length < 1) + { + throw new NotEnoughArgumentsException(); + } + else if (args.length < 2) + { + user = ess.getUser(sender); + if (user == null) + { + throw new NotEnoughArgumentsException(); + } + name = args[0]; + } + else + { + user = getPlayer(server, args, 0); + name = args[1]; + } + user.delHome(name); + sender.sendMessage(Util.format("deleteHome", args[0])); + } +} diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index bb0d136c5..5461172d3 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -21,10 +21,15 @@ public class Commandsethome extends EssentialsCommand { if (user.isAuthorized("essentials.sethome.multiple")) { - if (user.isAuthorized("essentials.sethome.multiple.unlimited") || user.getHomes().size() <= ess.getSettings().getMultipleHomes()) + if ((user.isAuthorized("essentials.sethome.multiple.unlimited")) || (user.getHomes().size() <= ess.getSettings().getMultipleHomes()) + || (user.getHomes().contains(args[0]))) { user.setHome(args[0]); } + else + { + throw new Exception(Util.format("maxHomes", ess.getSettings().getMultipleHomes())); + } } } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index aa4808268..c382a449f 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -48,6 +48,7 @@ day = day days = days defaultBanReason = The Ban Hammer has spoken! deleteFileError = Could not delete file: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77Jail {0} has been removed. deleteWarp = \u00a77Warp {0} has been removed. deniedAccessCommand = {0} was denied access to command. @@ -154,6 +155,7 @@ mailSent = \u00a77Mail sent! markMailAsRead = \u00a7cTo mark your mail as read, type /mail clear markedAsAway = \u00a77You are now marked as away. markedAsNotAway = \u00a77You are no longer marked as away. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cYou may not jail that person me = me minute = minute diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 2b4a9d28e..2000c0c3b 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -48,6 +48,7 @@ day = dag days = dage defaultBanReason = Ban hammeren har talt! deleteFileError = Kunne ikke slette fil: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77F\u00e6ngsel {0} er fjernet. deleteWarp = \u00a77Warp {0} er fjernet. deniedAccessCommand = {0} var n\u00e6gtet adgang til kommando. @@ -154,6 +155,7 @@ mailSent = \u00a77Post sendt! markMailAsRead = \u00a7cTo marker din post som l\u00e6st, skriv /post ryd markedAsAway = \u00a77Du er nu markeret som v\u00e6k. markedAsNotAway = \u00a77Du er ikke l\u00e6ngere markeret som v\u00e6k. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cDu m\u00e5 ikke f\u00e6ngsle den person me = mig minute = minut diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index ab36074af..02e015b15 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -48,6 +48,7 @@ day = Tag days = Tage defaultBanReason = Der Bann-Hammer hat gesprochen! deleteFileError = Konnte Datei nicht l\u00f6schen: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77Gef\u00e4ngnis {0} wurde gel\u00f6scht. deleteWarp = \u00a77Warp-Punkt {0} wurde gel\u00f6scht. deniedAccessCommand = {0} hat keinen Zugriff auf diesen Befehl. @@ -154,6 +155,7 @@ mailSent = \u00a77Nachricht gesendet! markMailAsRead = \u00a7cUm deine Nachrichten zu l\u00f6schen, schreibe /mail clear markedAsAway = \u00a77Du wirst als abwesend angezeigt. markedAsNotAway = \u00a77Du wirst nicht mehr als abwesend angezeigt. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cDu kannst diese Person nicht einsperren. me = mir minute = Minute diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 3a4b5b9cf..288500947 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -48,6 +48,7 @@ day = day days = days defaultBanReason = The Ban Hammer has spoken! deleteFileError = Could not delete file: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77Jail {0} has been removed. deleteWarp = \u00a77Warp {0} has been removed. deniedAccessCommand = {0} was denied access to command. @@ -154,6 +155,7 @@ mailSent = \u00a77Mail sent! markMailAsRead = \u00a7cTo mark your mail as read, type /mail clear markedAsAway = \u00a77You are now marked as away. markedAsNotAway = \u00a77You are no longer marked as away. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cYou may not jail that person me = me minute = minute diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index d58a84f65..79016f02d 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -48,6 +48,7 @@ day = jour days = jours defaultBanReason = Le marteau du ban a frapp\u00e9! deleteFileError = Le fichier n''a pas pu \u00eatre supprim\u00e9: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77La prison {0} a \u00e9t\u00e9 supprim\u00e9e. deleteWarp = \u00a77Warp {0} supprim\u00e9. deniedAccessCommand = L''acc\u00e8s \u00e0 la commande a \u00e9t\u00e9 refus\u00e9 pour {0}. @@ -154,6 +155,7 @@ mailSent = \u00a77Courrier envoy\u00e9 ! markMailAsRead = \u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear markedAsAway = \u00a77Vous \u00eates d\u00e9sormais AFK. markedAsNotAway = \u00a77Vous n''\u00eates d\u00e9sormais plus AFK. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cVous ne pouvez pas emprisonner cette personne. me = moi minute = minute diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index d73a9e508..c9fa21273 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -48,6 +48,7 @@ day = dag days = dagen defaultBanReason = De Ban Hamer heeft gesproken! deleteFileError = Het bestand kon niet verwijderd worden: {0} +deleteHome = \u00a77Home {0} has been removed. deleteJail = \u00a77Gevangenis {0} is verwijderd. deleteWarp = \u00a77Warp {0} is verwijderd. deniedAccessCommand = {0} was de toegang verboden tot het commando. @@ -154,6 +155,7 @@ mailSent = \u00a77Bericht verzonden! markMailAsRead = \u00a7cType /mail clear, om je berichten als gelezen te markeren markedAsAway = \u00a77Je staat nu als afwezig gemeld. markedAsNotAway = \u00a77Je staat niet meer als afwezig gemeld. +maxHomes=You cannot set more than {0} homes. mayNotJail = \u00a7cJe mag die speler niet in de gevangenis zetten. me = me minute = minuut diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 5d180763f..2e250d9aa 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -59,6 +59,10 @@ commands: description: Describes your current bearing. usage: / aliases: [ecompass] + delhome: + description: Removes a home + usage: / [player] + aliases: [edelhome,remhome,rmhome,eremhome,ermhome] deljail: description: Removes a jail usage: / [jailname] From 5de354af86a20c3422a436f1611b7c29702a490a Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 23 Aug 2011 13:20:35 +0200 Subject: [PATCH 11/53] midnight = 12am noon = 12pm --- .../earth2me/essentials/DescParseTickFormat.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java index a64f8e3c7..0fd2e9047 100755 --- a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java +++ b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java @@ -155,10 +155,6 @@ public final class DescParseTickFormat int hours = 0; int minutes = 0; - if (desc.endsWith("pm")) - { - hours += 12; - } desc = desc.toLowerCase().replaceAll("[^0-9]", ""); @@ -189,6 +185,16 @@ public final class DescParseTickFormat { throw new NumberFormatException(); } + + if (desc.endsWith("pm") && hours != 12) + { + hours += 12; + } + + if (desc.endsWith("am") && hours == 12) + { + hours -= 12; + } return hoursMinutesToTicks(hours, minutes); } From 27adc214464367fe795715d2244934eecd7fef16 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 23 Aug 2011 13:20:35 +0200 Subject: [PATCH 12/53] midnight = 12am noon = 12pm --- .../earth2me/essentials/DescParseTickFormat.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java index a64f8e3c7..0fd2e9047 100755 --- a/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java +++ b/Essentials/src/com/earth2me/essentials/DescParseTickFormat.java @@ -155,10 +155,6 @@ public final class DescParseTickFormat int hours = 0; int minutes = 0; - if (desc.endsWith("pm")) - { - hours += 12; - } desc = desc.toLowerCase().replaceAll("[^0-9]", ""); @@ -189,6 +185,16 @@ public final class DescParseTickFormat { throw new NumberFormatException(); } + + if (desc.endsWith("pm") && hours != 12) + { + hours += 12; + } + + if (desc.endsWith("am") && hours == 12) + { + hours -= 12; + } return hoursMinutesToTicks(hours, minutes); } From 7df5098bf687fa41193135ecff1ca4f68b0c174d Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 15:37:09 +0100 Subject: [PATCH 13/53] Homes tolower. Max homes fix. --- .../src/com/earth2me/essentials/EssentialsUpgrade.java | 3 ++- .../com/earth2me/essentials/commands/Commanddelhome.java | 4 ++-- .../src/com/earth2me/essentials/commands/Commandhome.java | 2 +- .../com/earth2me/essentials/commands/Commandsethome.java | 8 ++++---- .../src/com/earth2me/essentials/signs/EssentialsSign.java | 1 + 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index c5d590e14..aeb90c806 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -282,11 +282,12 @@ public class EssentialsUpgrade final String defworld = (String)config.getProperty("home.default"); final Location defloc = config.getLocation("home.worlds." + defworld, ess.getServer()); - String worldName = defloc.getWorld().getName().toLowerCase(); + ; config.setProperty("homes.home", defloc); List worlds = config.getKeys("home.worlds"); Location loc; + String worldName; if (worlds == null) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java index 7385268d9..7badbf969 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java @@ -36,7 +36,7 @@ public class Commanddelhome extends EssentialsCommand user = getPlayer(server, args, 0); name = args[1]; } - user.delHome(name); - sender.sendMessage(Util.format("deleteHome", args[0])); + user.delHome(name.toLowerCase()); + sender.sendMessage(Util.format("deleteHome", name)); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index b06dec10b..3e4ee6178 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -40,7 +40,7 @@ public class Commandhome extends EssentialsCommand } try { - user.getTeleport().home(u, homeName, charge); + user.getTeleport().home(u, homeName.toLowerCase(), charge); } catch (NotEnoughArgumentsException e) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 5461172d3..594804de0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -21,10 +21,10 @@ public class Commandsethome extends EssentialsCommand { if (user.isAuthorized("essentials.sethome.multiple")) { - if ((user.isAuthorized("essentials.sethome.multiple.unlimited")) || (user.getHomes().size() <= ess.getSettings().getMultipleHomes()) - || (user.getHomes().contains(args[0]))) + if ((user.isAuthorized("essentials.sethome.multiple.unlimited")) || (user.getHomes().size() < ess.getSettings().getMultipleHomes()) + || (user.getHomes().contains(args[0].toLowerCase()))) { - user.setHome(args[0]); + user.setHome(args[0].toLowerCase()); } else { @@ -46,7 +46,7 @@ public class Commandsethome extends EssentialsCommand { throw new Exception(Util.i18n("playerNotFound")); } - usersHome.setHome(args[1], user.getLocation()); + usersHome.setHome(args[1].toLowerCase(), user.getLocation()); } } } diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index fc5dd8553..a58a1e70d 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -21,6 +21,7 @@ public class EssentialsSign { private static final Set EMPTY_SET = new HashSet(); protected transient final String signName; + //TODO: Add these settings to messages private static final String FORMAT_SUCCESS = "§1[%s]"; private static final String FORMAT_TEMPLATE = "[%s]"; private static final String FORMAT_FAIL = "§4[%s]"; From 216cc7f681ef456295adc96edc2427d548f067b6 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 18:15:45 +0100 Subject: [PATCH 14/53] Fix to repair in plugin.yml --- Essentials/src/plugin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 2e250d9aa..9a9d5ffd2 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -227,9 +227,9 @@ commands: usage: / aliases: [rel,ereloadall,ereload,erel] repair: - description: Repairs the item in hand, or all items in the current inventory. + description: Repairs the durability of all or one item. usage: / [hand|all] - aliases: [fix] + aliases: [fix,erepair,efix] rules: description: Views the server rules. usage: / From 38aa85dd0cf1c208dadb9e4b7947a7c00cb33f13 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 23 Aug 2011 22:35:15 +0100 Subject: [PATCH 15/53] Join full server patch. --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 5830c5875..62c0ac47a 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -326,6 +326,7 @@ public class EssentialsPlayerListener extends PlayerListener event.disallow(Result.KICK_FULL, Util.i18n("serverFull")); return; } + event.allow(); user.setLastLogin(System.currentTimeMillis()); updateCompass(user); From f12a14d7f7bbc59823d124e1ffa2e85bf1a1239a Mon Sep 17 00:00:00 2001 From: okamosy Date: Mon, 22 Aug 2011 22:10:23 +0100 Subject: [PATCH 16/53] Added util function concat(List) and concat(string, list) to concatenate lists into a string. Updated powertool to use new concat method. --- .../src/com/earth2me/essentials/Util.java | 23 +++++++++++++++++++ .../essentials/commands/Commandpowertool.java | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index 82231cb06..e850f9732 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -14,6 +14,7 @@ import java.text.MessageFormat; import java.util.Calendar; import java.util.Enumeration; import java.util.GregorianCalendar; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; @@ -488,4 +489,26 @@ public class Util { return s.toUpperCase().charAt(0) + s.toLowerCase().substring(1); } + + public static String concat(List list) + { + return concat(",", list); + } + + public static String concat(String seperator, List list) + { + StringBuilder sb = new StringBuilder(); + + for(Object item : list) + { + if(sb.length() > 0) + { + sb.append(seperator); + } + + sb.append(item.toString()); + } + + return sb.toString(); + } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index bc1ccd801..054419a86 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -39,7 +39,7 @@ public class Commandpowertool extends EssentialsCommand } else { - user.sendMessage(Util.format("powerToolList", powertools.toString(), itemName)); + user.sendMessage(Util.format("powerToolList", Util.concat(powertools), itemName)); } return; } @@ -85,7 +85,7 @@ public class Commandpowertool extends EssentialsCommand } powertools.add(command); - user.sendMessage(Util.format("powerToolAttach", powertools.toString(), itemName)); + user.sendMessage(Util.format("powerToolAttach", Util.concat(powertools), itemName)); } } else From 53a73998a2fd648277e12f773161478fbc89283b Mon Sep 17 00:00:00 2001 From: okamosy Date: Tue, 23 Aug 2011 19:47:50 +0100 Subject: [PATCH 17/53] Updated joinList to properly handle lists of lists. --- .../src/com/earth2me/essentials/Util.java | 42 ++++++------------- .../essentials/commands/Commandpowertool.java | 4 +- .../essentials/commands/Commandspawnmob.java | 7 +++- Essentials/src/messages.properties | 2 +- Essentials/src/messages_en.properties | 2 +- 5 files changed, 23 insertions(+), 34 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index e850f9732..500aa0713 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -11,6 +11,7 @@ import java.net.URL; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.Enumeration; import java.util.GregorianCalendar; @@ -470,17 +471,22 @@ public class Util public static String joinList(Object... list) { - final StringBuilder buf = new StringBuilder(); - boolean first = true; + StringBuilder buf = new StringBuilder(); for (Object each : list) { - if (!first) + if (buf.length() > 0) { buf.append(", "); - } - first = false; - buf.append(each); + + if(each instanceof List) + { + buf.append(joinList(((List)each).toArray())); + } + else + { + buf.append(each.toString()); + } } return buf.toString(); } @@ -488,27 +494,5 @@ public class Util public static String capitalCase(String s) { return s.toUpperCase().charAt(0) + s.toLowerCase().substring(1); - } - - public static String concat(List list) - { - return concat(",", list); - } - - public static String concat(String seperator, List list) - { - StringBuilder sb = new StringBuilder(); - - for(Object item : list) - { - if(sb.length() > 0) - { - sb.append(seperator); - } - - sb.append(item.toString()); - } - - return sb.toString(); - } + } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 054419a86..4e85d2aeb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -39,7 +39,7 @@ public class Commandpowertool extends EssentialsCommand } else { - user.sendMessage(Util.format("powerToolList", Util.concat(powertools), itemName)); + user.sendMessage(Util.format("powerToolList", Util.joinList(powertools), itemName)); } return; } @@ -85,7 +85,7 @@ public class Commandpowertool extends EssentialsCommand } powertools.add(command); - user.sendMessage(Util.format("powerToolAttach", Util.concat(powertools), itemName)); + user.sendMessage(Util.format("powerToolAttach", Util.joinList(powertools), itemName)); } } else diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 9514bc767..17081e349 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -82,7 +82,12 @@ public class Commandspawnmob extends EssentialsCommand { 8, 9 }; - Location loc = (new TargetBlock(user, 300, 0.2, ignore)).getTargetBlock().getLocation(); + Block block = (new TargetBlock(user, 300, 0.2, ignore)).getTargetBlock(); + if(block == null) { + user.sendMessage(Util.i18n("unableToSpawnMob")); + return; + } + Location loc = block.getLocation(); Location sloc = Util.getSafeDestination(loc); try { diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index c382a449f..52cefd453 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -147,7 +147,7 @@ kits = \u00a77Kits: {0} lightningSmited = \u00a77You have just been smited lightningUse = \u00a77Smiting {0} loadWarpError = Failed to load warp {0} -loadinfo = Loaded {0} build {1} by {2} +loadinfo = Loaded {0} build {1} by: {2} localFormat = Local: <{0}> {1} mailClear = \u00a7cTo mark your mail as read, type /mail clear mailCleared = \u00a77Mail Cleared! diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 288500947..c96c9ecb7 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -147,7 +147,7 @@ kits = \u00a77Kits: {0} lightningSmited = \u00a77You have just been smited lightningUse = \u00a77Smiting {0} loadWarpError = Failed to load warp {0} -loadinfo = Loaded {0} build {1} by {2} +loadinfo = Loaded {0} build {1} by: {2} localFormat = Local: <{0}> {1} mailClear = \u00a7cTo mark your mail as read, type /mail clear mailCleared = \u00a77Mail Cleared! From 6946488e0d93f58ad3435aace88b73eaf299e039 Mon Sep 17 00:00:00 2001 From: okamosy Date: Tue, 23 Aug 2011 22:58:19 +0100 Subject: [PATCH 18/53] updated to use corrected joinList function. --- .../src/com/earth2me/essentials/Util.java | 19 +++++++++++++++---- .../essentials/commands/Commandhome.java | 2 +- .../essentials/commands/Commandjails.java | 9 ++------- .../essentials/commands/Commandrepair.java | 12 +----------- .../essentials/commands/Commandwarp.java | 11 +---------- 5 files changed, 20 insertions(+), 33 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index 500aa0713..6565a9f57 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -11,7 +11,6 @@ import java.net.URL; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.MessageFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Enumeration; import java.util.GregorianCalendar; @@ -470,22 +469,34 @@ public class Util } public static String joinList(Object... list) + { + return joinList(", ", list); + } + + public static String joinList(String seperator, Object... list) { StringBuilder buf = new StringBuilder(); for (Object each : list) { if (buf.length() > 0) { - buf.append(", "); + buf.append(seperator); } if(each instanceof List) { - buf.append(joinList(((List)each).toArray())); + buf.append(joinList(seperator, ((List)each).toArray())); } else { - buf.append(each.toString()); + try + { + buf.append(each.toString()); + } + catch (Exception e) + { + buf.append(each.toString()); + } } } return buf.toString(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index 3e4ee6178..2b285bfe7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -55,7 +55,7 @@ public class Commandhome extends EssentialsCommand } else { - user.sendMessage(Util.format("homes", homes.toString())); + user.sendMessage(Util.format("homes", Util.joinList(homes))); } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandjails.java b/Essentials/src/com/earth2me/essentials/commands/Commandjails.java index b91a1c985..36eb633fc 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandjails.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandjails.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.commands; +import com.earth2me.essentials.Util; import org.bukkit.Server; import org.bukkit.command.CommandSender; @@ -14,12 +15,6 @@ public class Commandjails extends EssentialsCommand @Override protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - StringBuilder jailList = new StringBuilder(); - for (String j : ess.getJail().getJails()) - { - jailList.append(j); - jailList.append(' '); - } - sender.sendMessage("§7" + jailList); + sender.sendMessage("§7" + Util.joinList(" ", ess.getJail().getJails())); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index e98deeab7..df0509f94 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -55,16 +55,6 @@ public class Commandrepair extends EssentialsCommand String armor = repairItems(user.getInventory().getArmorContents()); - if (armor.length() > 0) - { - if (itemList.length() > 0) - { - itemList.append(", "); - } - - itemList.append(armor); - } - if (itemList.length() == 0) { user.sendMessage(Util.format("repairNone")); @@ -72,7 +62,7 @@ public class Commandrepair extends EssentialsCommand else { charge(user); - user.sendMessage(Util.format("repair", itemList.toString())); + user.sendMessage(Util.format("repair", Util.joinList(itemList))); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java index 17d55faee..b93355f5a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java @@ -55,16 +55,7 @@ public class Commandwarp extends EssentialsCommand user.sendMessage(Util.format("warpsCount", warpNameList.size(), page, (int)Math.ceil(warpNameList.size() / (double)WARPS_PER_PAGE))); } final int warpPage = (page - 1) * WARPS_PER_PAGE; - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < Math.min(warpNameList.size() - warpPage, WARPS_PER_PAGE); i++) - { - if (i > 0) - { - sb.append(", "); - } - sb.append(warpNameList.get(i + warpPage)); - } - user.sendMessage(sb.toString()); + user.sendMessage(Util.joinList(warpNameList.subList(warpPage, warpPage+Math.min(warpNameList.size() - warpPage, WARPS_PER_PAGE)))); return; } if (args.length > 0) From 8cc249c2d3b871abbc5a2664c69c2a92325b1744 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 02:48:38 +0100 Subject: [PATCH 19/53] Essentials.sethome.others doesn't imply essentials.sethome.multiple. Restore essentials.home.others permission check. --- .../essentials/commands/Commandhome.java | 2 +- .../essentials/commands/Commandsethome.java | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index 2b285bfe7..f556ea360 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -25,7 +25,7 @@ public class Commandhome extends EssentialsCommand if (args.length > 0) { nameParts = args[0].split(":"); - if (nameParts[0].length() == args[0].length()) + if (nameParts[0].length() == args[0].length() || !user.isAuthorized("essentials.home.others")) { homeName = nameParts[0]; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 594804de0..7f496371f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -17,16 +17,23 @@ public class Commandsethome extends EssentialsCommand { if (args.length > 0) { + //Allowing both formats /sethome khobbits house | /sethome khobbits:house + final String[] nameParts = args[0].split(":"); + if (nameParts[0].length() != args[0].length()) + { + args = nameParts; + } + if (args.length < 2) { if (user.isAuthorized("essentials.sethome.multiple")) { if ((user.isAuthorized("essentials.sethome.multiple.unlimited")) || (user.getHomes().size() < ess.getSettings().getMultipleHomes()) - || (user.getHomes().contains(args[0].toLowerCase()))) + || (user.getHomes().contains(args[0].toLowerCase()))) { user.setHome(args[0].toLowerCase()); } - else + else { throw new Exception(Util.format("maxHomes", ess.getSettings().getMultipleHomes())); } @@ -46,7 +53,12 @@ public class Commandsethome extends EssentialsCommand { throw new Exception(Util.i18n("playerNotFound")); } - usersHome.setHome(args[1].toLowerCase(), user.getLocation()); + String name = args[1].toLowerCase(); + if (!user.isAuthorized("essentials.sethome.multiple")) + { + name = "home"; + } + usersHome.setHome(name, user.getLocation()); } } } From 30f0f78efcc0f4584fb33ffa61f15d96effb3c1d Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 03:09:27 +0100 Subject: [PATCH 20/53] Fixing NPE on Entity Listener (Powertool). --- .../essentials/EssentialsEntityListener.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 3e53e3eea..91c4bdce4 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -37,13 +37,17 @@ public class EssentialsEntityListener extends EntityListener User attacker = ess.getUser(eAttack); ItemStack is = attacker.getItemInHand(); List commandList = attacker.getPowertool(is); - for(String command : commandList) + if (commandList != null && !commandList.isEmpty()) { - if (command != null && !command.isEmpty()) + for (String command : commandList) { - attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName())); - event.setCancelled(true); - return; + + if (command != null && !command.isEmpty()) + { + attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName())); + event.setCancelled(true); + return; + } } } } From 6c738294d1a37ad10e351838b6b8923a41b37628 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 03:49:35 +0100 Subject: [PATCH 21/53] Skip default home if it's invalid. --- .../src/com/earth2me/essentials/EssentialsUpgrade.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index aeb90c806..8a771778d 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -281,9 +281,10 @@ public class EssentialsUpgrade @SuppressWarnings("unchecked") final String defworld = (String)config.getProperty("home.default"); final Location defloc = config.getLocation("home.worlds." + defworld, ess.getServer()); - - ; - config.setProperty("homes.home", defloc); + if (defloc != null) + { + config.setProperty("homes.home", defloc); + } List worlds = config.getKeys("home.worlds"); Location loc; From 3d913f9fcc392e3b04be29417205da9a9d27ee5a Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 05:18:35 +0100 Subject: [PATCH 22/53] Make home throw an exception if the world doesn't exist. Add multiverse/missing world support to home upgrade. --- Essentials/nbproject/pmd.settings | 1 + .../earth2me/essentials/EssentialsConf.java | 4 ++-- .../essentials/EssentialsUpgrade.java | 23 ++++++++++++++++-- .../src/com/earth2me/essentials/IUser.java | 4 ++-- .../src/com/earth2me/essentials/User.java | 2 +- .../src/com/earth2me/essentials/UserData.java | 18 ++++++++++---- .../com/earth2me/essentials/UserTest.java | 24 ++++++++++++------- 7 files changed, 56 insertions(+), 20 deletions(-) diff --git a/Essentials/nbproject/pmd.settings b/Essentials/nbproject/pmd.settings index 6a34e356c..824aa3ac9 100644 --- a/Essentials/nbproject/pmd.settings +++ b/Essentials/nbproject/pmd.settings @@ -1 +1,2 @@ DoNotUseThreads +SignatureDeclareThrowsException diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 82d4876f5..6c6567461 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -155,7 +155,7 @@ public class EssentialsConf extends Configuration return getProperty(path) != null; } - public Location getLocation(String path, Server server) + public Location getLocation(String path, Server server) throws Exception { String worldName = getString((path != null ? path + "." : "") + "world"); if (worldName == null || worldName.isEmpty()) @@ -165,7 +165,7 @@ public class EssentialsConf extends Configuration World world = server.getWorld(worldName); if (world == null) { - return null; + throw new Exception(Util.i18n("invalidWorld")); } return new Location(world, getDouble((path != null ? path + "." : "") + "x", 0), diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java index 8a771778d..ffe4f5375 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUpgrade.java @@ -280,7 +280,7 @@ public class EssentialsUpgrade { @SuppressWarnings("unchecked") final String defworld = (String)config.getProperty("home.default"); - final Location defloc = config.getLocation("home.worlds." + defworld, ess.getServer()); + final Location defloc = getFakeLocation(config,"home.worlds." + defworld); if (defloc != null) { config.setProperty("homes.home", defloc); @@ -300,7 +300,7 @@ public class EssentialsUpgrade { continue; } - loc = config.getLocation("home.worlds." + world, ess.getServer()); + loc = getFakeLocation(config, "home.worlds." + world); if (loc == null) { continue; @@ -570,6 +570,25 @@ public class EssentialsUpgrade } 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)); + } public void beforeSettings() { diff --git a/Essentials/src/com/earth2me/essentials/IUser.java b/Essentials/src/com/earth2me/essentials/IUser.java index c48d5d772..91a121e0a 100644 --- a/Essentials/src/com/earth2me/essentials/IUser.java +++ b/Essentials/src/com/earth2me/essentials/IUser.java @@ -45,9 +45,9 @@ public interface IUser void setLastLocation(); - Location getHome(String name); + Location getHome(String name) throws Exception; - Location getHome(Location loc); + Location getHome(Location loc) throws Exception; String getName(); diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 3a14bca8b..29bbd89cc 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -193,7 +193,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return !ess.getSettings().itemSpawnBlacklist().contains(itemId); } - public Location getHome() + public Location getHome() throws Exception { return getHome(getHomes().get(0)); } diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index 030b5a479..e5c7385b2 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -106,7 +106,7 @@ public abstract class UserData extends PlayerExtension implements IConf } - public Location getHome(String name) + public Location getHome(String name) throws Exception { Location loc = config.getLocation("homes." + name, getServer()); if (loc == null) @@ -128,7 +128,7 @@ public abstract class UserData extends PlayerExtension implements IConf return loc; } - public Location getHome(Location world) + public Location getHome(Location world) throws Exception { Location loc; for (String home : getHomes()) @@ -166,9 +166,10 @@ public abstract class UserData extends PlayerExtension implements IConf config.removeProperty("homes." + name); config.save(); } - else { + else + { //TODO: move this message to messages file - throw new Exception("Home "+name+" doesn't exist"); + throw new Exception("Home " + name + " doesn't exist"); } } @@ -261,7 +262,14 @@ public abstract class UserData extends PlayerExtension implements IConf private Location _getLastLocation() { - return config.getLocation("lastlocation", getServer()); + try + { + return config.getLocation("lastlocation", getServer()); + } + catch (Exception e) + { + return null; + } } public Location getLastLocation() diff --git a/Essentials/test/com/earth2me/essentials/UserTest.java b/Essentials/test/com/earth2me/essentials/UserTest.java index 4724c96d6..35244ac90 100644 --- a/Essentials/test/com/earth2me/essentials/UserTest.java +++ b/Essentials/test/com/earth2me/essentials/UserTest.java @@ -46,7 +46,7 @@ public class UserTest extends TestCase OfflinePlayer base1alt = server.createPlayer(base1.getName(), ess); assertEquals(base1alt, ess.getUser(base1alt).getBase()); } - + public void testHome() { User user = ess.getUser(base1); @@ -54,13 +54,21 @@ public class UserTest extends TestCase user.setHome(); OfflinePlayer base2 = server.createPlayer(base1.getName(), ess); User user2 = ess.getUser(base2); - Location home = user2.getHome(loc); - assertEquals(loc.getWorld().getName(), home.getWorld().getName()); - assertEquals(loc.getX(), home.getX()); - assertEquals(loc.getY(), home.getY()); - assertEquals(loc.getZ(), home.getZ()); - assertEquals(loc.getYaw(), home.getYaw()); - assertEquals(loc.getPitch(), home.getPitch()); + try + { + Location home = user2.getHome(loc); + assertEquals(loc.getWorld().getName(), home.getWorld().getName()); + assertEquals(loc.getX(), home.getX()); + assertEquals(loc.getY(), home.getY()); + assertEquals(loc.getZ(), home.getZ()); + assertEquals(loc.getYaw(), home.getYaw()); + assertEquals(loc.getPitch(), home.getPitch()); + } + catch (Exception ex) + { + fail("Exception"); + } + } public void testMoney() From 01861e5a644e6d2aff80a684d5504d4cad529d35 Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 25 Aug 2011 17:37:41 +0200 Subject: [PATCH 23/53] Correctly catch signs ignition --- .../essentials/signs/EssentialsSign.java | 7 ++++++- .../essentials/signs/SignBlockListener.java | 17 ++++++++++++++++- .../essentials/signs/SignProtection.java | 8 ++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index a58a1e70d..1bd1d6184 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -192,8 +192,13 @@ public class EssentialsSign { return true; } + + public boolean onBlockIgnite(final Block block, final IEssentials ess) + { + return true; + } - public boolean onBlockPush(Block block, IEssentials ess) + public boolean onBlockPush(final Block block, final IEssentials ess) { return true; } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index 6f07b67b2..eb6163d20 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -184,9 +184,24 @@ public class SignBlockListener extends BlockListener return; } - if (protectSignsAndBlocks(event.getBlock(), event.getPlayer())) + final Block block = event.getBlock(); + if (((block.getType() == Material.WALL_SIGN + || block.getType() == Material.SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) { event.setCancelled(true); + return; + } + for (Signs signs : Signs.values()) + { + final EssentialsSign sign = signs.getSign(); + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockIgnite(block, ess)) + { + event.setCancelled(true); + return; + } } } diff --git a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java index c595d9b03..f9957e646 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java @@ -313,6 +313,14 @@ public class SignProtection extends EssentialsSign return state == SignProtectionState.NOSIGN; } + + @Override + public boolean onBlockIgnite(final Block block, final IEssentials ess) + { + final SignProtectionState state = isBlockProtected(block, null, null, false); + + return state == SignProtectionState.NOSIGN; + } @Override public boolean onBlockPush(final Block block, final IEssentials ess) From 82819083062975f7515d53ef45312a98a356a07f Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 26 Aug 2011 04:46:08 +0200 Subject: [PATCH 24/53] PVP protection for arrows and other projectiles. Needs cleanup. --- .../EssentialsProtectEntityListener.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index d85d2b3d7..d96da20a7 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -1,6 +1,5 @@ package com.earth2me.essentials.protect; -import com.earth2me.essentials.EssentialsBlockListener; import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.User; import java.util.HashSet; @@ -21,11 +20,11 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Fireball; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageByProjectileEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; @@ -47,7 +46,7 @@ public class EssentialsProtectEntityListener extends EntityListener } @Override - public void onEntityDamage(EntityDamageEvent event) + public void onEntityDamage(final EntityDamageEvent event) { if (event.isCancelled()) { @@ -102,7 +101,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + //Creeper explode prevention if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_explosion) && !(target instanceof Player @@ -121,7 +120,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.fireball") @@ -130,7 +129,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.tnt") @@ -139,17 +138,20 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - } - if (event instanceof EntityDamageByProjectileEvent - && target instanceof Player - && prot.getSettingBool(ProtectConfig.disable_projectiles) - && !(user.isAuthorized("essentials.protect.damage.projectiles") - && !user.isAuthorized("essentials.protect.damage.disable"))) - { - event.setCancelled(true); - ((EntityDamageByProjectileEvent)event).setBounce(true); - return; + if (edEvent.getDamager() instanceof Projectile + && target instanceof Player + && ((prot.getSettingBool(ProtectConfig.disable_projectiles) + && !(user.isAuthorized("essentials.protect.damage.projectiles") + && !user.isAuthorized("essentials.protect.damage.disable"))) + || (((Projectile)edEvent.getDamager()).getShooter() instanceof Player + && prot.getSettingBool(ProtectConfig.disable_pvp) + && (!user.isAuthorized("essentials.protect.pvp") + || !ess.getUser(((Projectile)edEvent.getDamager()).getShooter()).isAuthorized("essentials.protect.pvp"))))) + { + event.setCancelled(true); + return; + } } final DamageCause cause = event.getCause(); @@ -201,7 +203,7 @@ public class EssentialsProtectEntityListener extends EntityListener } @Override - public void onEntityExplode(EntityExplodeEvent event) + public void onEntityExplode(final EntityExplodeEvent event) { if (event.isCancelled()) { @@ -240,7 +242,7 @@ public class EssentialsProtectEntityListener extends EntityListener } ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, - new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); + new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); event.setCancelled(true); return; } @@ -279,12 +281,6 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - /*if (EssentialsBlockListener.protectedBlocks.contains(block.getType()) - && EssentialsBlockListener.isBlockProtected(block)) - { - event.setCancelled(true); - return; - }*/ } } @@ -340,7 +336,7 @@ public class EssentialsProtectEntityListener extends EntityListener public void onExplosionPrime(ExplosionPrimeEvent event) { if (event.getEntity() instanceof CraftFireball - && prot.getSettingBool(ProtectConfig.prevent_fireball_fire)) + && prot.getSettingBool(ProtectConfig.prevent_fireball_fire)) { event.setFire(false); } From 016dd10060ca19bcf5bfd8d857b12bc34847cbfc Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 26 Aug 2011 05:12:29 +0100 Subject: [PATCH 25/53] Adding essentials.delhome.others to allow people to delete other peoples homes. --- .../essentials/commands/Commanddelhome.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java index 7badbf969..aa60c9168 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddelhome.java @@ -16,26 +16,32 @@ public class Commanddelhome extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - User user; + //Allowing both formats /delhome khobbits house | /delhome khobbits:house + final String[] nameParts = args[0].split(":"); + if (nameParts[0].length() != args[0].length()) + { + args = nameParts; + } + + User user = ess.getUser(sender); String name; if (args.length < 1) { throw new NotEnoughArgumentsException(); } - else if (args.length < 2) + else if (args.length > 1 && (user == null || user.isAuthorized("essentials.delhome.others"))) + { + user = getPlayer(server, args, 0); + name = args[1]; + } + else { - user = ess.getUser(sender); if (user == null) { throw new NotEnoughArgumentsException(); } name = args[0]; } - else - { - user = getPlayer(server, args, 0); - name = args[1]; - } user.delHome(name.toLowerCase()); sender.sendMessage(Util.format("deleteHome", name)); } From 00050d08d430b32493708a342374c1081bafd727 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sat, 27 Aug 2011 02:54:45 +0100 Subject: [PATCH 26/53] Powertool fix. --- .../src/com/earth2me/essentials/commands/Commandpowertool.java | 3 ++- Essentials/src/plugin.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 4e85d2aeb..4c3d941ae 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -31,7 +31,7 @@ public class Commandpowertool extends EssentialsCommand String command = getFinalArg(args, 0); if (command != null && !command.isEmpty()) { - if (command.equalsIgnoreCase("list")) + if (command.equalsIgnoreCase("l:")) { if (powertools == null || powertools.isEmpty()) { @@ -90,6 +90,7 @@ public class Commandpowertool extends EssentialsCommand } else { + powertools.clear(); user.sendMessage(Util.format("powerToolRemoveAll", itemName)); } diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 9a9d5ffd2..63e9b9aa8 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -208,7 +208,7 @@ commands: aliases: [pong,eping,epong] powertool: description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click. - usage: / [list|a:|r:][command] + usage: / [l:|a:|r:][command] aliases: [pt,epowertool,ept] ptime: description: Adjust player's client time. Add @ prefix to fix. From 8998168ec2f7053485a8fc64c18cd1479b36c88b Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 13:59:39 +0200 Subject: [PATCH 27/53] Auto-AFK, AFK-Kick and freeze afk players --- .../essentials/EssentialsPlayerListener.java | 27 ++- .../earth2me/essentials/EssentialsTimer.java | 7 +- .../com/earth2me/essentials/ISettings.java | 8 +- .../src/com/earth2me/essentials/Settings.java | 18 ++ .../src/com/earth2me/essentials/User.java | 156 ++++++++++++------ Essentials/src/config.yml | 45 +++-- 6 files changed, 176 insertions(+), 85 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 62c0ac47a..ffdefb663 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -73,11 +73,7 @@ public class EssentialsPlayerListener extends PlayerListener it.remove(); } } - if (user.isAfk()) - { - user.setAfk(false); - ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); - } + user.updateActivity(); if (ess.getSettings().changeDisplayName()) { user.setDisplayName(user.getNick()); @@ -93,11 +89,12 @@ public class EssentialsPlayerListener extends PlayerListener } final User user = ess.getUser(event.getPlayer()); - if (user.isAfk()) - { - user.setAfk(false); - ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); + if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers()) { + event.setCancelled(true); + return; } + + user.updateActivity(); if (!ess.getSettings().getNetherPortalsEnabled()) { @@ -216,6 +213,7 @@ public class EssentialsPlayerListener extends PlayerListener user.getInventory().setContents(user.getSavedInventory()); user.setSavedInventory(null); } + user.updateActivity(); user.dispose(); if (!ess.getSettings().getReclaimSetting()) { @@ -304,7 +302,8 @@ public class EssentialsPlayerListener extends PlayerListener return; } User user = ess.getUser(event.getPlayer()); - if (user == null) { + if (user == null) + { user = new User(event.getPlayer(), ess); } user.setNPC(false); @@ -436,7 +435,7 @@ public class EssentialsPlayerListener extends PlayerListener { return; } - + // We need to loop through each command and execute for (String command : commandList) { @@ -479,10 +478,6 @@ public class EssentialsPlayerListener extends PlayerListener } } } - if (user.isAfk()) - { - user.setAfk(false); - ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); - } + user.updateActivity(); } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java index 639802776..f3b447dae 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java @@ -24,16 +24,17 @@ public class EssentialsTimer implements Runnable { final User user = ess.getUser(player); onlineUsers.add(user); - user.setLastActivity(currentTime); + user.setLastOnlineActivity(currentTime); + user.checkActivity(); } final Iterator iterator = onlineUsers.iterator(); while (iterator.hasNext()) { final User user = iterator.next(); - if (user.getLastActivity() < currentTime && user.getLastActivity() > user.getLastLogout()) + if (user.getLastOnlineActivity() < currentTime && user.getLastOnlineActivity() > user.getLastLogout()) { - user.setLastLogout(user.getLastActivity()); + user.setLastLogout(user.getLastOnlineActivity()); iterator.remove(); continue; } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index ccfcc3175..82c057648 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -109,8 +109,6 @@ public interface ISettings extends IConf boolean permissionBasedItemSpawn(); - void reloadConfig(); - boolean showNonEssCommandsInHelp(); boolean spawnIfNoHome(); @@ -136,4 +134,10 @@ public interface ISettings extends IConf boolean addPrefixSuffix(); boolean isUpdateEnabled(); + + long getAutoAfk(); + + long getAutoAfkKick(); + + boolean getFreezeAfkPlayers(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 951c13363..2b7eea8f6 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -485,4 +485,22 @@ public class Settings implements ISettings { return config.getBoolean("update-check", true); } + + @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); + } } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 29bbd89cc..722cfadb1 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -1,11 +1,9 @@ package com.earth2me.essentials; import com.earth2me.essentials.commands.IEssentialsCommand; -import com.earth2me.essentials.commands.NotEnoughArgumentsException; import com.earth2me.essentials.register.payment.Method; import java.util.Calendar; import java.util.GregorianCalendar; -import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -14,38 +12,43 @@ import org.bukkit.entity.Player; public class User extends UserData implements Comparable, IReplyTo, IUser { - private static final Logger logger = Logger.getLogger("Minecraft"); private boolean justPortaled = false; private CommandSender replyTo = null; - private User teleportRequester; - private boolean teleportRequestHere; - private final Teleport teleport; - private long lastActivity; + private transient User teleportRequester; + private transient boolean teleportRequestHere; + private transient final Teleport teleport; + private transient long lastOnlineActivity; + private transient long lastActivity; private boolean hidden = false; + private transient boolean godStateBeforeAfk; - User(Player base, IEssentials ess) + User(final Player base, final IEssentials ess) { super(base, ess); teleport = new Teleport(this, ess); + godStateBeforeAfk = isGodModeEnabled(); } - User update(Player base) + User update(final Player base) { setBase(base); return this; } - public boolean isAuthorized(IEssentialsCommand cmd) + @Override + public boolean isAuthorized(final IEssentialsCommand cmd) { return isAuthorized(cmd, "essentials."); } - public boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix) + @Override + public boolean isAuthorized(final IEssentialsCommand cmd, final String permissionPrefix) { return isAuthorized(permissionPrefix + (cmd.getName().equals("r") ? "msg" : cmd.getName())); } - public boolean isAuthorized(String node) + @Override + public boolean isAuthorized(final String node) { if (isOp()) { @@ -62,11 +65,11 @@ public class User extends UserData implements Comparable, IReplyTo, IUser public void healCooldown() throws Exception { - Calendar now = new GregorianCalendar(); + final Calendar now = new GregorianCalendar(); if (getLastHealTimestamp() > 0) { - double cooldown = ess.getSettings().getHealCooldown(); - Calendar cooldownTime = new GregorianCalendar(); + 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)); @@ -78,12 +81,13 @@ public class User extends UserData implements Comparable, IReplyTo, IUser setLastHealTimestamp(now.getTimeInMillis()); } - public void giveMoney(double value) + @Override + public void giveMoney(final double value) { giveMoney(value, null); } - public void giveMoney(double value, CommandSender initiator) + public void giveMoney(final double value, final CommandSender initiator) { if (value == 0) { @@ -93,35 +97,36 @@ public class User extends UserData implements Comparable, IReplyTo, IUser sendMessage(Util.format("addedToAccount", Util.formatCurrency(value, ess))); if (initiator != null) { - initiator.sendMessage((Util.format("addedToOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName()))); + initiator.sendMessage(Util.format("addedToOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName())); } } - public void payUser(User reciever, double value) throws Exception + public void payUser(final User reciever, final double value) throws Exception { if (value == 0) { return; } - if (!canAfford(value)) - { - throw new Exception(Util.i18n("notEnoughMoney")); - } - else + if (canAfford(value)) { setMoney(getMoney() - value); reciever.setMoney(reciever.getMoney() + value); sendMessage(Util.format("moneySentTo", Util.formatCurrency(value, ess), reciever.getDisplayName())); reciever.sendMessage(Util.format("moneyRecievedFrom", Util.formatCurrency(value, ess), getDisplayName())); } + else + { + throw new Exception(Util.i18n("notEnoughMoney")); + } } - public void takeMoney(double value) + @Override + public void takeMoney(final double value) { takeMoney(value, null); } - public void takeMoney(double value, CommandSender initiator) + public void takeMoney(final double value, final CommandSender initiator) { if (value == 0) { @@ -131,13 +136,13 @@ public class User extends UserData implements Comparable, IReplyTo, IUser sendMessage(Util.format("takenFromAccount", Util.formatCurrency(value, ess))); if (initiator != null) { - initiator.sendMessage((Util.format("takenFromOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName()))); + initiator.sendMessage(Util.format("takenFromOthersAccount", Util.formatCurrency(value, ess), this.getDisplayName())); } } - public boolean canAfford(double cost) + public boolean canAfford(final double cost) { - double mon = getMoney(); + final double mon = getMoney(); return mon >= cost || isAuthorized("essentials.eco.loan"); } @@ -151,34 +156,37 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return justPortaled; } - public void setJustPortaled(boolean value) + public void setJustPortaled(final boolean value) { justPortaled = value; } - public void setReplyTo(CommandSender user) + @Override + public void setReplyTo(final CommandSender user) { replyTo = user; } + @Override public CommandSender getReplyTo() { return replyTo; } - public int compareTo(User t) + @Override + public int compareTo(final User other) { - return ChatColor.stripColor(this.getDisplayName()).compareToIgnoreCase(ChatColor.stripColor(t.getDisplayName())); + return ChatColor.stripColor(this.getDisplayName()).compareToIgnoreCase(ChatColor.stripColor(other.getDisplayName())); } @Override - public boolean equals(Object o) + public boolean equals(final Object object) { - if (!(o instanceof User)) + if (!(object instanceof User)) { return false; } - return ChatColor.stripColor(this.getDisplayName()).equalsIgnoreCase(ChatColor.stripColor(((User)o).getDisplayName())); + return ChatColor.stripColor(this.getDisplayName()).equalsIgnoreCase(ChatColor.stripColor(((User)object).getDisplayName())); } @@ -188,7 +196,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return ChatColor.stripColor(this.getDisplayName()).hashCode(); } - public Boolean canSpawnItem(int itemId) + public Boolean canSpawnItem(final int itemId) { return !ess.getSettings().itemSpawnBlacklist().contains(itemId); } @@ -203,17 +211,18 @@ public class User extends UserData implements Comparable, IReplyTo, IUser setHome("home", getLocation()); } - public void setHome(String name) + public void setHome(final String name) { setHome(name, getLocation()); } + @Override public void setLastLocation() { setLastLocation(getLocation()); } - public void requestTeleport(User player, boolean here) + public void requestTeleport(final User player, final boolean here) { teleportRequester = player; teleportRequestHere = here; @@ -274,14 +283,14 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return teleport; } - public long getLastActivity() + public long getLastOnlineActivity() { - return lastActivity; + return lastOnlineActivity; } - public void setLastActivity(long timestamp) + public void setLastOnlineActivity(final long timestamp) { - lastActivity = timestamp; + lastOnlineActivity = timestamp; } @Override @@ -291,12 +300,12 @@ public class User extends UserData implements Comparable, IReplyTo, IUser { try { - Method method = ess.getPaymentMethod().getMethod(); + final Method method = ess.getPaymentMethod().getMethod(); if (!method.hasAccount(this.getName())) { throw new Exception(); } - Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); + final Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); return account.balance(); } catch (Throwable ex) @@ -307,18 +316,18 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } @Override - public void setMoney(double value) + public void setMoney(final double value) { if (ess.getPaymentMethod().hasMethod()) { try { - Method method = ess.getPaymentMethod().getMethod(); + final Method method = ess.getPaymentMethod().getMethod(); if (!method.hasAccount(this.getName())) { throw new Exception(); } - Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); + final Method.MethodAccount account = ess.getPaymentMethod().getMethod().getAccount(this.getName()); account.set(value); } catch (Throwable ex) @@ -329,16 +338,23 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } @Override - public void setAfk(boolean set) + public void setAfk(final boolean set) { this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set); + if (set && !isAfk() && ess.getSettings().getFreezeAfkPlayers()) { + godStateBeforeAfk = isGodModeEnabled(); + setGodModeEnabled(true); + } + if (!set && isAfk() && ess.getSettings().getFreezeAfkPlayers()) { + setGodModeEnabled(godStateBeforeAfk); + } super.setAfk(set); } @Override public boolean toggleAfk() { - boolean now = super.toggleAfk(); + final boolean now = super.toggleAfk(); this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now); return now; } @@ -348,7 +364,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser return hidden; } - public void setHidden(boolean hidden) + public void setHidden(final boolean hidden) { this.hidden = hidden; } @@ -389,4 +405,42 @@ public class User extends UserData implements Comparable, IReplyTo, IUser ess.getBans().unbanByName(getName()); } } + + public void updateActivity() + { + if (isAfk()) + { + setAfk(false); + ess.broadcastMessage(getName(), Util.format("userIsNotAway", getDisplayName())); + return; + } + lastActivity = System.currentTimeMillis(); + } + + public void checkActivity() + { + final long autoafkkick = ess.getSettings().getAutoAfkKick(); + if (autoafkkick > 0 && lastActivity + autoafkkick * 1000 < System.currentTimeMillis() + && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) + { + final String kickReason = Util.i18n("autoAfkKickReason"); + kickPlayer(kickReason); + + + for (Player player : ess.getServer().getOnlinePlayers()) + { + final User user = ess.getUser(player); + if (user.isAuthorized("essentials.kick.notify")) + { + player.sendMessage(Util.format("playerKicked", Console.NAME, getName(), kickReason)); + } + } + } + final long autoafk = ess.getSettings().getAutoAfk(); + if (autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis()) + { + setAfk(true); + ess.broadcastMessage(getName(), Util.format("userIsAway", getDisplayName())); + } + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 3f1778966..6f4447f2b 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -91,7 +91,7 @@ nether: # Mob limit on spawnmob spawnmob-limit: 10 -#Shall we notify users when using /lightning +# Shall we notify users when using /lightning warn-on-smite: true # The message of the day, displayed on connect and by typing /motd. @@ -207,7 +207,7 @@ backup: # Interval in minutes interval: 60 # Add a command that backups your data, e.g. - # command: 'rdiff-backup World1 backups/World1' + #command: 'rdiff-backup World1 backups/World1' # Set this true to enable permission per warp. per-warp-permission: false @@ -223,7 +223,7 @@ debug: false # Don't forget to remove the # infront of the line #locale: de_DE -#turn off god mode when people exit +# Turn off god mode when people exit remove-god-on-disconnect: false # Use the permission system of bukkit @@ -231,8 +231,27 @@ remove-god-on-disconnect: false use-bukkit-permissions: false # Check for updates +# We do not recommend to disable this unless you are using CraftbukkitUpToDate or Bukget. +# If you don't like the notices in game, remove the permission +# essentials.admin.notices.update from your user. update-check: true +# Auto-AFK +# After this timeout in seconds, the user will be set as afk. +# Set to -1 for no timeout. +auto-afk: 300 + +# Auto-AFK Kick +# After this timeout in seconds, the user will be kicked from the server. +# Set to -1 for no timeout. +auto-afk-kick: -1 + +# Set this to true, if you want to freeze the player, if he is afk. +# Other players or monsters can't push him out of afk mode then. +# This will also enable temporary god mode for the afk player. +# The player has to use the command /afk to leave the afk mode. +freeze-afk-player: false + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | # @@ -246,7 +265,7 @@ respawn-at-home: false # If you enable this and remove default user access to the /sethome command, you can make beds the only way for players to set their home location. bed-sethome: false -#if no home is set send you to spawn when /home is used +# If no home is set send you to spawn when /home is used spawn-if-no-home: false # If users have essentials.sethome.multiple how many homes can they have @@ -289,13 +308,13 @@ economy-log-enabled: false # +------------------------------------------------------+ # ############################################################ -#Show other plugins commands in help +# Show other plugins commands in help non-ess-in-help: true -#Hide plugins which dont give a permission -#You can override a true value here for a single plugin by adding a permission to a user/group. -#The indervidual permission is: essentials.help., anyone with essentials.* or '*' will see all help this setting reguardless. -#You can use negitive permissions to remove access to just a single plugins help if the following is enabled. +# Hide plugins which dont give a permission +# You can override a true value here for a single plugin by adding a permission to a user/group. +# The indervidual permission is: essentials.help., anyone with essentials.* or '*' will see all help this setting reguardless. +# You can use negitive permissions to remove access to just a single plugins help if the following is enabled. hide-permissionless-help: true ############################################################ @@ -427,10 +446,10 @@ protect: # This only has an effect if "rails" or "signs" is also enabled. block-below: true - # Prevent placing blocks above protected rails, this is to stop a potential griefing + # Prevent placing blocks above protected rails, this is to stop a potential griefing prevent-block-on-rails: false - #Store blocks / signs in memory before writing + # Store blocks / signs in memory before writing memstore: false # Disable various default physics and behaviors @@ -470,11 +489,11 @@ protect: # Set true to disable useing for those people use: true - #Should we tell people they are not allowed to build + # Should we tell people they are not allowed to build warn-on-build-disallow: false - #disable weather options + # Disable weather options weather: storm: false thunder: false From 631583aef06fd00e41253a68b872b48f05c76eb9 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 15:30:30 +0200 Subject: [PATCH 28/53] Cleanup of EssentialsConf and delete empty files or files that are corrupt. --- .../earth2me/essentials/EssentialsConf.java | 148 +++++++++++------- 1 file changed, 93 insertions(+), 55 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 6c6567461..2e3920eba 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -1,6 +1,8 @@ package com.earth2me.essentials; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -19,12 +21,12 @@ import org.bukkit.util.config.Configuration; public class EssentialsConf extends Configuration { - private static final Logger logger = Logger.getLogger("Minecraft"); - private File configFile; - private String templateName = null; - private Class resourceClass = EssentialsConf.class; + 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(File configFile) + public EssentialsConf(final File configFile) { super(configFile); this.configFile = configFile; @@ -42,38 +44,84 @@ public class EssentialsConf extends Configuration { if (!configFile.getParentFile().mkdirs()) { - logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); + LOGGER.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); } } + if (configFile.exists() && configFile.length() == 0 && !configFile.delete()) + { + LOGGER.log(Level.SEVERE, "Could not delete file " + 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, Util.format("creatingConfigFromTemplate", configFile.toString())); + LOGGER.log(Level.INFO, Util.format("creatingConfigFromTemplate", configFile.toString())); createFromTemplate(); } else { try { - logger.log(Level.INFO, Util.format("creatingEmptyConfig", configFile.toString())); + LOGGER.log(Level.INFO, Util.format("creatingEmptyConfig", configFile.toString())); if (!configFile.createNewFile()) { - logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); + LOGGER.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); } } catch (IOException ex) { - logger.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString()), ex); + LOGGER.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString()), ex); } } } - try { + + try + { super.load(); - } catch(RuntimeException e) { - logger.log(Level.INFO, "File: " + configFile.toString()); + } + catch (RuntimeException e) + { + LOGGER.log(Level.INFO, "File: " + configFile.toString()); throw e; } + if (this.root == null) { this.root = new HashMap(); @@ -89,7 +137,7 @@ public class EssentialsConf extends Configuration istr = resourceClass.getResourceAsStream(templateName); if (istr == null) { - logger.log(Level.SEVERE, Util.format("couldNotFindTemplate", templateName)); + LOGGER.log(Level.SEVERE, Util.format("couldNotFindTemplate", templateName)); return; } ostr = new FileOutputStream(configFile); @@ -104,7 +152,7 @@ public class EssentialsConf extends Configuration } catch (IOException ex) { - logger.log(Level.SEVERE, Util.format("failedToWriteConfig", configFile.toString()), ex); + LOGGER.log(Level.SEVERE, Util.format("failedToWriteConfig", configFile.toString()), ex); return; } finally @@ -129,12 +177,12 @@ public class EssentialsConf extends Configuration } catch (IOException ex) { - logger.log(Level.SEVERE, Util.format("failedToCloseConfig", configFile.toString()), ex); + LOGGER.log(Level.SEVERE, Util.format("failedToCloseConfig", configFile.toString()), ex); } } } - public void setTemplateName(String templateName) + public void setTemplateName(final String templateName) { this.templateName = templateName; } @@ -144,48 +192,48 @@ public class EssentialsConf extends Configuration return configFile; } - public void setTemplateName(String templateName, Class resClass) + public void setTemplateName(final String templateName, final Class resClass) { this.templateName = templateName; this.resourceClass = resClass; } - public boolean hasProperty(String path) + public boolean hasProperty(final String path) { return getProperty(path) != null; } - public Location getLocation(String path, Server server) throws Exception + public Location getLocation(final String path, final Server server) throws Exception { - String worldName = getString((path != null ? path + "." : "") + "world"); + final String worldName = getString((path == null ? "" : path + ".") + "world"); if (worldName == null || worldName.isEmpty()) { return null; } - World world = server.getWorld(worldName); + final World world = server.getWorld(worldName); if (world == null) { throw new Exception(Util.i18n("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)); + 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(String path, Location loc) + 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()); + 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(String path) + public ItemStack getItemStack(final String path) { return new ItemStack( Material.valueOf(getString(path + ".type", "AIR")), @@ -194,9 +242,9 @@ public class EssentialsConf extends Configuration (byte)getInt(path + ".data", 0)*/); } - public void setProperty(String path, ItemStack stack) + public void setProperty(final String path, final ItemStack stack) { - Map map = new HashMap(); + final Map map = new HashMap(); map.put("type", stack.getType().toString()); map.put("amount", stack.getAmount()); map.put("damage", stack.getDurability()); @@ -205,40 +253,30 @@ public class EssentialsConf extends Configuration setProperty(path, map); } - public long getLong(String path, long def) + public long getLong(final String path, final long def) { - Number num; try { - num = (Number)getProperty(path); + final Number num = (Number)getProperty(path); + return num == null ? def : num.longValue(); } - catch(ClassCastException ex) + catch (ClassCastException ex) { return def; } - if (num == null) - { - return def; - } - return num.longValue(); } @Override - public double getDouble(String path, double def) + public double getDouble(final String path, final double def) { - Number num; try { - num = (Number)getProperty(path); + Number num = (Number)getProperty(path); + return num == null ? def : num.doubleValue(); } - catch(ClassCastException ex) + catch (ClassCastException ex) { return def; } - if (num == null) - { - return def; - } - return num.doubleValue(); } } From 34987d6e07380c22bd643011ad48e9c8bc81c7cb Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 15:30:56 +0200 Subject: [PATCH 29/53] Fixes for afk --- .../essentials/EssentialsPlayerListener.java | 17 +++++++++++++---- .../src/com/earth2me/essentials/User.java | 4 ++-- Essentials/src/config.yml | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index ffdefb663..e6a7f3d3d 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -89,11 +89,17 @@ public class EssentialsPlayerListener extends PlayerListener } final User user = ess.getUser(event.getPlayer()); - if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers()) { - event.setCancelled(true); + if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers()) + { + final Location from = event.getFrom(); + final Location to = event.getTo().clone(); + to.setX(from.getX()); + to.setY(from.getY()); + to.setZ(from.getZ()); + event.setTo(to); return; } - + user.updateActivity(); if (!ess.getSettings().getNetherPortalsEnabled()) @@ -478,6 +484,9 @@ public class EssentialsPlayerListener extends PlayerListener } } } - user.updateActivity(); + if (!cmd.equalsIgnoreCase("afk")) + { + user.updateActivity(); + } } } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 722cfadb1..3af6a5a4e 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -17,7 +17,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private transient User teleportRequester; private transient boolean teleportRequestHere; private transient final Teleport teleport; - private transient long lastOnlineActivity; + private transient long lastOnlineActivity = System.currentTimeMillis();; private transient long lastActivity; private boolean hidden = false; private transient boolean godStateBeforeAfk; @@ -437,7 +437,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser } } final long autoafk = ess.getSettings().getAutoAfk(); - if (autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis()) + if (!isAfk() && autoafk > 0 && lastActivity + autoafk * 1000 < System.currentTimeMillis()) { setAfk(true); ess.broadcastMessage(getName(), Util.format("userIsAway", getDisplayName())); diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 6f4447f2b..6884960c1 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -250,7 +250,7 @@ auto-afk-kick: -1 # Other players or monsters can't push him out of afk mode then. # This will also enable temporary god mode for the afk player. # The player has to use the command /afk to leave the afk mode. -freeze-afk-player: false +freeze-afk-players: false ############################################################ # +------------------------------------------------------+ # From 0543a8f8ba60548376bf4cff6f0dc673a98ecb73 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 15:43:26 +0200 Subject: [PATCH 30/53] Prevent kick for floating while afk & frozen --- .../earth2me/essentials/EssentialsPlayerListener.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index e6a7f3d3d..fbd6995c5 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -96,7 +96,14 @@ public class EssentialsPlayerListener extends PlayerListener to.setX(from.getX()); to.setY(from.getY()); to.setZ(from.getZ()); - event.setTo(to); + try + { + event.setTo(Util.getSafeDestination(to)); + } + catch (Exception ex) + { + event.setTo(to); + } return; } From 14030deb164f82978a2778daa330a74af82309dc Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 16:19:23 +0200 Subject: [PATCH 31/53] Cleanup of repair command and allow different charges for each item. --- .../essentials/commands/Commandrepair.java | 91 ++++++++++++------- 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index df0509f94..ea1d1fc9e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -1,21 +1,17 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.earth2me.essentials.commands; +import com.earth2me.essentials.ChargeException; +import com.earth2me.essentials.IUser; +import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import java.util.ArrayList; +import java.util.List; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; -import org.bukkit.material.MaterialData; -/** - * - * @author Seiji - */ public class Commandrepair extends EssentialsCommand { public Commandrepair() @@ -24,7 +20,7 @@ public class Commandrepair extends EssentialsCommand } @Override - public void run(Server server, User user, String commandLabel, String[] args) throws Exception + public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { @@ -33,7 +29,20 @@ public class Commandrepair extends EssentialsCommand if (args[0].equalsIgnoreCase("hand")) { - ItemStack item = user.getItemInHand(); + final ItemStack item = user.getItemInHand(); + final String itemName = item.getType().toString().toLowerCase(); + final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); + + try + { + charge.isAffordableFor(user); + } + catch (Exception ex) + { + user.sendMessage(ex.getMessage()); + return; + } + try { repairItem(item); @@ -43,26 +52,26 @@ public class Commandrepair extends EssentialsCommand user.sendMessage(e.getMessage()); return; } + charge.charge(user); - String itemName = item.getType().toString().toLowerCase().replace('_', ' '); charge(user); - user.sendMessage(Util.format("repair", itemName)); + user.sendMessage(Util.format("repair", itemName.replace('_', ' '))); } else if (args[0].equalsIgnoreCase("all")) { - StringBuilder itemList = new StringBuilder(); - itemList.append(repairItems(user.getInventory().getContents())); + final List repaired = new ArrayList(); + repairItems(user.getInventory().getContents(), user, repaired); - String armor = repairItems(user.getInventory().getArmorContents()); + repairItems(user.getInventory().getArmorContents(), user, repaired); - if (itemList.length() == 0) + if (repaired.isEmpty()) { user.sendMessage(Util.format("repairNone")); } else { charge(user); - user.sendMessage(Util.format("repair", Util.joinList(itemList))); + user.sendMessage(Util.format("repair", Util.joinList(repaired))); } } @@ -72,10 +81,9 @@ public class Commandrepair extends EssentialsCommand } } - private void repairItem(ItemStack item) throws Exception + private void repairItem(final ItemStack item) throws Exception { - Material material = Material.getMaterial(item.getTypeId()); - String error = null; + final Material material = Material.getMaterial(item.getTypeId()); if (material.isBlock() || material.getMaxDurability() < 0) { throw new Exception(Util.i18n("repairInvalidType")); @@ -89,28 +97,43 @@ public class Commandrepair extends EssentialsCommand item.setDurability((short)0); } - private String repairItems(ItemStack[] items) + private void repairItems(final ItemStack[] items, final IUser user, final List repaired) { - StringBuilder itemList = new StringBuilder(); for (ItemStack item : items) { + final String itemName = item.getType().toString().toLowerCase(); + final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); + boolean canBeRepaired = true; try { - repairItem(item); - if (itemList.length() > 0) - { - itemList.append(", "); - } - - String itemName = item.getType().toString().toLowerCase().replace('_', ' '); - itemList.append(itemName); + charge.isAffordableFor(user); } - catch (Exception e) + catch (ChargeException ex) { + canBeRepaired = false; + } + + if (canBeRepaired) + { + try + { + repairItem(item); + } + catch (Exception e) + { + continue; + } + try + { + charge.charge(user); + } + catch (ChargeException ex) + { + user.sendMessage(ex.getMessage()); + } + repaired.add(itemName.replace('_', ' ')); } } - - return itemList.toString(); } } From 394a786044055b8ebaba1c6046ce3de6e96ccb50 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 16:21:29 +0200 Subject: [PATCH 32/53] Another fix for /repair --- .../essentials/commands/Commandrepair.java | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index ea1d1fc9e..d41f5580f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -103,37 +103,33 @@ public class Commandrepair extends EssentialsCommand { final String itemName = item.getType().toString().toLowerCase(); final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); - boolean canBeRepaired = true; try { charge.isAffordableFor(user); } catch (ChargeException ex) { - canBeRepaired = false; + user.sendMessage(ex.getMessage()); + continue; } - if (canBeRepaired) + try { - try - { - repairItem(item); - } - catch (Exception e) - { - continue; - } - try - { - charge.charge(user); - } - catch (ChargeException ex) - { - user.sendMessage(ex.getMessage()); - } - repaired.add(itemName.replace('_', ' ')); + repairItem(item); } - + catch (Exception e) + { + continue; + } + try + { + charge.charge(user); + } + catch (ChargeException ex) + { + user.sendMessage(ex.getMessage()); + } + repaired.add(itemName.replace('_', ' ')); } } } From f18c3c7e1de14beffb85bcf45840a64c9544b282 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 16:56:45 +0200 Subject: [PATCH 33/53] Disable /nick if change-displayname is disabled Some translations --- .../src/com/earth2me/essentials/User.java | 2 +- .../essentials/commands/Commandnick.java | 10 ++++++++ Essentials/src/messages.properties | 22 +++++++++-------- Essentials/src/messages_da.properties | 24 ++++++++++--------- Essentials/src/messages_de.properties | 24 ++++++++++--------- Essentials/src/messages_en.properties | 24 ++++++++++--------- Essentials/src/messages_fr.properties | 24 ++++++++++--------- Essentials/src/messages_nl.properties | 24 ++++++++++--------- 8 files changed, 88 insertions(+), 66 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 3af6a5a4e..d160a6f07 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -423,7 +423,7 @@ public class User extends UserData implements Comparable, IReplyTo, IUser if (autoafkkick > 0 && lastActivity + autoafkkick * 1000 < System.currentTimeMillis() && !isAuthorized("essentials.kick.exempt") && !isAuthorized("essentials.afk.kickexempt")) { - final String kickReason = Util.i18n("autoAfkKickReason"); + final String kickReason = Util.format("autoAfkKickReason", autoafkkick/60.0); kickPlayer(kickReason); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java index 3731b24c5..99c779ba4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java @@ -21,6 +21,11 @@ public class Commandnick extends EssentialsCommand { throw new NotEnoughArgumentsException(); } + + if (!ess.getSettings().changeDisplayName()) { + user.sendMessage(Util.i18n("nickDisplayName")); + return; + } if (args.length > 1) { @@ -80,6 +85,11 @@ public class Commandnick extends EssentialsCommand throw new NotEnoughArgumentsException(); } + if (!ess.getSettings().changeDisplayName()) { + sender.sendMessage(Util.i18n("nickDisplayName")); + return; + } + setOthersNickname(server, sender, args); } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 52cefd453..5190c6968 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -8,6 +8,7 @@ alertBroke = broke: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3} alertPlaced = placed: alertUsed = used: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Use the /back command to return to your death point. backUsageMsg = \u00a77Returning to previous location. backupFinished = Backup finished @@ -96,9 +97,9 @@ helpConsole = To view help from the console, type ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: holeInFloor = Hole in floor -homes = Homes: {0} homeSet = \u00a77Home set. homeSetToBed = \u00a77Your home is now set to this bed. +homes = Homes: {0} hour = hour hours = hours ignorePlayer = You ignore player {0} from now on. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} tried to speak, but is muted. needTpohere = You need access to /tpohere to teleport other players. negativeBalanceError = User is not allowed to have a negative balance. nickChanged = Nickname changed. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cThat name is already in use. nickNamesAlpha = \u00a7cNicknames must be alphanumeric. nickNoMore = \u00a77You no longer have a nickname. @@ -211,6 +213,14 @@ numberRequired = A number goes there, silly. onlyDayNight = /time only supports day/night. onlyPlayers = Only in-game players can use {0}. onlySunStorm = /weather only supports sun/storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Error parsing {0} on line {1} pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. permissionsError = Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Question]\u00a7f {0} reloadAllPlugins = \u00a77Reloaded all plugins. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Your voice has been silenced warpDeleteError = Problem deleting the warp file. warpListPermission = \u00a7cYou do not have Permission to list that warps. warpNotExist = That warp does not exist. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Warp {0} set. warpUsePermission = \u00a7cYou do not have Permission to use that warp. warpingTo = \u00a77Warping to {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77You set the weather to storm in your world weatherStormFor = \u00a77You set the weather to storm in your world for {0} seconds weatherSun = \u00a77You set the weather to sun in your world diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 2000c0c3b..b27154190 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -8,14 +8,15 @@ alertBroke = \u00f8delagde: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} ved: {3} alertPlaced = placerede: alertUsed = brugte: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Brug /back kommandoen for at retunere til dit d\u00f8ds punkt. backUsageMsg = \u00a77Returnere til tidligere placering. backupFinished = Backup sluttede backupStarted = Backup startede balance = \u00a77Balance: {0} balanceTop = \u00a77 Top {0} saldi -banIpAddress = \u00a77Bannede IP addresse banExempt = \u00a7cDu kan ikke forbyde den p\u00e5g\u00e6ldende spiller. +banIpAddress = \u00a77Bannede IP addresse bannedIpsFileError = Fejl i l\u00e6sning af banned-ips.txt bannedIpsFileNotFound = banned-ips.txt ikke fundet bannedPlayersFileError = Fejl i l\u00e6sning af banned-players.txt @@ -96,9 +97,9 @@ helpConsole = For at se hj\u00e6lp fra konsolen, skriv ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f: holeInFloor = Hul i gulv -homes = Homes: {0} homeSet = \u00a77Hjem sat. homeSetToBed = \u00a77Dit hjem er nu sat til denne seng. +homes = Homes: {0} hour = time hours = timer ignorePlayer = Du ignorere spiller {0} fra nu af. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} pr\u00f8vede at snakke, men er muted. needTpohere = Du skal have adgang til /tpohere for at teleporter andre spillere. negativeBalanceError = Brugeren er ikke tilladt at have en negativ saldo. nickChanged = Kaldenavn \u00e6ndret. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cDet navn er allerede i brug. nickNamesAlpha = \u00a7cKaldenavne skal v\u00e6re alfanumeriske. nickNoMore = \u00a7Du har ikke l\u00e6ngere et kaldenavn. @@ -211,6 +213,14 @@ numberRequired = Der skal v\u00e6re et nummer, fjolle. onlyDayNight = /time underst\u00f8tter kun day/night. onlyPlayers = Kun in-game spillere kan bruge {0}. onlySunStorm = /weather only supports sun/storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Fejl ved parsing {0} p\u00e5 linje {1} pendingTeleportCancelled = \u00a7cVentende teleportations anmodning aflyst. permissionsError = Mangler Permissions/GroupManager; chat pr\u00e6fikser/suffikser vil v\u00e6re sl\u00e5et fra. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Beskyttelses ejer: {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Sp\u00f8rgsm\u00e5l]\u00a7f {0} reloadAllPlugins = \u00a77Genindl\u00e6ste alle tilf\u00f8jelser. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Din stemme er blevet d\u00e6mpet warpDeleteError = Problem ved sletning af warp filen. warpListPermission = \u00a7cDu har ikke tilladelse til at liste de warps. warpNotExist = Den warp eksisterer ikke. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Warp {0} sat. warpUsePermission = \u00a7cDu har ikke tilladelse til at benytte den warp. warpingTo = \u00a77Warper til {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77Du har sat vejret til storm i din verden weatherStormFor = \u00a77Du har sat vejret til storm i din verden i {0} sekunder weatherSun = \u00a77Du har sat vejret til sol diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 02e015b15..a38ba3d6e 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -8,14 +8,15 @@ alertBroke = zerst\u00f6rt: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} bei: {3} alertPlaced = platziert: alertUsed = benutzt: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Benutze den Befehl /back um zu deinem Todespunkt zur\u00fcck zu kehren. backUsageMsg = \u00a77Kehre zur letzten Position zur\u00fcck. backupFinished = Backup beendet backupStarted = Backup gestartet balance = \u00a77Geldb\u00f6rse: {0} balanceTop = \u00a77 Top {0} Guthaben -banIpAddress = \u00a77IP-Adresse gesperrt. banExempt = \u00a7cDu kannst diesen Spieler nicht sperren. +banIpAddress = \u00a77IP-Adresse gesperrt. bannedIpsFileError = Fehler beim Lesen von banned-ips.txt bannedIpsFileNotFound = banned-ips.txt nicht gefunden bannedPlayersFileError = Fehler beim Lesen von banned-players.txt @@ -96,9 +97,9 @@ helpConsole = Um die Hilfe der Konsole zu sehen, schreibe ?. helpOp = \u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f: holeInFloor = Loch im Boden -homes = Homes: {0} homeSet = \u00a77Zuhause gesetzt. homeSetToBed = \u00a77Dein Zuhause ist nun an diesem Bett. +homes = Homes: {0} hour = Stunde hours = Stunden ignorePlayer = Du ignorierst ab jetzt Spieler {0}. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} versuchte zu sprechen, aber ist stumm geschalt. needTpohere = Du brauchst Zugriff auf /tpohere um andere Spieler teleportieren zu k\u00f6nnen. negativeBalanceError = Spieler darf keine Schulden machen. nickChanged = Nickname ge\u00e4ndert. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cDieser Name wird bereits verwendet. nickNamesAlpha = \u00a7cNicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten. nickNoMore = \u00a7Du hast keinen Nicknamen mehr. @@ -211,6 +213,14 @@ numberRequired = Ein Zahl wird ben\u00f6tigt. onlyDayNight = /time unterst\u00fctzt nur day und night. onlyPlayers = Nur Spieler k\u00f6nnen {0} benutzen. onlySunStorm = /weather unterst\u00fctzt nur sun und storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Fehler beim Parsen von {0} in Zeile {1} pendingTeleportCancelled = \u00a7cLaufende Teleportierung abgebrochen. permissionsError = Permissions/GroupManager fehlt; Chat-Prefixe/-Suffixe sind ausgeschaltet. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Besitzer dieses Blocks: {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Frage]\u00a7f {0} reloadAllPlugins = \u00a77Alle plugins neu geladen. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Du bist stumm warpDeleteError = Fehler beim L\u00f6schen der Warp-Datei. warpListPermission = \u00a7cDu hast keine Berechtigung, die Warp-Punkte anzuzeigen. warpNotExist = Warp-Punkt existiert nicht. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Warp-Punkt {0} wurde erstellt. warpUsePermission = \u00a7cDu hast keinen Zugriff f\u00fcr diesen Warp-Punkt. warpingTo = \u00a77Teleportiere zu Warp-Punkt {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77In deiner Welt st\u00fcrmt es nun. weatherStormFor = \u00a77In deiner Welt st\u00fcrmt es nun f\u00fcr {0} Sekunden. weatherSun = \u00a77In deiner Welt scheint nun die Sonne. diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index c96c9ecb7..6f1809c05 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -8,14 +8,15 @@ alertBroke = broke: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3} alertPlaced = placed: alertUsed = used: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Use the /back command to return to your death point. backUsageMsg = \u00a77Returning to previous location. backupFinished = Backup finished backupStarted = Backup started balance = \u00a77Balance: {0} balanceTop = \u00a77 Top {0} balances -banIpAddress = \u00a77Banned IP address banExempt = \u00a7cYou can not ban that player. +banIpAddress = \u00a77Banned IP address bannedIpsFileError = Error reading banned-ips.txt bannedIpsFileNotFound = banned-ips.txt not found bannedPlayersFileError = Error reading banned-players.txt @@ -96,9 +97,9 @@ helpConsole = To view help from the console, type ?. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: holeInFloor = Hole in floor -homes = Homes: {0} homeSet = \u00a77Home set. homeSetToBed = \u00a77Your home is now set to this bed. +homes = Homes: {0} hour = hour hours = hours ignorePlayer = You ignore player {0} from now on. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} tried to speak, but is muted. needTpohere = You need access to /tpohere to teleport other players. negativeBalanceError = User is not allowed to have a negative balance. nickChanged = Nickname changed. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cThat name is already in use. nickNamesAlpha = \u00a7cNicknames must be alphanumeric. nickNoMore = \u00a77You no longer have a nickname. @@ -211,6 +213,14 @@ numberRequired = A number goes there, silly. onlyDayNight = /time only supports day/night. onlyPlayers = Only in-game players can use {0}. onlySunStorm = /weather only supports sun/storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Error parsing {0} on line {1} pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. permissionsError = Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Question]\u00a7f {0} reloadAllPlugins = \u00a77Reloaded all plugins. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Your voice has been silenced warpDeleteError = Problem deleting the warp file. warpListPermission = \u00a7cYou do not have Permission to list that warps. warpNotExist = That warp does not exist. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Warp {0} set. warpUsePermission = \u00a7cYou do not have Permission to use that warp. warpingTo = \u00a77Warping to {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77You set the weather to storm in your world weatherStormFor = \u00a77You set the weather to storm in your world for {0} seconds weatherSun = \u00a77You set the weather to sun in your world diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 79016f02d..c564d0d76 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -8,14 +8,15 @@ alertBroke = a cass\u00e9: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} \u00e0:{3} alertPlaced = a plac\u00e9: alertUsed = a utilis\u00e9: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Utilisez la commande /back pour retourner \u00e0 l''endroit ou vous \u00eates mort. backUsageMsg = \u00a77Retour a votre emplacement pr\u00e9c\u00e8dent. backupFinished = Backup termin\u00e9 backupStarted = D\u00e9but du backup balance = \u00a77Solde: {0} balanceTop = \u00a77 Top {0} soldes -banIpAddress = \u00a77Adresse IP banni banExempt = \u00a77Vous ne pouvez pas interdire ce joueur. +banIpAddress = \u00a77Adresse IP banni bannedIpsFileError = Erreur de lecture de banned-ips.txt bannedIpsFileNotFound = Fichier banned-ips.txt introuvable bannedPlayersFileError = Erreur lors de la lecture de banned-players.txt @@ -96,9 +97,9 @@ helpConsole = Pour voir l''aide tapez ? helpOp = \u00a7c[Aide Admin]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f. holeInFloor = Trou dans le Sol. -homes = Homes: {0} homeSet = \u00a77Home d\u00e9fini. homeSetToBed = \u00a77Votre home est d\u00e9sormais d\u00e9fini sur ce lit. +homes = Homes: {0} hour = heure hours = heures ignorePlayer = Vous ignorez d\u00e9sormais {0}. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} a essay\u00e9 de parler mais est muet. needTpohere = Vous avez besoin de l''acc\u00e8s \u00e0 /tpohere pour t\u00e9l\u00e9porter d''autres joueurs. negativeBalanceError = L''utilisateur n''est pas autoris\u00e9 \u00e0 avoir un solde n\u00e9gatif. nickChanged = Pseudo modifi\u00e9. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cCe nom est d\u00e9j\u00e0 utilis\u00e9. nickNamesAlpha = \u00a7cLes pseudos doivent \u00eatre alphanum\u00e9riques. nickNoMore = \u00a7Vous n''avez plus de surnom. @@ -211,6 +213,14 @@ numberRequired = On a besoin d''un nombre ici, idiot. onlyDayNight = /time ne supporte que (jour) day/night (nuit). onlyPlayers = Seulement les joueurs en jeu peuvent utiliser {0}. onlySunStorm = /weather only supports sun/storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Erreur de conversion {0} \u00e0 la ligne {1} pendingTeleportCancelled = \u00a7cRequete de t\u00e9l\u00e9portation annul\u00e9e. permissionsError = Permissions/GroupManager manquant, les pr\u00e9fixes et suffixes ne seront pas affich\u00e9s. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Question]\u00a7f {0} reloadAllPlugins = \u00a77Tous les plugins ont \u00e9t\u00e9 recharg\u00e9s. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Votre voix a \u00e9t\u00e9 r\u00e9duite au silence warpDeleteError = Probl\u00e8me concernant la suppression du fichier warp. warpListPermission = \u00a7cVous n''avez pas la permission d''afficher la liste des warps. warpNotExist = Ce warp n''existe pas. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Le warp {0} a \u00e9t\u00e9 cr\u00e9\u00e9. warpUsePermission = \u00a7cVous n''avez pas la permission d''utiliser ce warp. warpingTo = \u00a77T\u00e9l\u00e9portation au warp {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77Vous avez d\u00e9fini l''orage dans votre monde weatherStormFor = \u00a77Vous avez d\u00e9fini l''orage dans votre monde pour {0} secondes. weatherSun = \u00a77Vous avez mis le beau temps dans votre monde diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index c9fa21273..cd214b5d4 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -8,14 +8,15 @@ alertBroke = gebroken: alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} bij: {3} alertPlaced = geplaatst: alertUsed = gebruikt: +autoAfkKickReason=You have been kicked for idling more than {0} minutes. backAfterDeath = \u00a77Gebruik het /back command om terug te keren naar je sterfplaats. backUsageMsg = \u00a77Naar de vorige locatie aan het gaan. backupFinished = Backup voltooid backupStarted = Backup gestart balance = \u00a77Saldo: {0} balanceTop = \u00a77 Top {0} saldi -banIpAddress = \u00a77Verbannen IP-adres banExempt = \u00a77Je kunt deze speler niet verbannen. +banIpAddress = \u00a77Verbannen IP-adres bannedIpsFileError = Fout bij het lezen van banned-ips.txt bannedIpsFileNotFound = banned-ips.txt werd niet gevonden bannedPlayersFileError = Fout bij het lezen van banned-players.txt @@ -96,9 +97,9 @@ helpConsole = type ? om de consolehelp weer te geven. helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpPages = Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f: holeInFloor = Gat in de vloer -homes = Homes: {0} homeSet = \u00a77Home ingesteld. homeSetToBed = \u00a77Je home is is nu verplaatst naar dit bed. +homes = Homes: {0} hour = uur hours = uren ignorePlayer = Je negeert {0} vanaf nu. @@ -179,6 +180,7 @@ mutedUserSpeaks = {0} probeerde te praten, maar is gemute. needTpohere = Je moet toegang krijgen tot /tpohere om naar andere spelers te teleporteren. negativeBalanceError = Speler is niet toegestaan om een negatief saldo te hebben. nickChanged = Nickname veranderd. +nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickInUse = \u00a7cDie naam is al in gebruik. nickNamesAlpha = \u00a7cNicknames moeten alfanumeriek zijn. nickNoMore = \u00a7Je hebt geen nickname meer. @@ -211,6 +213,14 @@ numberRequired = Er moet daar een nummer, grapjas. onlyDayNight = /time ondersteund alleen day/night. onlyPlayers = Alleen in-game spelers kunnen {0} gebruiken. onlySunStorm = /weather only supports sun/storm. +pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. +pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. +pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. +pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. +pTimePlayers = These players have their own time: +pTimeReset = Player time has been reset for: \u00a7e{0} +pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} +pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} parseError = Fout bij ontleding {0} op regel {1} pendingTeleportCancelled = \u00a7cAangevraagde teleportatie afgelast. permissionsError = Permissions/GroupManager ontbreekt; chat prefixes/suffixes worden uitgeschakeld. @@ -235,14 +245,6 @@ powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemoveAll = All commands removed from {0}. protectionOwner = \u00a76[EssentialsProtect] Beschermingeigenaar: {0} -pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. -pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. -pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. -pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. -pTimePlayers = These players have their own time: -pTimeReset = Player time has been reset for: \u00a7e{0} -pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} -pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} questionFormat = \u00a77[Vraag]\u00a7f {0} reloadAllPlugins = \u00a77Alle plugins zijn herladen. repair = You have successfully repaired your: \u00a7e{0}. @@ -332,10 +334,10 @@ voiceSilenced = \u00a77Je kan niet meer praten warpDeleteError = Fout bij het verwijderen van het warp bestand. warpListPermission = \u00a7cJe hebt geen toegang om die warp te maken. warpNotExist = Die warp bestaat niet. -warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpSet = \u00a77Warp {0} ingesteld. warpUsePermission = \u00a7cOnbevoegd om die warp te gebruiken. warpingTo = \u00a77Aan het warpen naar {0}. +warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. weatherStorm = \u00a77Je hebt het weer naar storm gezet in de wereld weatherStormFor = \u00a77Je hebt het weer in de wereld naar storm gezet voor {0} seconde weatherSun = \u00a77Je hebt het weer naar zon gezet in de wereld From 087e600d6d6d9e6192f62d25d76f541fd14740b5 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:01:01 +0200 Subject: [PATCH 34/53] Prevent that wrong ids are used in /kit --- .../src/com/earth2me/essentials/commands/Commandkit.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index 849ec2398..7f9a91590 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -9,6 +9,7 @@ import org.bukkit.Server; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; import java.util.GregorianCalendar; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -124,7 +125,7 @@ public class Commandkit extends EssentialsCommand for (String d : items) { String[] parts = d.split("[^0-9]+", 3); - int id = Integer.parseInt(parts[0]); + int id = Material.getMaterial(Integer.parseInt(parts[0])).getId(); int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1; short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0; HashMap overfilled = user.getInventory().addItem(new ItemStack(id, amount, data)); From 65be2dba9927d971066948f01e97ebbda79fe5a1 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:09:43 +0200 Subject: [PATCH 35/53] Protect detector/powered rails --- .../EssentialsProtectBlockListener.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java index 7b5f93d0e..8717825b3 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java @@ -61,7 +61,7 @@ public class EssentialsProtectBlockListener extends BlockListener } final Block below = blockPlaced.getRelative(BlockFace.DOWN); - if (below.getType() == Material.RAILS + if ((below.getType() == Material.RAILS || below.getType() == Material.POWERED_RAIL || below.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.prevent_block_on_rail) && prot.getStorage().isProtected(below, user.getName())) { @@ -70,7 +70,7 @@ public class EssentialsProtectBlockListener extends BlockListener } final List protect = new ArrayList(); - if (blockPlaced.getType() == Material.RAILS + if ((blockPlaced.getType() == Material.RAILS || blockPlaced.getType() == Material.POWERED_RAIL || blockPlaced.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails) && user.isAuthorized("essentials.protect")) { @@ -103,8 +103,8 @@ public class EssentialsProtectBlockListener extends BlockListener { return; } - Block block = event.getBlock(); - if (block.getType() == Material.RAILS + final Block block = event.getBlock(); + if ((block.getType() == Material.RAILS || block.getType() == Material.POWERED_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); @@ -155,7 +155,7 @@ public class EssentialsProtectBlockListener extends BlockListener return; } final Block toBlock = event.getToBlock(); - if (toBlock.getType() == Material.RAILS + if ((toBlock.getType() == Material.RAILS || toBlock.getType() == Material.POWERED_RAIL || toBlock.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); @@ -196,7 +196,7 @@ public class EssentialsProtectBlockListener extends BlockListener return; } final Block block = event.getBlock(); - if (block.getType() == Material.RAILS && prot.getSettingBool(ProtectConfig.protect_rails)) + if ((block.getType() == Material.RAILS || block.getType() == Material.POWERED_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); return; @@ -257,10 +257,10 @@ public class EssentialsProtectBlockListener extends BlockListener if (user.isAuthorized("essentials.protect.admin")) { - if (type == Material.WALL_SIGN || type == Material.SIGN_POST || type == Material.RAILS) + if (type == Material.WALL_SIGN || type == Material.SIGN_POST || type == Material.RAILS || type == Material.POWERED_RAIL || type == Material.DETECTOR_RAIL) { storage.unprotectBlock(block); - if (type == Material.RAILS || type == Material.SIGN_POST) + if (type == Material.RAILS || type == Material.POWERED_RAIL || type == Material.DETECTOR_RAIL || type == Material.SIGN_POST) { final Block below = block.getRelative(BlockFace.DOWN); storage.unprotectBlock(below); @@ -293,10 +293,10 @@ public class EssentialsProtectBlockListener extends BlockListener } else { - if (type == Material.WALL_SIGN || type == Material.SIGN_POST || type == Material.RAILS) + if (type == Material.WALL_SIGN || type == Material.SIGN_POST || type == Material.RAILS || type == Material.POWERED_RAIL || type == Material.DETECTOR_RAIL) { storage.unprotectBlock(block); - if (type == Material.RAILS || type == Material.SIGN_POST) + if (type == Material.RAILS || type == Material.POWERED_RAIL || type == Material.DETECTOR_RAIL || type == Material.SIGN_POST) { final Block below = block.getRelative(BlockFace.DOWN); storage.unprotectBlock(below); @@ -337,7 +337,11 @@ public class EssentialsProtectBlockListener extends BlockListener return; } if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS - || block.getType() == Material.RAILS) + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); @@ -385,7 +389,11 @@ public class EssentialsProtectBlockListener extends BlockListener return; } if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS - || block.getType() == Material.RAILS) + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); From d3302dea00d9edb1fc0896382c2cd4a53e49f382 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:11:15 +0200 Subject: [PATCH 36/53] Protect detector/powered rails --- .../protect/EssentialsProtectEntityListener.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index d96da20a7..8dd3335f5 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -263,7 +263,12 @@ public class EssentialsProtectEntityListener extends EntityListener for (Block block : event.blockList()) { - if ((block.getType() == Material.RAILS || block.getRelative(BlockFace.UP).getType() == Material.RAILS) + if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { event.setCancelled(true); From 033babd586d0d2319ce0a4d0ed88dc740ea2a59a Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 17:50:44 +0200 Subject: [PATCH 37/53] Cleanup & output result of backup command --- .../src/com/earth2me/essentials/Backup.java | 146 ++++++++++++------ 1 file changed, 96 insertions(+), 50 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Backup.java b/Essentials/src/com/earth2me/essentials/Backup.java index 6b88eaef9..b7b441b1e 100644 --- a/Essentials/src/com/earth2me/essentials/Backup.java +++ b/Essentials/src/com/earth2me/essentials/Backup.java @@ -1,35 +1,45 @@ package com.earth2me.essentials; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.CraftServer; -public class Backup implements Runnable { - private static final Logger logger = Logger.getLogger("Minecraft"); - private final CraftServer server; - private final IEssentials ess; - private boolean running = false; - private int taskId = -1; - private boolean active = false; - public Backup(IEssentials ess) { +public class Backup implements Runnable +{ + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private transient final CraftServer server; + private transient final IEssentials ess; + private transient boolean running = false; + private transient int taskId = -1; + private transient boolean active = false; + + public Backup(final IEssentials ess) + { this.ess = ess; server = (CraftServer)ess.getServer(); - if (server.getOnlinePlayers().length > 0) { + if (server.getOnlinePlayers().length > 0) + { startTask(); } - } + } - void onPlayerJoin() { + void onPlayerJoin() + { startTask(); } - - private void startTask() { - if (!running) { - long interval = ess.getSettings().getBackupInterval()*1200; // minutes -> ticks - if (interval < 1200) { + + private void startTask() + { + if (!running) + { + final long interval = ess.getSettings().getBackupInterval() * 1200; // minutes -> ticks + if (interval < 1200) + { return; } taskId = ess.scheduleSyncRepeatingTask(this, interval, interval); @@ -37,48 +47,84 @@ public class Backup implements Runnable { } } - public void run() { - if (active) return; - active = true; - final String command = ess.getSettings().getBackupCommand(); - if (command == null || "".equals(command)) { + public void run() + { + if (active) + { return; } - logger.log(Level.INFO, Util.i18n("backupStarted")); + active = true; + final String command = ess.getSettings().getBackupCommand(); + if (command == null || "".equals(command)) + { + return; + } + LOGGER.log(Level.INFO, Util.i18n("backupStarted")); final CommandSender cs = server.getServer().console; server.dispatchCommand(cs, "save-all"); server.dispatchCommand(cs, "save-off"); - + ess.scheduleAsyncDelayedTask( - new Runnable() { - - public void run() { - try { - Process child = Runtime.getRuntime().exec(command); - child.waitFor(); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - } finally { - ess.scheduleSyncDelayedTask( - new Runnable() { - - public void run() { - server.dispatchCommand(cs, "save-on"); - if (server.getOnlinePlayers().length == 0) { - running = false; - if (taskId != -1) { - server.getScheduler().cancelTask(taskId); + new Runnable() + { + public void run() + { + try + { + final ProcessBuilder childBuilder = new ProcessBuilder(command); + childBuilder.redirectErrorStream(true); + childBuilder.directory(ess.getDataFolder().getParentFile().getParentFile()); + final Process child = childBuilder.start(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(child.getInputStream())); + try + { + child.waitFor(); + String line; + do + { + line = reader.readLine(); + if (line != null) + { + LOGGER.log(Level.INFO, line); + } } + while (line != null); + } + finally + { + reader.close(); } - active = false; - logger.log(Level.INFO, Util.i18n("backupFinished")); } - }); - } - } - }); + catch (InterruptedException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + catch (IOException ex) + { + LOGGER.log(Level.SEVERE, null, ex); + } + finally + { + ess.scheduleSyncDelayedTask( + new Runnable() + { + public void run() + { + server.dispatchCommand(cs, "save-on"); + if (server.getOnlinePlayers().length == 0) + { + running = false; + if (taskId != -1) + { + server.getScheduler().cancelTask(taskId); + } + } + active = false; + LOGGER.log(Level.INFO, Util.i18n("backupFinished")); + } + }); + } + } + }); } - } From 322ecdb9fccedc2d4d8f553ac55d4573848e51b3 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 20:39:54 +0200 Subject: [PATCH 38/53] Less use of Craftbukkit code, so less things will break on MC update. Added try/catch around the tnt and creeper protection code. The event will now always canceled, even if our fake explosion code fails. --- .../essentials/EssentialsEntityListener.java | 17 +--- .../essentials/InventoryWorkaround.java | 3 +- .../essentials/TNTExplodeListener.java | 6 ++ .../essentials/commands/Commandspawner.java | 5 +- .../essentials/commands/Commandspawnmob.java | 28 +++--- .../essentials/signs/EssentialsSign.java | 3 +- .../essentials/signs/SignBlockListener.java | 3 +- .../essentials/signs/SignPlayerListener.java | 3 +- .../essentials/signs/SignProtection.java | 5 +- .../EssentialsProtectEntityListener.java | 98 ++++++++++--------- 10 files changed, 82 insertions(+), 89 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 91c4bdce4..ce97726dc 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -1,13 +1,10 @@ package com.earth2me.essentials; import java.util.List; -import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageByProjectileEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityListener; @@ -52,16 +49,12 @@ public class EssentialsEntityListener extends EntityListener } } } - if (event instanceof EntityDamageEvent || event instanceof EntityDamageByBlockEvent || event instanceof EntityDamageByProjectileEvent) + if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) { - - if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) - { - CraftPlayer player = (CraftPlayer)event.getEntity(); - player.getHandle().fireTicks = 0; - player.setRemainingAir(player.getMaximumAir()); - event.setCancelled(true); - } + final Player player = (Player)event.getEntity(); + player.setFireTicks(0); + player.setRemainingAir(player.getMaximumAir()); + event.setCancelled(true); } } diff --git a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java index 9aee4033c..3f0f89af2 100644 --- a/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java +++ b/Essentials/src/com/earth2me/essentials/InventoryWorkaround.java @@ -3,7 +3,6 @@ package com.earth2me.essentials; import java.util.HashMap; import java.util.Map; import org.bukkit.Location; -import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Item; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -130,7 +129,7 @@ public final class InventoryWorkaround // More than a single stack! if (item.getAmount() > item.getType().getMaxStackSize()) { - cinventory.setItem(firstFree, new CraftItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability())); + cinventory.setItem(firstFree, new ItemStack(item.getTypeId(), item.getType().getMaxStackSize(), item.getDurability())); item.setAmount(item.getAmount() - item.getType().getMaxStackSize()); } else diff --git a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java index bdd453266..90c66aa35 100644 --- a/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java +++ b/Essentials/src/com/earth2me/essentials/TNTExplodeListener.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import net.minecraft.server.ChunkPosition; import net.minecraft.server.Packet60Explosion; import org.bukkit.Location; @@ -52,6 +54,7 @@ public class TNTExplodeListener extends EntityListener implements Runnable { return; } + try { final Set set = new HashSet(event.blockList().size()); final Player[] players = ess.getServer().getOnlinePlayers(); final List blocksUnderPlayers = new ArrayList(players.length); @@ -72,6 +75,9 @@ public class TNTExplodeListener extends EntityListener implements Runnable } } ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set)); + } catch (Throwable ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); + } event.setCancelled(true); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 15f5910af..926c219c1 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -6,8 +6,7 @@ import com.earth2me.essentials.Util; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.block.CraftCreatureSpawner; -import org.bukkit.entity.CreatureType; +import org.bukkit.block.CreatureSpawner; public class Commandspawner extends EssentialsCommand @@ -45,7 +44,7 @@ public class Commandspawner extends EssentialsCommand user.sendMessage(Util.i18n("invalidMob")); return; } - new CraftCreatureSpawner(target).setCreatureType(mob.getType()); + ((CreatureSpawner)target.getState()).setCreatureType(mob.getType()); user.sendMessage(Util.format("setSpawner", mob.name)); } catch (Throwable ex) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 17081e349..4cef00de6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -8,16 +8,13 @@ import com.earth2me.essentials.Mob.MobException; import com.earth2me.essentials.TargetBlock; import com.earth2me.essentials.Util; import java.util.Random; -import net.minecraft.server.EntityWolf; -import net.minecraft.server.PathEntity; import org.bukkit.DyeColor; -import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.entity.CraftCreeper; -import org.bukkit.craftbukkit.entity.CraftSheep; -import org.bukkit.craftbukkit.entity.CraftSlime; -import org.bukkit.craftbukkit.entity.CraftWolf; +import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Wolf; public class Commandspawnmob extends EssentialsCommand @@ -190,7 +187,7 @@ public class Commandspawnmob extends EssentialsCommand { try { - ((CraftSlime)spawned).setSize(Integer.parseInt(data)); + ((Slime)spawned).setSize(Integer.parseInt(data)); } catch (Exception e) { @@ -204,11 +201,11 @@ public class Commandspawnmob extends EssentialsCommand if (data.equalsIgnoreCase("random")) { Random rand = new Random(); - ((CraftSheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]); + ((Sheep)spawned).setColor(DyeColor.values()[rand.nextInt(DyeColor.values().length)]); } else { - ((CraftSheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase())); + ((Sheep)spawned).setColor(DyeColor.valueOf(data.toUpperCase())); } } catch (Exception e) @@ -218,21 +215,18 @@ public class Commandspawnmob extends EssentialsCommand } if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("tamed")) { - EntityWolf wolf = ((CraftWolf)spawned).getHandle(); + Wolf wolf = ((Wolf)spawned); wolf.setTamed(true); - wolf.setPathEntity((PathEntity)null); + wolf.setOwner(user); wolf.setSitting(true); - wolf.health = 20; - wolf.setOwnerName(user.getName()); - wolf.world.a(wolf, (byte)7); } if ("Wolf".equalsIgnoreCase(type) && data.equalsIgnoreCase("angry")) { - ((CraftWolf)spawned).setAngry(true); + ((Wolf)spawned).setAngry(true); } if ("Creeper".equalsIgnoreCase(type) && data.equalsIgnoreCase("powered")) { - ((CraftCreeper)spawned).setPowered(true); + ((Creeper)spawned).setPowered(true); } } } diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java index 1bd1d6184..f4109b3bb 100644 --- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java @@ -11,7 +11,6 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.entity.Player; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.inventory.ItemStack; @@ -456,7 +455,7 @@ public class EssentialsSign public BlockSign(final Block block) { this.block = block; - this.sign = new CraftSign(block); + this.sign = (Sign)block.getState(); } public final String getLine(final int index) diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java index eb6163d20..7320f27a4 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBlockListener.java @@ -7,7 +7,6 @@ import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; @@ -48,7 +47,7 @@ public class SignBlockListener extends BlockListener final int mat = block.getTypeId(); if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId()) { - final Sign csign = new CraftSign(block); + final Sign csign = (Sign)block.getState(); for (Signs signs : Signs.values()) { final EssentialsSign sign = signs.getSign(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java index a97c234fa..5d7900508 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignPlayerListener.java @@ -4,7 +4,6 @@ import com.earth2me.essentials.IEssentials; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerListener; @@ -39,7 +38,7 @@ public class SignPlayerListener extends PlayerListener { return; } - final Sign csign = new CraftSign(block); + final Sign csign = (Sign)block.getState(); for (Signs signs : Signs.values()) { final EssentialsSign sign = signs.getSign(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java index f9957e646..8ecf34e01 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignProtection.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignProtection.java @@ -15,7 +15,6 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; -import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.inventory.ItemStack; @@ -204,7 +203,7 @@ public class SignProtection extends EssentialsSign { if (b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN) { - final Sign sign = new CraftSign(b); + final Sign sign = (Sign)b.getState(); if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) { return true; @@ -218,7 +217,7 @@ public class SignProtection extends EssentialsSign { if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN) { - final Sign sign = new CraftSign(a); + final Sign sign = (Sign)a.getState(); if (sign.getLine(0).equalsIgnoreCase("§1[Protection]")) { return true; diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index 8dd3335f5..f28fd1185 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -4,6 +4,8 @@ import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.User; import java.util.HashSet; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import net.minecraft.server.ChunkPosition; import net.minecraft.server.Packet60Explosion; import org.bukkit.Location; @@ -12,9 +14,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftFireball; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.craftbukkit.entity.CraftTNTPrimed; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.Fireball; @@ -38,13 +37,13 @@ public class EssentialsProtectEntityListener extends EntityListener { private final transient IProtect prot; private final transient IEssentials ess; - + public EssentialsProtectEntityListener(final IProtect prot) { this.prot = prot; this.ess = prot.getEssentials(); } - + @Override public void onEntityDamage(final EntityDamageEvent event) { @@ -57,7 +56,7 @@ public class EssentialsProtectEntityListener extends EntityListener if (event instanceof EntityDamageByBlockEvent) { final DamageCause cause = event.getCause(); - + if (prot.getSettingBool(ProtectConfig.disable_contactdmg) && cause == DamageCause.CONTACT && !(target instanceof Player @@ -86,7 +85,7 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + if (event instanceof EntityDamageByEntityEvent) { final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event; @@ -111,7 +110,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.creeper") @@ -120,7 +119,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.fireball") @@ -129,7 +128,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg) && !(target instanceof Player && user.isAuthorized("essentials.protect.damage.tnt") @@ -138,7 +137,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (edEvent.getDamager() instanceof Projectile && target instanceof Player && ((prot.getSettingBool(ProtectConfig.disable_projectiles) @@ -153,7 +152,7 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + final DamageCause cause = event.getCause(); if (target instanceof Player) { @@ -165,7 +164,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (cause == DamageCause.SUFFOCATION && prot.getSettingBool(ProtectConfig.disable_suffocate) && !(user.isAuthorized("essentials.protect.damage.suffocation") @@ -201,7 +200,7 @@ public class EssentialsProtectEntityListener extends EntityListener } } } - + @Override public void onEntityExplode(final EntityExplodeEvent event) { @@ -216,43 +215,50 @@ public class EssentialsProtectEntityListener extends EntityListener || prot.getSettingBool(ProtectConfig.prevent_creeper_blockdmg) || (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight))) { - final Set set = new HashSet(event.blockList().size()); - final Player[] players = ess.getServer().getOnlinePlayers(); - final Set blocksUnderPlayers = new HashSet(players.length); - final Location loc = event.getLocation(); - for (Player player : players) + try { - if (player.getWorld().equals(loc.getWorld())) + final Set set = new HashSet(event.blockList().size()); + final Player[] players = ess.getServer().getOnlinePlayers(); + final Set blocksUnderPlayers = new HashSet(players.length); + final Location loc = event.getLocation(); + for (Player player : players) { - blocksUnderPlayers.add( - new ChunkPosition( - player.getLocation().getBlockX(), - player.getLocation().getBlockY() - 1, - player.getLocation().getBlockZ())); + if (player.getWorld().equals(loc.getWorld())) + { + blocksUnderPlayers.add( + new ChunkPosition( + player.getLocation().getBlockX(), + player.getLocation().getBlockY() - 1, + player.getLocation().getBlockZ())); + } } + ChunkPosition cp; + for (Block block : event.blockList()) + { + cp = new ChunkPosition(block.getX(), block.getY(), block.getZ()); + if (!blocksUnderPlayers.contains(cp)) + { + set.add(cp); + } + } + + ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, + new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); } - ChunkPosition cp; - for (Block block : event.blockList()) + catch (Throwable ex) { - cp = new ChunkPosition(block.getX(), block.getY(), block.getZ()); - if (!blocksUnderPlayers.contains(cp)) - { - set.add(cp); - } + Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); } - - ((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0D, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, - new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); event.setCancelled(true); return; } - else if (event.getEntity() instanceof CraftTNTPrimed + else if (event.getEntity() instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_explosion)) { event.setCancelled(true); return; } - else if (event.getEntity() instanceof CraftFireball + else if (event.getEntity() instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_explosion)) { event.setCancelled(true); @@ -264,10 +270,10 @@ public class EssentialsProtectEntityListener extends EntityListener for (Block block : event.blockList()) { if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS - || block.getType() == Material.RAILS - || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL - || block.getType() == Material.POWERED_RAIL - || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL + || block.getType() == Material.RAILS + || block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL + || block.getType() == Material.POWERED_RAIL + || block.getRelative(BlockFace.UP).getType() == Material.DETECTOR_RAIL || block.getType() == Material.DETECTOR_RAIL) && prot.getSettingBool(ProtectConfig.protect_rails)) { @@ -288,11 +294,11 @@ public class EssentialsProtectEntityListener extends EntityListener } } } - + @Override public void onCreatureSpawn(final CreatureSpawnEvent event) { - if (event.getEntity() instanceof CraftPlayer) + if (event.getEntity() instanceof Player) { return; } @@ -310,7 +316,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); } } - + @Override public void onEntityTarget(final EntityTargetEvent event) { @@ -336,11 +342,11 @@ public class EssentialsProtectEntityListener extends EntityListener return; } } - + @Override public void onExplosionPrime(ExplosionPrimeEvent event) { - if (event.getEntity() instanceof CraftFireball + if (event.getEntity() instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_fire)) { event.setFire(false); From 347be03b25062a02c04ea120963b393c42e80f08 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 21:13:33 +0200 Subject: [PATCH 39/53] Display which permission system is used. --- .../com/earth2me/essentials/Essentials.java | 3 +- .../essentials/EssentialsPluginListener.java | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index b74b2b5c4..5fdb23785 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -148,9 +148,10 @@ public class Essentials extends JavaPlugin implements IEssentials LOGGER.log(Level.INFO, Util.i18n("bukkitFormatChanged")); } - final ServerListener serverListener = new EssentialsPluginListener(this); + final EssentialsPluginListener serverListener = new EssentialsPluginListener(this); pm.registerEvent(Type.PLUGIN_ENABLE, serverListener, Priority.Low, this); pm.registerEvent(Type.PLUGIN_DISABLE, serverListener, Priority.Low, this); + confList.add(serverListener); final EssentialsPlayerListener playerListener = new EssentialsPlayerListener(this); pm.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 34632dd40..99df25578 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,6 +1,5 @@ package com.earth2me.essentials; -import com.earth2me.essentials.register.payment.Methods; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; @@ -10,7 +9,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; -public class EssentialsPluginListener extends ServerListener +public class EssentialsPluginListener extends ServerListener implements IConf { private final transient IEssentials ess; private static final Logger LOGGER = Logger.getLogger("Minecraft"); @@ -41,7 +40,7 @@ public class EssentialsPluginListener extends ServerListener LOGGER.log(Level.INFO, "[Essentials] Payment method was disabled. No longer accepting payments."); } } - + private void checkPermissions() { final PluginManager pm = ess.getServer().getPluginManager(); @@ -54,28 +53,54 @@ public class EssentialsPluginListener extends ServerListener { if (ess.getSettings().useBukkitPermissions()) { - ess.setPermissionsHandler(new BukkitPermissionsHandler()); + if (!(ess.getPermissionsHandler() instanceof BukkitPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new BukkitPermissionsHandler()); + } } else { - ess.setPermissionsHandler(new ConfigPermissionsHandler(ess)); + if (!(ess.getPermissionsHandler() instanceof ConfigPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using config based permissions. Enable superperms in config."); + ess.setPermissionsHandler(new ConfigPermissionsHandler(ess)); + } } } else { if (permissionsPlugin.getDescription().getVersion().charAt(0) == '3') { - ess.setPermissionsHandler(new Permissions3Handler(permissionsPlugin)); + if (!(ess.getPermissionsHandler() instanceof Permissions3Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 3 based permissions."); + ess.setPermissionsHandler(new Permissions3Handler(permissionsPlugin)); + } } else { - ess.setPermissionsHandler(new Permissions2Handler(permissionsPlugin)); + if (!(ess.getPermissionsHandler() instanceof Permissions2Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using Permissions 2 based permissions."); + ess.setPermissionsHandler(new Permissions2Handler(permissionsPlugin)); + } } } } else { - ess.setPermissionsHandler(new PermissionsExHandler()); + if (!(ess.getPermissionsHandler() instanceof PermissionsExHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsEx based permissions."); + ess.setPermissionsHandler(new PermissionsExHandler()); + } } } + + @Override + public void reloadConfig() + { + checkPermissions(); + } } From 610a7139971b28095b74065b48a55d73af6b9300 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 22:29:57 +0200 Subject: [PATCH 40/53] Fixes to auto afk --- Essentials/src/com/earth2me/essentials/User.java | 4 ++-- .../src/com/earth2me/essentials/commands/Commandafk.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index d160a6f07..918f0f128 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -17,8 +17,8 @@ public class User extends UserData implements Comparable, IReplyTo, IUser private transient User teleportRequester; private transient boolean teleportRequestHere; private transient final Teleport teleport; - private transient long lastOnlineActivity = System.currentTimeMillis();; - private transient long lastActivity; + private transient long lastOnlineActivity ; + private transient long lastActivity = System.currentTimeMillis(); private boolean hidden = false; private transient boolean godStateBeforeAfk; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 03950966c..64ae40c22 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -35,12 +35,13 @@ public class Commandafk extends EssentialsCommand { if (!user.toggleAfk()) { - user.sendMessage(Util.i18n("markedAsNotAway")); + //user.sendMessage(Util.i18n("markedAsNotAway")); ess.broadcastMessage(user.getName(), Util.format("userIsNotAway", user.getDisplayName())); + user.updateActivity(); } else { - user.sendMessage(Util.i18n("markedAsAway")); + //user.sendMessage(Util.i18n("markedAsAway")); ess.broadcastMessage(user.getName(), Util.format("userIsAway", user.getDisplayName())); } } From 6427a93d1496fa3208415e8cda06ff765eba6cfa Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:14:49 +0200 Subject: [PATCH 41/53] Correctly charge for the use of commands. We now first test, if the user could pay it, do the stuff and then charge him. If the command throws an exception, the user will not be charged. --- .../essentials/commands/Commandafk.java | 2 - .../essentials/commands/Commandantioch.java | 1 - .../essentials/commands/Commandbackup.java | 3 +- .../essentials/commands/Commandbalance.java | 1 - .../essentials/commands/Commandbigtree.java | 3 +- .../essentials/commands/Commandbroadcast.java | 1 - .../essentials/commands/Commandburn.java | 1 - .../commands/Commandclearinventory.java | 3 - .../commands/Commandessentials.java | 1 - .../essentials/commands/Commandext.java | 2 - .../essentials/commands/Commandfireball.java | 1 - .../essentials/commands/Commandgc.java | 1 - .../essentials/commands/Commandgetpos.java | 1 - .../essentials/commands/Commandgive.java | 7 +- .../essentials/commands/Commandgod.java | 1 - .../essentials/commands/Commandheal.java | 2 - .../essentials/commands/Commandhelpop.java | 1 - .../essentials/commands/Commandinfo.java | 6 +- .../essentials/commands/Commandinvsee.java | 4 +- .../essentials/commands/Commanditem.java | 7 +- .../essentials/commands/Commandkick.java | 4 +- .../essentials/commands/Commandkickall.java | 2 - .../essentials/commands/Commandkill.java | 1 - .../essentials/commands/Commandkit.java | 1 - .../essentials/commands/Commandlightning.java | 8 +- .../essentials/commands/Commandlist.java | 1 - .../essentials/commands/Commandmail.java | 16 +- .../essentials/commands/Commandme.java | 4 +- .../essentials/commands/Commandmotd.java | 1 - .../essentials/commands/Commandmsg.java | 10 +- .../essentials/commands/Commandmute.java | 4 +- .../essentials/commands/Commandnick.java | 13 +- .../essentials/commands/Commandplugin.java | 173 ------------------ .../essentials/commands/Commandpowertool.java | 12 +- .../essentials/commands/Commandr.java | 4 +- .../essentials/commands/Commandrealname.java | 1 - .../essentials/commands/Commandreloadall.java | 1 - .../essentials/commands/Commandrepair.java | 25 +-- .../essentials/commands/Commandrules.java | 1 - .../essentials/commands/Commandsell.java | 4 +- .../essentials/commands/Commandsethome.java | 1 - .../essentials/commands/Commandsetjail.java | 2 - .../essentials/commands/Commandsetwarp.java | 1 - .../essentials/commands/Commandsetworth.java | 1 - .../essentials/commands/Commandsocialspy.java | 3 - .../essentials/commands/Commandspawner.java | 1 - .../essentials/commands/Commandspawnmob.java | 7 +- .../essentials/commands/Commandsuicide.java | 1 - .../essentials/commands/Commandthunder.java | 2 - .../commands/Commandtogglejail.java | 1 - .../essentials/commands/Commandtop.java | 1 - .../essentials/commands/Commandtp.java | 1 - .../essentials/commands/Commandtpa.java | 1 - .../essentials/commands/Commandtpaall.java | 2 - .../essentials/commands/Commandtpahere.java | 1 - .../essentials/commands/Commandtpall.java | 2 - .../essentials/commands/Commandtpdeny.java | 1 - .../essentials/commands/Commandtpo.java | 1 - .../essentials/commands/Commandtpohere.java | 1 - .../essentials/commands/Commandtptoggle.java | 1 - .../essentials/commands/Commandtree.java | 1 - .../essentials/commands/Commandunlimited.java | 4 +- .../essentials/commands/Commandweather.java | 1 - .../essentials/commands/Commandwhois.java | 1 - .../essentials/commands/Commandworth.java | 1 - .../commands/EssentialsCommand.java | 12 +- 66 files changed, 40 insertions(+), 347 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/commands/Commandplugin.java diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java index 64ae40c22..9fe17d5a0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandafk.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandafk.java @@ -15,8 +15,6 @@ public class Commandafk extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); - if (args.length > 0 && user.isAuthorized("essentials.afk.others")) { User afkUser = ess.getUser(ess.getServer().matchPlayer(args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java index 4dd3042d0..c30975b03 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandantioch.java @@ -17,7 +17,6 @@ public class Commandantioch extends EssentialsCommand @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - charge(user); ess.broadcastMessage(user.getName(), "...lobbest thou thy Holy Hand Grenade of Antioch towards thy foe,"); ess.broadcastMessage(user.getName(), "who being naughty in My sight, shall snuff it."); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java index 8f6e8e8bf..6bbf8361c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbackup.java @@ -19,9 +19,8 @@ public class Commandbackup extends EssentialsCommand Backup backup = ess.getBackup(); if (backup == null) { - return; + throw new Exception(); } - charge(sender); backup.run(); sender.sendMessage(Util.i18n("backupStarted")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java index 7dd1fb449..d26df68cb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbalance.java @@ -26,7 +26,6 @@ public class Commandbalance extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); double bal = (args.length < 1 || !(user.isAuthorized("essentials.balance.others") || user.isAuthorized("essentials.balance.other")) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java index 8370896b1..ded3ffdaf 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbigtree.java @@ -41,12 +41,11 @@ public class Commandbigtree extends EssentialsCommand final boolean success = user.getWorld().generateTree(safeLocation, (TreeType)tree); if (success) { - charge(user); user.sendMessage(Util.i18n("bigTreeSuccess")); } else { - user.sendMessage(Util.i18n("bigTreeFailure")); + throw new Exception(Util.i18n("bigTreeFailure")); } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java index 3ca9d3fd0..684920114 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandbroadcast.java @@ -22,7 +22,6 @@ public class Commandbroadcast extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); ess.broadcastMessage(sender instanceof Player ? ((Player)sender).getName() : Console.NAME, Util.format("broadcast", getFinalArg(args, 0))); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandburn.java b/Essentials/src/com/earth2me/essentials/commands/Commandburn.java index e63331203..5df3cb5d8 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandburn.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandburn.java @@ -21,7 +21,6 @@ public class Commandburn extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); for (Player p : server.matchPlayer(args[0])) { p.setFireTicks(Integer.parseInt(args[1]) * 20); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index 09496c7a2..447689691 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -27,7 +27,6 @@ public class Commandclearinventory extends EssentialsCommand if (!online.isEmpty()) { - charge(user); for (Player p : online) { p.getInventory().clear(); @@ -42,7 +41,6 @@ public class Commandclearinventory extends EssentialsCommand Player p = server.getPlayer(args[0]); if (p != null) { - charge(user); p.getInventory().clear(); user.sendMessage(Util.format("inventoryClearedOthers", p.getDisplayName())); } @@ -54,7 +52,6 @@ public class Commandclearinventory extends EssentialsCommand } else { - charge(user); user.getInventory().clear(); user.sendMessage(Util.i18n("inventoryCleared")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java index bf0226138..fda7061d5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java @@ -102,7 +102,6 @@ public class Commandessentials extends EssentialsCommand return; } ess.reload(); - charge(sender); sender.sendMessage(Util.format("essentialsReload", ess.getDescription().getVersion())); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandext.java b/Essentials/src/com/earth2me/essentials/commands/Commandext.java index 339351ef1..afb9fa3a6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandext.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandext.java @@ -30,7 +30,6 @@ public class Commandext extends EssentialsCommand { if (args.length < 1) { - charge(user); user.setFireTicks(0); user.sendMessage(Util.i18n("extinguish")); return; @@ -43,7 +42,6 @@ public class Commandext extends EssentialsCommand { for (Player p : server.matchPlayer(name)) { - charge(sender); p.setFireTicks(0); sender.sendMessage(Util.format("extinguishOthers", p.getDisplayName())); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java b/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java index 73c314935..19e7eddf1 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandfireball.java @@ -17,7 +17,6 @@ public class Commandfireball extends EssentialsCommand @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - charge(user); final Vector direction = user.getEyeLocation().getDirection().multiply(2); user.getWorld().spawn(user.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Fireball.class); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java index dd3cf35f4..28164bd78 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgc.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgc.java @@ -16,7 +16,6 @@ public class Commandgc extends EssentialsCommand @Override protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); sender.sendMessage(Util.format("gcmax", (Runtime.getRuntime().maxMemory() / 1024 / 1024))); sender.sendMessage(Util.format("gcfree", (Runtime.getRuntime().freeMemory() / 1024 / 1024))); sender.sendMessage(Util.format("gctotal", (Runtime.getRuntime().totalMemory() / 1024 / 1024))); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java index 517ef0c9a..bf5cff75d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgetpos.java @@ -15,7 +15,6 @@ public class Commandgetpos extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); Location coords = user.getLocation(); user.sendMessage("§7X: " + coords.getBlockX() + " (-North <-> +South)"); user.sendMessage("§7Y: " + coords.getBlockY() + " (+Up <-> -Down)"); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java index 68bfe8a30..065b76d03 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java @@ -36,8 +36,7 @@ public class Commandgive extends EssentialsCommand : (!ess.getUser(sender).isAuthorized("essentials.itemspawn.exempt") && !ess.getUser(sender).canSpawnItem(stack.getTypeId())))) { - sender.sendMessage(ChatColor.RED + "You are not allowed to spawn the item " + itemname); - return; + throw new Exception(ChatColor.RED + "You are not allowed to spawn the item " + itemname); } if (args.length > 2 && Integer.parseInt(args[2]) > 0) { @@ -46,13 +45,11 @@ public class Commandgive extends EssentialsCommand if (stack.getType() == Material.AIR) { - sender.sendMessage(ChatColor.RED + "You can't give air."); - return; + throw new Exception(ChatColor.RED + "You can't give air."); } User giveTo = getPlayer(server, args, 0); String itemName = stack.getType().toString().toLowerCase().replace('_', ' '); - charge(sender); sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + "."); giveTo.getInventory().addItem(stack); giveTo.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java index 6bb9f1390..d4c35e113 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgod.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgod.java @@ -28,7 +28,6 @@ public class Commandgod extends EssentialsCommand @Override protected void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); if (args.length > 0 && user.isAuthorized("essentials.god.others")) { godOtherPlayers(server, user, args[0]); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java index effe64604..d60fc09fe 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandheal.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandheal.java @@ -25,7 +25,6 @@ public class Commandheal extends EssentialsCommand { user.healCooldown(); } - charge(user); healOtherPlayers(server, user, args[0]); return; } @@ -34,7 +33,6 @@ public class Commandheal extends EssentialsCommand { user.healCooldown(); } - charge(user); user.setHealth(20); user.sendMessage(Util.i18n("heal")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java index 261cad062..158b0d40b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhelpop.java @@ -22,7 +22,6 @@ public class Commandhelpop extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(user); final String message = Util.format("helpOp", user.getDisplayName(), getFinalArg(args, 0)); logger.log(Level.INFO, message); for (Player p : server.getOnlinePlayers()) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java b/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java index 4db469b58..97dd71d35 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandinfo.java @@ -68,9 +68,8 @@ public class Commandinfo extends EssentialsCommand } else { - sender.sendMessage(Util.i18n("infoFileDoesNotExist")); file.createNewFile(); - return; + throw new Exception(Util.i18n("infoFileDoesNotExist")); } if (bookmarks.isEmpty()) @@ -88,7 +87,6 @@ public class Commandinfo extends EssentialsCommand int start = (page - 1) * 9; int pages = lines.size() / 9 + (lines.size() % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoPages", page, pages )); for (int i = start; i < lines.size() && i < start + 9; i++) { @@ -140,7 +138,6 @@ public class Commandinfo extends EssentialsCommand } int pages = end / 9 + (end % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoPages", page, pages )); for (int i = start; i < end && i < start + 9; i++) { @@ -182,7 +179,6 @@ public class Commandinfo extends EssentialsCommand int page = chapterpage + 1; int pages = (chapterend - chapterstart) / 9 + ((chapterend - chapterstart) % 9 > 0 ? 1 : 0); - charge(sender); sender.sendMessage(Util.format("infoChapterPages", pageStr, page , pages)); for (int i = start; i < chapterend && i < start + 9; i++) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java index e5877fe40..8b6dc8182 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandinvsee.java @@ -31,11 +31,9 @@ public class Commandinvsee extends EssentialsCommand { invUser.getInventory().setContents(user.getSavedInventory()); user.setSavedInventory(null); - user.sendMessage(Util.i18n("invRestored")); - return; + throw new Exception(Util.i18n("invRestored")); } - charge(user); if (user.getSavedInventory() == null) { user.setSavedInventory(user.getInventory().getContents()); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java index 79e8344f1..352ce18eb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java @@ -31,8 +31,7 @@ public class Commanditem extends EssentialsCommand : (!user.isAuthorized("essentials.itemspawn.exempt") && !user.canSpawnItem(stack.getTypeId()))) { - user.sendMessage(Util.format("cantSpawnItem", itemname)); - return; + throw new Exception(Util.format("cantSpawnItem", itemname)); } if (args.length > 1 && Integer.parseInt(args[1]) > 0) @@ -42,12 +41,10 @@ public class Commanditem extends EssentialsCommand if (stack.getType() == Material.AIR) { - user.sendMessage(Util.format("cantSpawnItem", "Air")); - return; + throw new Exception(Util.format("cantSpawnItem", "Air")); } String itemName = stack.getType().toString().toLowerCase().replace('_', ' '); - charge(user); user.sendMessage(Util.format("itemSpawn", stack.getAmount(), itemName)); user.getInventory().addItem(stack); user.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java index e9b3720fe..fd0d4a8e0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkick.java @@ -26,10 +26,8 @@ public class Commandkick extends EssentialsCommand User player = getPlayer(server, args, 0); if (player.isAuthorized("essentials.kick.exempt")) { - sender.sendMessage(Util.i18n("kickExempt")); - return; + throw new Exception(Util.i18n("kickExempt")); } - charge(sender); final String kickReason = args.length > 1 ? getFinalArg(args, 1) : Util.i18n("kickDefault"); player.kickPlayer(kickReason); String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java index c52dc8d14..8d36f50d5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java @@ -16,8 +16,6 @@ public class Commandkickall extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); - for (Player p : server.getOnlinePlayers()) { if (sender instanceof Player && p.getName().equalsIgnoreCase(((Player)sender).getName())) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java index c849463b7..03afeadc4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkill.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkill.java @@ -21,7 +21,6 @@ public class Commandkill extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(sender); for (Player p : server.matchPlayer(args[0])) { p.setHealth(0); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index 7f9a91590..75cc83887 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -141,7 +141,6 @@ public class Commandkit extends EssentialsCommand } try { - charge(user); charge.charge(user); } catch (Exception ex) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java index c9135d61e..dc4387833 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandlightning.java @@ -26,20 +26,14 @@ public class Commandlightning extends EssentialsCommand if (args.length < 1 & user != null) { user.getWorld().strikeLightning(user.getTargetBlock(null, 600).getLocation()); - charge(user); return; } if (server.matchPlayer(args[0]).isEmpty()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } - if (user != null) - { - charge(user); - } for (Player p : server.matchPlayer(args[0])) { sender.sendMessage(Util.format("lightningUse", p.getDisplayName())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java index ef7d6e9f8..98066d7e7 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java @@ -44,7 +44,6 @@ public class Commandlist extends EssentialsCommand playerHidden++; } } - charge(sender); //TODO: move these to messages file StringBuilder online = new StringBuilder(); online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length - playerHidden); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java index b54b88a12..a98fabbd2 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmail.java @@ -23,22 +23,19 @@ public class Commandmail extends EssentialsCommand List mail = user.getMails(); if (mail.isEmpty()) { - user.sendMessage(Util.i18n("noMail")); - return; + throw new Exception(Util.i18n("noMail")); } for (String s : mail) { user.sendMessage(s); } - user.sendMessage(Util.i18n("mailClear")); - return; + throw new Exception(Util.i18n("mailClear")); } if (args.length >= 3 && "send".equalsIgnoreCase(args[0])) { if (!user.isAuthorized("essentials.mail.send")) { - user.sendMessage(Util.i18n("noMailSendPerm")); - return; + throw new Exception(Util.i18n("noMailSendPerm")); } Player player = server.getPlayer(args[1]); @@ -53,10 +50,8 @@ public class Commandmail extends EssentialsCommand } if (u == null) { - user.sendMessage(Util.format("playerNeverOnServer", args[1])); - return; + throw new Exception(Util.format("playerNeverOnServer", args[1])); } - charge(user); if (!u.isIgnoredPlayer(user.getName())) { u.addMail(ChatColor.stripColor(user.getDisplayName()) + ": " + getFinalArg(args, 2)); @@ -67,8 +62,7 @@ public class Commandmail extends EssentialsCommand if (args.length >= 1 && "clear".equalsIgnoreCase(args[0])) { user.setMails(null); - user.sendMessage(Util.i18n("mailCleared")); - return; + throw new Exception(Util.i18n("mailCleared")); } throw new NotEnoughArgumentsException(); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/com/earth2me/essentials/commands/Commandme.java index 098558f11..7441b723b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandme.java @@ -17,8 +17,7 @@ public class Commandme extends EssentialsCommand { if (user.isMuted()) { - user.sendMessage(Util.i18n("voiceSilenced")); - return; + throw new Exception(Util.i18n("voiceSilenced")); } if (args.length < 1) @@ -31,7 +30,6 @@ public class Commandme extends EssentialsCommand message.append(args[i]); message.append(' '); } - charge(user); ess.broadcastMessage(user.getName(), "* " + user.getDisplayName() + " " + message); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java b/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java index 4712c331b..c695338f6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmotd.java @@ -15,7 +15,6 @@ public class Commandmotd extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); for (String m : ess.getMotd(sender, Util.i18n("noMotd"))) { sender.sendMessage(m); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java index 42f17bed2..f14935648 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmsg.java @@ -30,8 +30,7 @@ public class Commandmsg extends EssentialsCommand User user = ess.getUser(sender); if (user.isMuted()) { - user.sendMessage(Util.i18n("voiceSilenced")); - return; + throw new Exception(Util.i18n("voiceSilenced")); } } @@ -55,8 +54,7 @@ public class Commandmsg extends EssentialsCommand if (matches.isEmpty()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } int i = 0; @@ -70,11 +68,9 @@ public class Commandmsg extends EssentialsCommand } if (i == matches.size()) { - sender.sendMessage(Util.i18n("playerNotFound")); - return; + throw new Exception(Util.i18n("playerNotFound")); } - charge(sender); for (Player p : matches) { sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message)); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java index e56ddc42c..1777c5b48 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandmute.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandmute.java @@ -24,8 +24,7 @@ public class Commandmute extends EssentialsCommand User p = getPlayer(server, args, 0, true); if (!p.isMuted() && p.isAuthorized("essentials.mute.exempt")) { - sender.sendMessage(Util.i18n("muteExempt")); - return; + throw new Exception(Util.i18n("muteExempt")); } long muteTimestamp = 0; if (args.length > 1) @@ -34,7 +33,6 @@ public class Commandmute extends EssentialsCommand muteTimestamp = Util.parseDateDiff(time, true); } p.setMuteTimeout(muteTimestamp); - charge(sender); boolean muted = p.toggleMuted(); sender.sendMessage( muted diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java index 99c779ba4..253ec7646 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java @@ -23,16 +23,14 @@ public class Commandnick extends EssentialsCommand } if (!ess.getSettings().changeDisplayName()) { - user.sendMessage(Util.i18n("nickDisplayName")); - return; + throw new Exception(Util.i18n("nickDisplayName")); } if (args.length > 1) { if (!user.isAuthorized("essentials.nick.others")) { - user.sendMessage(Util.i18n("nickOthersPermission")); - return; + throw new Exception(Util.i18n("nickOthersPermission")); } setOthersNickname(server, user, args); @@ -51,8 +49,7 @@ public class Commandnick extends EssentialsCommand if (nick.matches("[^a-zA-Z_0-9]")) { - user.sendMessage(Util.i18n("nickNamesAlpha")); - return; + throw new Exception(Util.i18n("nickNamesAlpha")); } for (Player p : server.getOnlinePlayers()) @@ -66,12 +63,10 @@ public class Commandnick extends EssentialsCommand String nk = nick.toLowerCase(); if (nk.equals(dn) || nk.equals(n)) { - user.sendMessage(Util.i18n("nickInUse")); - return; + throw new Exception(Util.i18n("nickInUse")); } } - charge(user); user.setDisplayName(ess.getSettings().getNicknamePrefix() + nick); user.setNickname(nick); user.sendMessage(Util.format("nickSet", user.getDisplayName() + "§7.")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java b/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java deleted file mode 100644 index 9e7939d57..000000000 --- a/Essentials/src/com/earth2me/essentials/commands/Commandplugin.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.earth2me.essentials.commands; - -import java.io.File; -import org.bukkit.Server; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; - - -public class Commandplugin extends EssentialsCommand -{ - private Server server; - - public Commandplugin() - { - super("plugin"); - } - - @Override - public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception - { - this.server = server; - - PluginCommands sub = null; - try - { - sub = PluginCommands.valueOf(args[0].toUpperCase()); - } - catch (Exception ex) - { - sender.sendMessage("§cUsage: /plugin [load|reload|enable|disable|list] [PluginName]"); - return; - } - - switch (sub) - { - case LOAD: // All disable functions are broken until - // http://leaky.bukkit.org/issues/641 is fixed. - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - loadPlugin(args[1], sender);*/ - return; - - case RELOAD: - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - reloadPlugin(args[1], sender);*/ - return; - - case ENABLE: - sender.sendMessage("This function is broken. Performing /reload now."); - server.reload(); - /*if (args.length < 2) return; - User.charge(sender, this); - enablePlugin(args[1], sender);*/ - return; - - case DISABLE: - sender.sendMessage("This function is broken."); - /*if (args.length < 2) return; - User.charge(sender, this); - disablePlugin(args[1], sender);*/ - return; - - case LIST: - charge(sender); - listPlugins(sender); - return; - } - } - - private void listPlugins(CommandSender player) - { - StringBuilder plugins = new StringBuilder(); - for (Plugin p : server.getPluginManager().getPlugins()) - { - plugins.append(p.isEnabled() ? " §a" : " §c"); - plugins.append(p.getDescription().getName()); - } - - plugins.insert(0, "§7Plugins:§f"); - player.sendMessage(plugins.toString()); - } - - private boolean reloadPlugin(String name, CommandSender player) - { - return disablePlugin(name, player) && enablePlugin(name, player); - } - - private boolean loadPlugin(String name, CommandSender sender) - { - try - { - PluginManager pm = server.getPluginManager(); - pm.loadPlugin(new File("plugins", name + ".jar")); - sender.sendMessage("§7Plugin loaded."); - return enablePlugin(name, sender); - } - catch (Throwable ex) - { - sender.sendMessage("§cCould not load plugin. Is the file named properly?"); - return false; - } - } - - private boolean enablePlugin(String name, CommandSender sender) - { - try - { - final PluginManager pm = server.getPluginManager(); - final Plugin plugin = pm.getPlugin(name); - if (!plugin.isEnabled()) - { - new Thread(new Runnable() - { - public void run() - { - synchronized (pm) - { - pm.enablePlugin(plugin); - } - } - }).start(); - } - sender.sendMessage("§7Plugin enabled."); - return true; - } - catch (Throwable ex) - { - listPlugins(sender); - return false; - } - } - - private boolean disablePlugin(String name, CommandSender sender) - { - try - { - final PluginManager pm = server.getPluginManager(); - final Plugin plugin = pm.getPlugin(name); - if (plugin.isEnabled()) - { - new Thread(new Runnable() - { - public void run() - { - synchronized (pm) - { - pm.disablePlugin(plugin); - } - } - }).start(); - } - sender.sendMessage("§7Plugin disabled."); - return true; - } - catch (Throwable ex) - { - listPlugins(sender); - return false; - } - } - - - private enum PluginCommands - { - LOAD, RELOAD, LIST, ENABLE, DISABLE - } -} diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java index 4c3d941ae..742535a77 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -23,8 +23,7 @@ public class Commandpowertool extends EssentialsCommand List powertools = user.getPowertool(is); if (is == null || is.getType() == Material.AIR) { - user.sendMessage(Util.i18n("powerToolAir")); - return; + throw new Exception(Util.i18n("powerToolAir")); } String itemName = is.getType().toString().toLowerCase().replaceAll("_", " "); @@ -35,7 +34,7 @@ public class Commandpowertool extends EssentialsCommand { if (powertools == null || powertools.isEmpty()) { - user.sendMessage(Util.format("powerToolListEmpty", itemName)); + throw new Exception(Util.format("powerToolListEmpty", itemName)); } else { @@ -50,8 +49,7 @@ public class Commandpowertool extends EssentialsCommand command = command.substring(2); if (!powertools.contains(command)) { - user.sendMessage(Util.format("powerToolNoSuchCommandAssigned", command, itemName)); - return; + throw new Exception(Util.format("powerToolNoSuchCommandAssigned", command, itemName)); } powertools.remove(command); @@ -70,8 +68,7 @@ public class Commandpowertool extends EssentialsCommand command = command.substring(2); if(powertools.contains(command)) { - user.sendMessage(Util.format("powerToolAlreadySet", command, itemName)); - return; + throw new Exception(Util.format("powerToolAlreadySet", command, itemName)); } } else if (powertools != null && !powertools.isEmpty()) @@ -94,7 +91,6 @@ public class Commandpowertool extends EssentialsCommand user.sendMessage(Util.format("powerToolRemoveAll", itemName)); } - charge(user); user.setPowertool(is, powertools); } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandr.java b/Essentials/src/com/earth2me/essentials/commands/Commandr.java index d89947500..daf83034a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandr.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandr.java @@ -32,11 +32,9 @@ public class Commandr extends EssentialsCommand if (target == null) { - sender.sendMessage(Util.i18n("foreverAlone")); - return; + throw new Exception(Util.i18n("foreverAlone")); } - charge(sender); sender.sendMessage(Util.format("msgFormat", Util.i18n("me"), targetName, message)); if (target instanceof Player) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java index e16d59198..5e12c535d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java @@ -22,7 +22,6 @@ public class Commandrealname extends EssentialsCommand throw new NotEnoughArgumentsException(); } final String whois = args[0].toLowerCase(); - charge(user); for (Player p : server.getOnlinePlayers()) { final User u = ess.getUser(p); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java b/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java index eeee08e11..bd4f59dcc 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandreloadall.java @@ -15,7 +15,6 @@ public class Commandreloadall extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); server.reload(); sender.sendMessage(Util.i18n("reloadAllPlugins")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java index d41f5580f..029901867 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrepair.java @@ -33,28 +33,12 @@ public class Commandrepair extends EssentialsCommand final String itemName = item.getType().toString().toLowerCase(); final Trade charge = new Trade("repair-" + itemName.replace('_', '-'), ess); - try - { - charge.isAffordableFor(user); - } - catch (Exception ex) - { - user.sendMessage(ex.getMessage()); - return; - } + charge.isAffordableFor(user); + + repairItem(item); - try - { - repairItem(item); - } - catch (Exception e) - { - user.sendMessage(e.getMessage()); - return; - } charge.charge(user); - charge(user); user.sendMessage(Util.format("repair", itemName.replace('_', ' '))); } else if (args[0].equalsIgnoreCase("all")) @@ -66,11 +50,10 @@ public class Commandrepair extends EssentialsCommand if (repaired.isEmpty()) { - user.sendMessage(Util.format("repairNone")); + throw new Exception(Util.format("repairNone")); } else { - charge(user); user.sendMessage(Util.format("repair", Util.joinList(repaired))); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrules.java b/Essentials/src/com/earth2me/essentials/commands/Commandrules.java index 1b00bea47..39f7de68e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrules.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrules.java @@ -15,7 +15,6 @@ public class Commandrules extends EssentialsCommand @Override public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception { - charge(sender); for (String m : ess.getLines(sender, "rules", Util.i18n("noRules"))) { sender.sendMessage(m); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java index f471364d5..658782b9a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java @@ -145,11 +145,9 @@ public class Commandsell extends EssentialsCommand { user.sendMessage(Util.i18n("itemNotEnough1")); user.sendMessage(Util.i18n("itemNotEnough2")); - user.sendMessage(Util.i18n("itemNotEnough3")); - return; + throw new Exception(Util.i18n("itemNotEnough3")); } - charge(user); final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability()); InventoryWorkaround.removeItem(user.getInventory(), true, ris); user.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java index 7f496371f..d9bd32c30 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsethome.java @@ -66,7 +66,6 @@ public class Commandsethome extends EssentialsCommand { user.setHome(); } - charge(user); user.sendMessage(Util.i18n("homeSet")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java index 76fe766c3..d9b0eac4d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetjail.java @@ -15,12 +15,10 @@ public class Commandsetjail extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - if (args.length < 1) { throw new NotEnoughArgumentsException(); } - charge(user); ess.getJail().setJail(user.getLocation(), args[0]); user.sendMessage(Util.format("jailSet",args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java index 4e799d6c0..ccdacab57 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetwarp.java @@ -21,7 +21,6 @@ public class Commandsetwarp extends EssentialsCommand throw new NotEnoughArgumentsException(); } - charge(user); Location loc = user.getLocation(); ess.getWarps().setWarp(args[0], loc); user.sendMessage(Util.format("warpSet", args[0])); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java index e6b741c43..086b1549d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsetworth.java @@ -22,7 +22,6 @@ public class Commandsetworth extends EssentialsCommand } ItemStack stack = ess.getItemDb().get(args[0]); - charge(user); ess.getWorth().setPrice(stack, Double.parseDouble(args[1])); user.sendMessage(Util.i18n("worthSet")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java b/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java index 33efffeef..8e95e8237 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsocialspy.java @@ -15,9 +15,6 @@ public class Commandsocialspy extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - - charge(user); user.sendMessage("§7SocialSpy " + (user.toggleSocialSpy() ? Util.i18n("enabled") : Util.i18n("disabled"))); - } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java index 926c219c1..d3b14970a 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawner.java @@ -31,7 +31,6 @@ public class Commandspawner extends EssentialsCommand throw new Exception(Util.i18n("mobSpawnTarget")); } - charge(user); try { String name = args[0]; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 4cef00de6..87a22c59f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -59,8 +59,7 @@ public class Commandspawnmob extends EssentialsCommand if (ess.getSettings().getProtectPreventSpawn(mobType.toLowerCase()) || (mountType != null && ess.getSettings().getProtectPreventSpawn(mountType.toLowerCase()))) { - user.sendMessage(Util.i18n("unableToSpawnMob")); - return; + throw new Exception(Util.i18n("unableToSpawnMob")); } Entity spawnedMob = null; @@ -71,10 +70,8 @@ public class Commandspawnmob extends EssentialsCommand mob = Mob.fromName(mobType); if (mob == null) { - user.sendMessage(Util.i18n("invalidMob")); - return; + throw new Exception(Util.i18n("invalidMob")); } - charge(user); int[] ignore = { 8, 9 diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java index 57e5e3fd5..90f40a4bf 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsuicide.java @@ -15,7 +15,6 @@ public class Commandsuicide extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); user.setHealth(0); user.sendMessage(Util.i18n("suicideMessage")); ess.broadcastMessage(user.getName(), diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java b/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java index b1ffd3f7f..34f5c3fed 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandthunder.java @@ -16,13 +16,11 @@ public class Commandthunder extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - if (args.length < 1) { throw new NotEnoughArgumentsException(); } - charge(user); World world = user.getWorld(); boolean setThunder = args[0].equalsIgnoreCase("true"); if (args.length > 1) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java index 75abda4bb..6f60f7f43 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtogglejail.java @@ -45,7 +45,6 @@ public class Commandtogglejail extends EssentialsCommand return; } } - charge(sender); if (!(p.getBase() instanceof OfflinePlayer)) { ess.getJail().sendToJail(p, args[1]); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtop.java b/Essentials/src/com/earth2me/essentials/commands/Commandtop.java index 8c0c687d0..ee5bfbe45 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtop.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtop.java @@ -20,7 +20,6 @@ public class Commandtop extends EssentialsCommand int topX = user.getLocation().getBlockX(); int topZ = user.getLocation().getBlockZ(); int topY = user.getWorld().getHighestBlockYAt(topX, topZ); - charge(user); user.getTeleport().teleport(new Location(user.getWorld(), user.getLocation().getX(), topY + 1, user.getLocation().getZ()), new Trade(this.getName(), ess)); user.sendMessage(Util.i18n("teleportTop")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java index c147c5d25..c3cc8f7e5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtp.java @@ -41,7 +41,6 @@ public class Commandtp extends EssentialsCommand throw new Exception("You need access to /tpohere to teleport other players."); } user.sendMessage(Util.i18n("teleporting")); - charge(user); User target = getPlayer(server, args, 0); User toPlayer = getPlayer(server, args, 1); target.getTeleport().now(toPlayer, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java index f3b7ae505..32cbe3bd9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpa.java @@ -25,7 +25,6 @@ public class Commandtpa extends EssentialsCommand { throw new Exception(Util.format("teleportDisabled", p.getDisplayName())); } - charge(user); if (!p.isIgnoredPlayer(user.getName())) { p.requestTeleport(user, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java index 25c5d2892..97897852f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java @@ -21,7 +21,6 @@ public class Commandtpaall extends EssentialsCommand { if (sender instanceof Player) { - charge(sender); teleportAAllPlayers(server, sender, ess.getUser(sender)); return; } @@ -29,7 +28,6 @@ public class Commandtpaall extends EssentialsCommand } User p = getPlayer(server, args, 0); - charge(sender); teleportAAllPlayers(server, sender, p); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java index 2003bbf73..935721345 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpahere.java @@ -25,7 +25,6 @@ public class Commandtpahere extends EssentialsCommand { throw new Exception(Util.format("teleportDisabled", p.getDisplayName())); } - charge(user); p.requestTeleport(user, true); p.sendMessage(Util.format("teleportHereRequest", user.getDisplayName())); p.sendMessage(Util.i18n("typeTpaccept")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java index cc58944d7..1cb6321ea 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java @@ -21,7 +21,6 @@ public class Commandtpall extends EssentialsCommand { if (sender instanceof Player) { - charge(sender); teleportAllPlayers(server, sender, ess.getUser(sender)); return; } @@ -29,7 +28,6 @@ public class Commandtpall extends EssentialsCommand } User p = getPlayer(server, args, 0); - charge(sender); teleportAllPlayers(server, sender, p); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java index e31d7ae3c..5d7764ae6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpdeny.java @@ -21,7 +21,6 @@ public class Commandtpdeny extends EssentialsCommand throw new Exception(Util.i18n("noPendingRequest")); } - charge(user); user.sendMessage(Util.i18n("requestDenied")); p.sendMessage(Util.format("requestDeniedFrom", user.getDisplayName())); user.requestTeleport(null, false); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java index 18d818ea1..5a4e082e0 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpo.java @@ -32,7 +32,6 @@ public class Commandtpo extends EssentialsCommand // Verify permission if (!p.isHidden() || user.isAuthorized("essentials.teleport.hidden")) { - charge(user); user.getTeleport().now(p, false); user.sendMessage(Util.i18n("teleporting")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java index 186476a50..7af39854f 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpohere.java @@ -33,7 +33,6 @@ public class Commandtpohere extends EssentialsCommand // Verify permission if (!p.isHidden() || user.isAuthorized("essentials.teleport.hidden")) { - charge(user); p.getTeleport().now(user, false); user.sendMessage(Util.i18n("teleporting")); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java b/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java index 38236d475..f880c5d34 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtptoggle.java @@ -15,7 +15,6 @@ public class Commandtptoggle extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); user.sendMessage(user.toggleTeleportEnabled() ? Util.i18n("teleportationEnabled") : Util.i18n("teleportationDisabled")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java index 81be2a329..8013453ab 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtree.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtree.java @@ -51,7 +51,6 @@ public class Commandtree extends EssentialsCommand final boolean success = user.getWorld().generateTree(safeLocation, (TreeType)tree); if (success) { - charge(user); user.sendMessage(Util.i18n("treeSpawned")); } else diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java index 122891e02..cebbcaf8c 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandunlimited.java @@ -93,8 +93,7 @@ public class Commandunlimited extends EssentialsCommand && !((stack.getType() == Material.WATER_BUCKET || stack.getType() == Material.LAVA_BUCKET) && user.isAuthorized("essentials.unlimited.item-bucket")))) { - user.sendMessage(Util.format("unlimitedItemPermission", itemname)); - return false; + throw new Exception(Util.format("unlimitedItemPermission", itemname)); } String message = "disableUnlimited"; @@ -103,7 +102,6 @@ public class Commandunlimited extends EssentialsCommand { message = "enableUnlimited"; enableUnlimited = true; - charge(user); if (!InventoryWorkaround.containsItem(target.getInventory(), true, stack)) { target.getInventory().addItem(stack); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandweather.java b/Essentials/src/com/earth2me/essentials/commands/Commandweather.java index eec1d9575..45c62d787 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandweather.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandweather.java @@ -23,7 +23,6 @@ public class Commandweather extends EssentialsCommand boolean isStorm = args[0].equalsIgnoreCase("storm"); World world = user.getWorld(); - charge(user); if (args.length > 1) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java index ef815dd87..1769202f5 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java @@ -35,7 +35,6 @@ public class Commandwhois extends EssentialsCommand showhidden = true; } String whois = args[0].toLowerCase(); - charge(sender); int prefixLength = ChatColor.stripColor(ess.getSettings().getNicknamePrefix()).length(); for (Player p : server.getOnlinePlayers()) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java index f2d6ed954..b59070320 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandworth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandworth.java @@ -43,7 +43,6 @@ public class Commandworth extends EssentialsCommand throw new Exception(Util.i18n("itemCannotBeSold")); } - charge(user); user.sendMessage(is.getDurability() != 0 ? Util.format("worthMeta", is.getType().toString().toLowerCase().replace("_", ""), diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java index c99cdfdc9..58da18c21 100644 --- a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java @@ -79,7 +79,10 @@ public abstract class EssentialsCommand implements IEssentialsCommand @Override public final void run(final Server server, final User user, final String commandLabel, final Command cmd, final String[] args) throws Exception { + final Trade charge = new Trade(this.getName(), ess); + charge.isAffordableFor(user); run(server, user, commandLabel, args); + charge.charge(user); } protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception @@ -111,13 +114,4 @@ public abstract class EssentialsCommand implements IEssentialsCommand } return bldr.toString(); } - - protected void charge(final CommandSender sender) throws ChargeException - { - if (sender instanceof Player) - { - final Trade charge = new Trade(this.getName(), ess); - charge.charge(ess.getUser((Player)sender)); - } - } } From 5a5dc933ad7276ff4ae883f929ebeb83592a3438 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:38:21 +0200 Subject: [PATCH 42/53] Forgot this one --- .../src/com/earth2me/essentials/spawn/Commandsetspawn.java | 1 - 1 file changed, 1 deletion(-) diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java index 6f538ac92..9ffc1c3f0 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/Commandsetspawn.java @@ -16,7 +16,6 @@ public class Commandsetspawn extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); final String group = args.length > 0 ? getFinalArg(args, 0) : "default"; ess.getSpawn().setSpawn(user.getLocation(), group); user.sendMessage(Util.format("spawnSet", group)); From 3ec0dbd4049ad68a7d1c7de9b509e5e7138bcdfd Mon Sep 17 00:00:00 2001 From: snowleo Date: Sat, 27 Aug 2011 23:54:23 +0200 Subject: [PATCH 43/53] Oops, these too. --- .../src/com/earth2me/essentials/commands/Commandcompass.java | 1 - .../src/com/earth2me/essentials/commands/Commanddeljail.java | 1 - .../src/com/earth2me/essentials/commands/Commanddelwarp.java | 1 - .../src/com/earth2me/essentials/commands/Commanddepth.java | 1 - 4 files changed, 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java index 0386485f4..bd07c2b9b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandcompass.java @@ -15,7 +15,6 @@ public class Commandcompass extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); int r = (int)user.getCorrectedYaw(); String dir; if (r < 23) dir = "N"; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java index 7fb6f816c..23ec04c4e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddeljail.java @@ -16,7 +16,6 @@ public class Commanddeljail extends EssentialsCommand { { throw new NotEnoughArgumentsException(); } - charge(sender); ess.getJail().delJail(args[0]); sender.sendMessage(Util.format("deleteJail", args[0])); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java index 42a68dda8..7c2795dda 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddelwarp.java @@ -19,7 +19,6 @@ public class Commanddelwarp extends EssentialsCommand { throw new NotEnoughArgumentsException(); } - charge(sender); ess.getWarps().delWarp(args[0]); sender.sendMessage(Util.format("deleteWarp", args[0])); } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java b/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java index 9a719335e..5ceb62591 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanddepth.java @@ -15,7 +15,6 @@ public class Commanddepth extends EssentialsCommand @Override public void run(Server server, User user, String commandLabel, String[] args) throws Exception { - charge(user); int y = user.getLocation().getBlockY() - 63; if (y > 0) { From fba4dd2d9a9a347a83b557432fdc4da32ab3ccaa Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 05:12:13 +0200 Subject: [PATCH 44/53] Testing yaml annotations --- .gitignore | 5 +- Essentials/nbproject/build-impl.xml | 14 + Essentials/nbproject/genfiles.properties | 4 +- Essentials/nbproject/project.properties | 10 +- Essentials/nbproject/project.xml | 11 +- .../earth2me/essentials/yaml/BaseYaml.java | 31 + .../essentials/yaml/ConfigLoader.java | 12 + .../com/earth2me/essentials/yaml/General.java | 55 + .../earth2me/essentials/yaml/Settings.java | 16 + .../com/earth2me/essentials/YamlTest.java | 37 + YamlAnnotations/build.xml | 74 ++ YamlAnnotations/manifest.mf | 3 + YamlAnnotations/nbproject/build-impl.xml | 1067 +++++++++++++++++ YamlAnnotations/nbproject/genfiles.properties | 8 + YamlAnnotations/nbproject/project.properties | 71 ++ YamlAnnotations/nbproject/project.xml | 18 + .../src/me/snowleo/yaml/YamlClass.java | 11 + .../src/me/snowleo/yaml/YamlComment.java | 12 + .../snowleo/yaml/YamlPropertyProcessor.java | 238 ++++ 19 files changed, 1690 insertions(+), 7 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/General.java create mode 100644 Essentials/src/com/earth2me/essentials/yaml/Settings.java create mode 100644 Essentials/test/com/earth2me/essentials/YamlTest.java create mode 100644 YamlAnnotations/build.xml create mode 100644 YamlAnnotations/manifest.mf create mode 100644 YamlAnnotations/nbproject/build-impl.xml create mode 100644 YamlAnnotations/nbproject/genfiles.properties create mode 100644 YamlAnnotations/nbproject/project.properties create mode 100644 YamlAnnotations/nbproject/project.xml create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlClass.java create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlComment.java create mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java diff --git a/.gitignore b/.gitignore index 7152ec996..1d8aeb1d1 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,7 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ \ No newline at end of file +/Essentials/build/ +/YamlAnnotations/nbproject/private/ +/YamlAnnotations/build/ +/YamlAnnotations/dist/ \ No newline at end of file diff --git a/Essentials/nbproject/build-impl.xml b/Essentials/nbproject/build-impl.xml index 21661c925..c01a2f393 100644 --- a/Essentials/nbproject/build-impl.xml +++ b/Essentials/nbproject/build-impl.xml @@ -601,6 +601,13 @@ is divided into following sections: + + + + + + + @@ -1038,6 +1045,13 @@ is divided into following sections: + + + + + + + diff --git a/Essentials/nbproject/genfiles.properties b/Essentials/nbproject/genfiles.properties index 9242cfd2b..62b47eb30 100644 --- a/Essentials/nbproject/genfiles.properties +++ b/Essentials/nbproject/genfiles.properties @@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78 build.xml.stylesheet.CRC32=28e38971@1.38.2.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=4b596d89 -nbproject/build-impl.xml.script.CRC32=dbc81ee1 +nbproject/build-impl.xml.data.CRC32=1d87756b +nbproject/build-impl.xml.script.CRC32=c2ee0b8b nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15 nbproject/profiler-build-impl.xml.script.CRC32=abda56ed diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 8df8ef4d2..407a3dd9c 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -1,6 +1,7 @@ annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.run.all.processors=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list=me.snowleo.yaml.YamlPropertyProcessor +annotation.processing.run.all.processors=false annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=Essentials application.vendor= @@ -82,7 +83,8 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar} + ${file.reference.PermissionsEx.jar}:\ + ${reference.YamlAnnotations.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false @@ -119,6 +121,8 @@ jnlp.signing.keystore= meta.inf.dir=${src.dir}/META-INF mkdist.disabled=true platform.active=default_platform +project.YamlAnnotations=../YamlAnnotations +reference.YamlAnnotations.jar=${project.YamlAnnotations}/dist/YamlAnnotations.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/Essentials/nbproject/project.xml b/Essentials/nbproject/project.xml index 354722f09..2efbc1ef0 100644 --- a/Essentials/nbproject/project.xml +++ b/Essentials/nbproject/project.xml @@ -14,6 +14,15 @@ ../lib/nblibraries.properties - + + + YamlAnnotations + jar + + jar + clean + jar + + diff --git a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java new file mode 100644 index 000000000..ab689ca5d --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java @@ -0,0 +1,31 @@ +package com.earth2me.essentials.yaml; + +import java.util.logging.Level; +import java.util.logging.Logger; + + +public abstract class BaseYaml +{ + + protected BaseYaml() + { + } + + protected abstract Class getClazz(); + + public T load() { + try + { + return getClazz().newInstance(); + } + catch (InstantiationException ex) + { + Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java new file mode 100644 index 000000000..a82546068 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java @@ -0,0 +1,12 @@ +package com.earth2me.essentials.yaml; + + +public class ConfigLoader +{ + + public ConfigLoader() + { + new Settings().getTest(); + } + +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/General.java b/Essentials/src/com/earth2me/essentials/yaml/General.java new file mode 100644 index 000000000..1d376ada6 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/General.java @@ -0,0 +1,55 @@ +package com.earth2me.essentials.yaml; + +import java.io.Serializable; + + +public class General implements Serializable +{ + private boolean debug = false; + private boolean updateCheck = true; + private String location = "null"; + + public General() + { + } + + public boolean isDebug() + { + return debug; + } + + public void setDebug(final boolean debug) + { + this.debug = debug; + } + + public boolean isUpdateCheck() + { + return updateCheck; + } + + public void setUpdateCheck(final boolean updateCheck) + { + this.updateCheck = updateCheck; + } + + public boolean isStupid() + { + return true; + } + + public void setStupid(final boolean bla) + { + return; + } + + public String getLocation() + { + return location; + } + + public void setLocation(final String location) + { + this.location = location; + } +} diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java new file mode 100644 index 000000000..3776f2b82 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/yaml/Settings.java @@ -0,0 +1,16 @@ +package com.earth2me.essentials.yaml; + +import me.snowleo.yaml.YamlClass; +import me.snowleo.yaml.YamlComment; + +@YamlClass +public class Settings extends SettingsYaml +{ + @YamlComment(comment = "Hello") + protected General test = new General(); + boolean test2 = true; + + public Settings() { + } + +} diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java new file mode 100644 index 000000000..fd097842c --- /dev/null +++ b/Essentials/test/com/earth2me/essentials/YamlTest.java @@ -0,0 +1,37 @@ +package com.earth2me.essentials; + +import junit.framework.TestCase; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.nodes.Tag; +import com.earth2me.essentials.yaml.Settings; +import org.bukkit.Location; +import org.bukkit.World.Environment; +import org.yaml.snakeyaml.constructor.Constructor; + + +public class YamlTest extends TestCase +{ + public YamlTest() + { + } + + public void testYaml() + { + final DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setExplicitRoot(Tag.MAP); + final Yaml yaml = new Yaml(options); + //Settings settings = (Settings)yaml.load(""); + Settings set1 = new Settings(); + final String dump = yaml.dump(set1); + final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); + final Settings set = (Settings)yaml2.load(dump); + if (set != null) + { + //assert set.getGeneral().getLocation() == null; + //assert set.equals(new Settings()); + System.out.println(dump); + } + } +} diff --git a/YamlAnnotations/build.xml b/YamlAnnotations/build.xml new file mode 100644 index 000000000..6c2177662 --- /dev/null +++ b/YamlAnnotations/build.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project YamlAnnotations. + + + diff --git a/YamlAnnotations/manifest.mf b/YamlAnnotations/manifest.mf new file mode 100644 index 000000000..328e8e5bc --- /dev/null +++ b/YamlAnnotations/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/YamlAnnotations/nbproject/build-impl.xml b/YamlAnnotations/nbproject/build-impl.xml new file mode 100644 index 000000000..de52ad5c0 --- /dev/null +++ b/YamlAnnotations/nbproject/build-impl.xml @@ -0,0 +1,1067 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/YamlAnnotations/nbproject/genfiles.properties b/YamlAnnotations/nbproject/genfiles.properties new file mode 100644 index 000000000..55d30716f --- /dev/null +++ b/YamlAnnotations/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6b9374e7 +build.xml.script.CRC32=b35f5bf5 +build.xml.stylesheet.CRC32=28e38971@1.44.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=6b9374e7 +nbproject/build-impl.xml.script.CRC32=822a2f91 +nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 diff --git a/YamlAnnotations/nbproject/project.properties b/YamlAnnotations/nbproject/project.properties new file mode 100644 index 000000000..6f85622cc --- /dev/null +++ b/YamlAnnotations/nbproject/project.properties @@ -0,0 +1,71 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +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}/YamlAnnotations.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# 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= +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +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/YamlAnnotations/nbproject/project.xml b/YamlAnnotations/nbproject/project.xml new file mode 100644 index 000000000..4ef3e3ff7 --- /dev/null +++ b/YamlAnnotations/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.java.j2seproject + + + YamlAnnotations + + + + + + + + + ../lib/nblibraries.properties + + + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java new file mode 100644 index 000000000..e98a0fc38 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java @@ -0,0 +1,11 @@ +package me.snowleo.yaml; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + + +@Target(ElementType.TYPE) +public @interface YamlClass +{ +} + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java new file mode 100644 index 000000000..5e8ba04e4 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java @@ -0,0 +1,12 @@ +package me.snowleo.yaml; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + + +@Target(ElementType.FIELD) +public @interface YamlComment +{ + String[] comment() default ""; +} + diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java new file mode 100644 index 000000000..c56b51b61 --- /dev/null +++ b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java @@ -0,0 +1,238 @@ +package me.snowleo.yaml; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Filer; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.ElementFilter; +import javax.lang.model.util.Elements; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; + + +@SupportedAnnotationTypes("me.snowleo.yaml.YamlClass") +@SupportedSourceVersion(SourceVersion.RELEASE_6) +public class YamlPropertyProcessor extends AbstractProcessor +{ + private transient Filer filer; + private transient Messager messager; + private Elements eltUtils; + + public YamlPropertyProcessor() + { + super(); + } + + @Override + public void init(final ProcessingEnvironment processingEnv) + { + super.init(processingEnv); + filer = processingEnv.getFiler(); + messager = processingEnv.getMessager(); + eltUtils = processingEnv.getElementUtils(); + } + + @Override + public boolean process(final Set set, final RoundEnvironment roundEnv) + { + for (Element elem : roundEnv.getElementsAnnotatedWith(YamlClass.class)) + { + if (elem.getKind() != ElementKind.CLASS) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass has to be a class", elem); + continue; + } + final TypeElement clazz = (TypeElement)elem; + String superClassName = clazz.getSuperclass().toString(); + if (!superClassName.startsWith(clazz.getEnclosingElement().toString())) + { + superClassName = clazz.getEnclosingElement().toString() + "." + superClassName; + } + if (!superClassName.equalsIgnoreCase(clazz.getQualifiedName().toString() + "Yaml")) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass must be extended by " + clazz.getQualifiedName().toString() + "Yaml", elem); + continue; + } + final List fields = new ArrayList(); + for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) + { + if (!(field.getModifiers().contains(Modifier.STATIC)) + && field.getModifiers().contains(Modifier.PROTECTED)) + { + fields.add(field); + } + else if (field.getAnnotation(YamlComment.class) != null) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlComment fields have to be nonstatic and protected.", field); + continue; + } + } + if (fields.isEmpty()) + { + messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass needs at least one protected field.", clazz); + continue; + } + createImplclass(clazz, fields); + createSuperclass(clazz, fields); + } + return true; + } + + private void createSuperclass(final TypeElement clazz, final List fields) + { + try + { + final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "Yaml"); + messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); + + final Writer writer = file.openWriter(); + //Add the content to the newly generated file. + + final PrintWriter pwriter = new PrintWriter(writer); + try + { + pwriter.print("package "); + pwriter.print(clazz.getEnclosingElement()); + pwriter.println(';'); + pwriter.println(); + pwriter.print("public class "); + pwriter.print(clazz.getSimpleName()); + pwriter.print("Yaml extends BaseYaml<"); + pwriter.print(clazz.getSimpleName()); + pwriter.println("> {"); + + pwriter.println(" @Override"); + pwriter.print(" protected Class<"); + pwriter.print(clazz.getSimpleName()); + pwriter.print("YamlImpl> getClazz() { return "); + pwriter.print(clazz.getSimpleName()); + pwriter.println("YamlImpl.class; };"); + + for (VariableElement var : fields) + { + final TypeMirror type = var.asType(); + final String name = capitalize(var.getSimpleName().toString()); + pwriter.print(" public "); + pwriter.print(type.toString()); + if (type.toString().equalsIgnoreCase("boolean")) + { + pwriter.print(" is"); + } + else + { + pwriter.print(" get"); + } + pwriter.print(name); + pwriter.println("() { throw new AssertionError(\"Cannot be called.\"); }"); + pwriter.print(" public void set"); + pwriter.print(name); + pwriter.print("(final "); + pwriter.print(type.toString()); + pwriter.print(' '); + pwriter.print(name); + pwriter.println(") { throw new AssertionError(\"Cannot be called.\"); }"); + } + pwriter.println("}"); + pwriter.flush(); + } + finally + { + pwriter.close(); + } + } + catch (IOException ex) + { + messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); + } + } + + private void createImplclass(final TypeElement clazz, final List fields) + { + try + { + final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "YamlImpl"); + messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); + + final Writer writer = file.openWriter(); + //Add the content to the newly generated file. + + final PrintWriter pwriter = new PrintWriter(writer); + try + { + pwriter.print("package "); + pwriter.print(clazz.getEnclosingElement()); + pwriter.println(';'); + pwriter.println(); + pwriter.print("public class "); + pwriter.print(clazz.getSimpleName()); + pwriter.print("YamlImpl extends "); + pwriter.print(clazz.getSimpleName()); + pwriter.println(" {"); + + for (VariableElement var : fields) + { + final TypeMirror type = var.asType(); + final String name = capitalize(var.getSimpleName().toString()); + pwriter.print(" public "); + pwriter.print(type.toString()); + if (type.toString().equalsIgnoreCase("boolean")) + { + pwriter.print(" is"); + } + else + { + pwriter.print(" get"); + } + pwriter.print(name); + pwriter.print("() { return this."); + pwriter.print(var.getSimpleName().toString()); + pwriter.println("; }"); + pwriter.print(" public void set"); + pwriter.print(name); + pwriter.print("(final "); + pwriter.print(type.toString()); + pwriter.print(' '); + pwriter.print(name); + pwriter.print(") { this."); + pwriter.print(var.getSimpleName().toString()); + pwriter.print(" = "); + pwriter.print(name); + pwriter.println("; }"); + } + pwriter.println("}"); + pwriter.flush(); + } + finally + { + pwriter.close(); + } + } + catch (IOException ex) + { + messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); + } + } + + private static String capitalize(String name) + { + char[] c = name.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + return new String(c); + } +} From 1fb57cb6789071459891300a06af016bd7a9608a Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 05:21:12 +0200 Subject: [PATCH 45/53] Disabling broken test --- Essentials/test/com/earth2me/essentials/YamlTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java index fd097842c..297ff894c 100644 --- a/Essentials/test/com/earth2me/essentials/YamlTest.java +++ b/Essentials/test/com/earth2me/essentials/YamlTest.java @@ -23,15 +23,15 @@ public class YamlTest extends TestCase options.setExplicitRoot(Tag.MAP); final Yaml yaml = new Yaml(options); //Settings settings = (Settings)yaml.load(""); - Settings set1 = new Settings(); - final String dump = yaml.dump(set1); - final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); - final Settings set = (Settings)yaml2.load(dump); + /*Settings set1 = new Settings(); + //final String dump = yaml.dump(set1); + //final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); + //final Settings set = (Settings)yaml2.load(dump); if (set != null) { //assert set.getGeneral().getLocation() == null; //assert set.equals(new Settings()); System.out.println(dump); - } + }*/ } } From 59e45592cffc4b25e18ddf38fa49e62e2321f419 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:16:01 +0200 Subject: [PATCH 46/53] Allow the build server to build again. --- Essentials/src/com/earth2me/essentials/yaml/Settings.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java index 3776f2b82..ad236b964 100644 --- a/Essentials/src/com/earth2me/essentials/yaml/Settings.java +++ b/Essentials/src/com/earth2me/essentials/yaml/Settings.java @@ -3,11 +3,12 @@ package com.earth2me.essentials.yaml; import me.snowleo.yaml.YamlClass; import me.snowleo.yaml.YamlComment; -@YamlClass -public class Settings extends SettingsYaml +//@YamlClass +public class Settings //extends SettingsYaml { - @YamlComment(comment = "Hello") + //@YamlComment(comment = "Hello") protected General test = new General(); + protected boolean test3; boolean test2 = true; public Settings() { From b559809bfa8311c90284e44bcaa49a398c60b258 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:17:43 +0200 Subject: [PATCH 47/53] Another build fix --- Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java index a82546068..7058a501f 100644 --- a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java +++ b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java @@ -6,7 +6,7 @@ public class ConfigLoader public ConfigLoader() { - new Settings().getTest(); + new Settings(); } } From 3dd3fa45190283fe5bed7fa383c6a8bdeef6a49c Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 06:24:34 +0200 Subject: [PATCH 48/53] Revert "Testing yaml annotations" This reverts commit fba4dd2d9a9a347a83b557432fdc4da32ab3ccaa. --- .gitignore | 5 +- Essentials/nbproject/build-impl.xml | 14 - Essentials/nbproject/genfiles.properties | 4 +- Essentials/nbproject/project.properties | 10 +- Essentials/nbproject/project.xml | 11 +- .../earth2me/essentials/yaml/BaseYaml.java | 31 - .../essentials/yaml/ConfigLoader.java | 12 - .../com/earth2me/essentials/yaml/General.java | 55 - .../earth2me/essentials/yaml/Settings.java | 17 - .../com/earth2me/essentials/YamlTest.java | 37 - YamlAnnotations/build.xml | 74 -- YamlAnnotations/manifest.mf | 3 - YamlAnnotations/nbproject/build-impl.xml | 1067 ----------------- YamlAnnotations/nbproject/genfiles.properties | 8 - YamlAnnotations/nbproject/project.properties | 71 -- YamlAnnotations/nbproject/project.xml | 18 - .../src/me/snowleo/yaml/YamlClass.java | 11 - .../src/me/snowleo/yaml/YamlComment.java | 12 - .../snowleo/yaml/YamlPropertyProcessor.java | 238 ---- 19 files changed, 7 insertions(+), 1691 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/General.java delete mode 100644 Essentials/src/com/earth2me/essentials/yaml/Settings.java delete mode 100644 Essentials/test/com/earth2me/essentials/YamlTest.java delete mode 100644 YamlAnnotations/build.xml delete mode 100644 YamlAnnotations/manifest.mf delete mode 100644 YamlAnnotations/nbproject/build-impl.xml delete mode 100644 YamlAnnotations/nbproject/genfiles.properties delete mode 100644 YamlAnnotations/nbproject/project.properties delete mode 100644 YamlAnnotations/nbproject/project.xml delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlClass.java delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlComment.java delete mode 100644 YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java diff --git a/.gitignore b/.gitignore index 1d8aeb1d1..7152ec996 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,4 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ -/YamlAnnotations/nbproject/private/ -/YamlAnnotations/build/ -/YamlAnnotations/dist/ \ No newline at end of file +/Essentials/build/ \ No newline at end of file diff --git a/Essentials/nbproject/build-impl.xml b/Essentials/nbproject/build-impl.xml index c01a2f393..21661c925 100644 --- a/Essentials/nbproject/build-impl.xml +++ b/Essentials/nbproject/build-impl.xml @@ -601,13 +601,6 @@ is divided into following sections: - - - - - - - @@ -1045,13 +1038,6 @@ is divided into following sections: - - - - - - - diff --git a/Essentials/nbproject/genfiles.properties b/Essentials/nbproject/genfiles.properties index 62b47eb30..9242cfd2b 100644 --- a/Essentials/nbproject/genfiles.properties +++ b/Essentials/nbproject/genfiles.properties @@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78 build.xml.stylesheet.CRC32=28e38971@1.38.2.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=1d87756b -nbproject/build-impl.xml.script.CRC32=c2ee0b8b +nbproject/build-impl.xml.data.CRC32=4b596d89 +nbproject/build-impl.xml.script.CRC32=dbc81ee1 nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15 nbproject/profiler-build-impl.xml.script.CRC32=abda56ed diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 407a3dd9c..8df8ef4d2 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -1,7 +1,6 @@ annotation.processing.enabled=true -annotation.processing.enabled.in.editor=true -annotation.processing.processors.list=me.snowleo.yaml.YamlPropertyProcessor -annotation.processing.run.all.processors=false +annotation.processing.enabled.in.editor=false +annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=Essentials application.vendor= @@ -83,8 +82,7 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar}:\ - ${reference.YamlAnnotations.jar} + ${file.reference.PermissionsEx.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false @@ -121,8 +119,6 @@ jnlp.signing.keystore= meta.inf.dir=${src.dir}/META-INF mkdist.disabled=true platform.active=default_platform -project.YamlAnnotations=../YamlAnnotations -reference.YamlAnnotations.jar=${project.YamlAnnotations}/dist/YamlAnnotations.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/Essentials/nbproject/project.xml b/Essentials/nbproject/project.xml index 2efbc1ef0..354722f09 100644 --- a/Essentials/nbproject/project.xml +++ b/Essentials/nbproject/project.xml @@ -14,15 +14,6 @@ ../lib/nblibraries.properties - - - YamlAnnotations - jar - - jar - clean - jar - - + diff --git a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java b/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java deleted file mode 100644 index ab689ca5d..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/BaseYaml.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.earth2me.essentials.yaml; - -import java.util.logging.Level; -import java.util.logging.Logger; - - -public abstract class BaseYaml -{ - - protected BaseYaml() - { - } - - protected abstract Class getClazz(); - - public T load() { - try - { - return getClazz().newInstance(); - } - catch (InstantiationException ex) - { - Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); - } - catch (IllegalAccessException ex) - { - Logger.getLogger(BaseYaml.class.getName()).log(Level.SEVERE, null, ex); - } - return null; - } -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java b/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java deleted file mode 100644 index 7058a501f..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/ConfigLoader.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.earth2me.essentials.yaml; - - -public class ConfigLoader -{ - - public ConfigLoader() - { - new Settings(); - } - -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/General.java b/Essentials/src/com/earth2me/essentials/yaml/General.java deleted file mode 100644 index 1d376ada6..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/General.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.earth2me.essentials.yaml; - -import java.io.Serializable; - - -public class General implements Serializable -{ - private boolean debug = false; - private boolean updateCheck = true; - private String location = "null"; - - public General() - { - } - - public boolean isDebug() - { - return debug; - } - - public void setDebug(final boolean debug) - { - this.debug = debug; - } - - public boolean isUpdateCheck() - { - return updateCheck; - } - - public void setUpdateCheck(final boolean updateCheck) - { - this.updateCheck = updateCheck; - } - - public boolean isStupid() - { - return true; - } - - public void setStupid(final boolean bla) - { - return; - } - - public String getLocation() - { - return location; - } - - public void setLocation(final String location) - { - this.location = location; - } -} diff --git a/Essentials/src/com/earth2me/essentials/yaml/Settings.java b/Essentials/src/com/earth2me/essentials/yaml/Settings.java deleted file mode 100644 index ad236b964..000000000 --- a/Essentials/src/com/earth2me/essentials/yaml/Settings.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.earth2me.essentials.yaml; - -import me.snowleo.yaml.YamlClass; -import me.snowleo.yaml.YamlComment; - -//@YamlClass -public class Settings //extends SettingsYaml -{ - //@YamlComment(comment = "Hello") - protected General test = new General(); - protected boolean test3; - boolean test2 = true; - - public Settings() { - } - -} diff --git a/Essentials/test/com/earth2me/essentials/YamlTest.java b/Essentials/test/com/earth2me/essentials/YamlTest.java deleted file mode 100644 index 297ff894c..000000000 --- a/Essentials/test/com/earth2me/essentials/YamlTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.earth2me.essentials; - -import junit.framework.TestCase; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.nodes.Tag; -import com.earth2me.essentials.yaml.Settings; -import org.bukkit.Location; -import org.bukkit.World.Environment; -import org.yaml.snakeyaml.constructor.Constructor; - - -public class YamlTest extends TestCase -{ - public YamlTest() - { - } - - public void testYaml() - { - final DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setExplicitRoot(Tag.MAP); - final Yaml yaml = new Yaml(options); - //Settings settings = (Settings)yaml.load(""); - /*Settings set1 = new Settings(); - //final String dump = yaml.dump(set1); - //final Yaml yaml2 = new Yaml(new Constructor(Settings.class)); - //final Settings set = (Settings)yaml2.load(dump); - if (set != null) - { - //assert set.getGeneral().getLocation() == null; - //assert set.equals(new Settings()); - System.out.println(dump); - }*/ - } -} diff --git a/YamlAnnotations/build.xml b/YamlAnnotations/build.xml deleted file mode 100644 index 6c2177662..000000000 --- a/YamlAnnotations/build.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - Builds, tests, and runs the project YamlAnnotations. - - - diff --git a/YamlAnnotations/manifest.mf b/YamlAnnotations/manifest.mf deleted file mode 100644 index 328e8e5bc..000000000 --- a/YamlAnnotations/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/YamlAnnotations/nbproject/build-impl.xml b/YamlAnnotations/nbproject/build-impl.xml deleted file mode 100644 index de52ad5c0..000000000 --- a/YamlAnnotations/nbproject/build-impl.xml +++ /dev/null @@ -1,1067 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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/YamlAnnotations/nbproject/genfiles.properties b/YamlAnnotations/nbproject/genfiles.properties deleted file mode 100644 index 55d30716f..000000000 --- a/YamlAnnotations/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=6b9374e7 -build.xml.script.CRC32=b35f5bf5 -build.xml.stylesheet.CRC32=28e38971@1.44.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=6b9374e7 -nbproject/build-impl.xml.script.CRC32=822a2f91 -nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 diff --git a/YamlAnnotations/nbproject/project.properties b/YamlAnnotations/nbproject/project.properties deleted file mode 100644 index 6f85622cc..000000000 --- a/YamlAnnotations/nbproject/project.properties +++ /dev/null @@ -1,71 +0,0 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processor.options= -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -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}/YamlAnnotations.jar -dist.javadoc.dir=${dist.dir}/javadoc -excludes= -includes=** -jar.compress=false -javac.classpath= -# 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= -main.class= -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -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/YamlAnnotations/nbproject/project.xml b/YamlAnnotations/nbproject/project.xml deleted file mode 100644 index 4ef3e3ff7..000000000 --- a/YamlAnnotations/nbproject/project.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - org.netbeans.modules.java.j2seproject - - - YamlAnnotations - - - - - - - - - ../lib/nblibraries.properties - - - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java b/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java deleted file mode 100644 index e98a0fc38..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlClass.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.snowleo.yaml; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - - -@Target(ElementType.TYPE) -public @interface YamlClass -{ -} - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java b/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java deleted file mode 100644 index 5e8ba04e4..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlComment.java +++ /dev/null @@ -1,12 +0,0 @@ -package me.snowleo.yaml; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - - -@Target(ElementType.FIELD) -public @interface YamlComment -{ - String[] comment() default ""; -} - diff --git a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java b/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java deleted file mode 100644 index c56b51b61..000000000 --- a/YamlAnnotations/src/me/snowleo/yaml/YamlPropertyProcessor.java +++ /dev/null @@ -1,238 +0,0 @@ -package me.snowleo.yaml; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.Filer; -import javax.annotation.processing.Messager; -import javax.annotation.processing.ProcessingEnvironment; -import javax.annotation.processing.RoundEnvironment; -import javax.annotation.processing.SupportedAnnotationTypes; -import javax.annotation.processing.SupportedSourceVersion; -import javax.lang.model.SourceVersion; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.ElementFilter; -import javax.lang.model.util.Elements; -import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; - - -@SupportedAnnotationTypes("me.snowleo.yaml.YamlClass") -@SupportedSourceVersion(SourceVersion.RELEASE_6) -public class YamlPropertyProcessor extends AbstractProcessor -{ - private transient Filer filer; - private transient Messager messager; - private Elements eltUtils; - - public YamlPropertyProcessor() - { - super(); - } - - @Override - public void init(final ProcessingEnvironment processingEnv) - { - super.init(processingEnv); - filer = processingEnv.getFiler(); - messager = processingEnv.getMessager(); - eltUtils = processingEnv.getElementUtils(); - } - - @Override - public boolean process(final Set set, final RoundEnvironment roundEnv) - { - for (Element elem : roundEnv.getElementsAnnotatedWith(YamlClass.class)) - { - if (elem.getKind() != ElementKind.CLASS) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass has to be a class", elem); - continue; - } - final TypeElement clazz = (TypeElement)elem; - String superClassName = clazz.getSuperclass().toString(); - if (!superClassName.startsWith(clazz.getEnclosingElement().toString())) - { - superClassName = clazz.getEnclosingElement().toString() + "." + superClassName; - } - if (!superClassName.equalsIgnoreCase(clazz.getQualifiedName().toString() + "Yaml")) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass must be extended by " + clazz.getQualifiedName().toString() + "Yaml", elem); - continue; - } - final List fields = new ArrayList(); - for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) - { - if (!(field.getModifiers().contains(Modifier.STATIC)) - && field.getModifiers().contains(Modifier.PROTECTED)) - { - fields.add(field); - } - else if (field.getAnnotation(YamlComment.class) != null) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlComment fields have to be nonstatic and protected.", field); - continue; - } - } - if (fields.isEmpty()) - { - messager.printMessage(Diagnostic.Kind.ERROR, "YamlClass needs at least one protected field.", clazz); - continue; - } - createImplclass(clazz, fields); - createSuperclass(clazz, fields); - } - return true; - } - - private void createSuperclass(final TypeElement clazz, final List fields) - { - try - { - final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "Yaml"); - messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); - - final Writer writer = file.openWriter(); - //Add the content to the newly generated file. - - final PrintWriter pwriter = new PrintWriter(writer); - try - { - pwriter.print("package "); - pwriter.print(clazz.getEnclosingElement()); - pwriter.println(';'); - pwriter.println(); - pwriter.print("public class "); - pwriter.print(clazz.getSimpleName()); - pwriter.print("Yaml extends BaseYaml<"); - pwriter.print(clazz.getSimpleName()); - pwriter.println("> {"); - - pwriter.println(" @Override"); - pwriter.print(" protected Class<"); - pwriter.print(clazz.getSimpleName()); - pwriter.print("YamlImpl> getClazz() { return "); - pwriter.print(clazz.getSimpleName()); - pwriter.println("YamlImpl.class; };"); - - for (VariableElement var : fields) - { - final TypeMirror type = var.asType(); - final String name = capitalize(var.getSimpleName().toString()); - pwriter.print(" public "); - pwriter.print(type.toString()); - if (type.toString().equalsIgnoreCase("boolean")) - { - pwriter.print(" is"); - } - else - { - pwriter.print(" get"); - } - pwriter.print(name); - pwriter.println("() { throw new AssertionError(\"Cannot be called.\"); }"); - pwriter.print(" public void set"); - pwriter.print(name); - pwriter.print("(final "); - pwriter.print(type.toString()); - pwriter.print(' '); - pwriter.print(name); - pwriter.println(") { throw new AssertionError(\"Cannot be called.\"); }"); - } - pwriter.println("}"); - pwriter.flush(); - } - finally - { - pwriter.close(); - } - } - catch (IOException ex) - { - messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); - } - } - - private void createImplclass(final TypeElement clazz, final List fields) - { - try - { - final JavaFileObject file = filer.createSourceFile(clazz.getQualifiedName() + "YamlImpl"); - messager.printMessage(Diagnostic.Kind.NOTE, "Creating " + file.toUri()); - - final Writer writer = file.openWriter(); - //Add the content to the newly generated file. - - final PrintWriter pwriter = new PrintWriter(writer); - try - { - pwriter.print("package "); - pwriter.print(clazz.getEnclosingElement()); - pwriter.println(';'); - pwriter.println(); - pwriter.print("public class "); - pwriter.print(clazz.getSimpleName()); - pwriter.print("YamlImpl extends "); - pwriter.print(clazz.getSimpleName()); - pwriter.println(" {"); - - for (VariableElement var : fields) - { - final TypeMirror type = var.asType(); - final String name = capitalize(var.getSimpleName().toString()); - pwriter.print(" public "); - pwriter.print(type.toString()); - if (type.toString().equalsIgnoreCase("boolean")) - { - pwriter.print(" is"); - } - else - { - pwriter.print(" get"); - } - pwriter.print(name); - pwriter.print("() { return this."); - pwriter.print(var.getSimpleName().toString()); - pwriter.println("; }"); - pwriter.print(" public void set"); - pwriter.print(name); - pwriter.print("(final "); - pwriter.print(type.toString()); - pwriter.print(' '); - pwriter.print(name); - pwriter.print(") { this."); - pwriter.print(var.getSimpleName().toString()); - pwriter.print(" = "); - pwriter.print(name); - pwriter.println("; }"); - } - pwriter.println("}"); - pwriter.flush(); - } - finally - { - pwriter.close(); - } - } - catch (IOException ex) - { - messager.printMessage(Diagnostic.Kind.ERROR, ex.toString()); - } - } - - private static String capitalize(String name) - { - char[] c = name.toCharArray(); - c[0] = Character.toUpperCase(c[0]); - return new String(c); - } -} From 0c37e091c0dd069c049e4c91ddea2883d1d934c2 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 13:47:20 +0200 Subject: [PATCH 49/53] Adding support for two more permission systems. --- .gitignore | 3 +- Essentials/nbproject/project.properties | 6 +- .../com/earth2me/essentials/Essentials.java | 2 + .../essentials/EssentialsPluginListener.java | 5 + .../com/earth2me/essentials/IEssentials.java | 1 + .../essentials/perm/BPermissionsHandler.java | 88 ++++++++++++++++++ .../{ => perm}/ConfigPermissionsHandler.java | 3 +- .../{ => perm}/IPermissionsHandler.java | 2 +- .../{ => perm}/Permissions2Handler.java | 2 +- .../{ => perm}/Permissions3Handler.java | 2 +- .../perm/PermissionsBukkitHandler.java | 86 +++++++++++++++++ .../{ => perm}/PermissionsExHandler.java | 4 +- .../SuperpermsHandler.java} | 5 +- lib/PermissionsBukkit-1.2.jar | Bin 0 -> 23673 bytes lib/bPermissions.jar | Bin 0 -> 36236 bytes 15 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java rename Essentials/src/com/earth2me/essentials/{ => perm}/ConfigPermissionsHandler.java (91%) rename Essentials/src/com/earth2me/essentials/{ => perm}/IPermissionsHandler.java (89%) rename Essentials/src/com/earth2me/essentials/{ => perm}/Permissions2Handler.java (97%) rename Essentials/src/com/earth2me/essentials/{ => perm}/Permissions3Handler.java (97%) create mode 100644 Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java rename Essentials/src/com/earth2me/essentials/{ => perm}/PermissionsExHandler.java (93%) rename Essentials/src/com/earth2me/essentials/{BukkitPermissionsHandler.java => perm/SuperpermsHandler.java} (88%) create mode 100644 lib/PermissionsBukkit-1.2.jar create mode 100644 lib/bPermissions.jar diff --git a/.gitignore b/.gitignore index 7152ec996..dd7da3087 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ /EssentialsPermissionsCommands/dist/ /Essentials/nbproject/private/ /Essentials/dist/ -/Essentials/build/ \ No newline at end of file +/Essentials/build/ +/YamlAnnotations/ \ No newline at end of file diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 8df8ef4d2..db78855e6 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -62,6 +62,7 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.BOSEconomy7.jar=../lib/BOSEconomy7.jar +file.reference.bPermissions.jar=../lib/bPermissions.jar file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar file.reference.iCo4.jar=../lib/iCo4.jar file.reference.iCo5.jar=../lib/iCo5.jar @@ -69,6 +70,7 @@ file.reference.iCo6.jar=../lib/iCo6.jar file.reference.junit-4.5.jar=..\\lib\\junit_4\\junit-4.5.jar file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar file.reference.Permissions3.jar=../lib/Permissions3.jar +file.reference.PermissionsBukkit-1.2.jar=../lib/PermissionsBukkit-1.2.jar file.reference.PermissionsEx.jar=../lib/PermissionsEx.jar includes=** jar.archive.disabled=${jnlp.enabled} @@ -82,7 +84,9 @@ javac.classpath=\ ${file.reference.iCo6.jar}:\ ${file.reference.MultiCurrency.jar}:\ ${file.reference.BOSEconomy7.jar}:\ - ${file.reference.PermissionsEx.jar} + ${file.reference.PermissionsEx.jar}:\ + ${file.reference.bPermissions.jar}:\ + ${file.reference.PermissionsBukkit-1.2.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 5fdb23785..cc465d7bf 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -17,6 +17,8 @@ */ package com.earth2me.essentials; +import com.earth2me.essentials.perm.IPermissionsHandler; +import com.earth2me.essentials.perm.ConfigPermissionsHandler; import com.earth2me.essentials.api.Economy; import com.earth2me.essentials.commands.EssentialsCommand; import java.io.*; diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 99df25578..2155ca622 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,5 +1,10 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.ConfigPermissionsHandler; +import com.earth2me.essentials.perm.BukkitPermissionsHandler; +import com.earth2me.essentials.perm.Permissions3Handler; +import com.earth2me.essentials.perm.Permissions2Handler; +import com.earth2me.essentials.perm.PermissionsExHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index 9f427b220..0512b629e 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.IPermissionsHandler; import com.earth2me.essentials.register.payment.Methods; import org.bukkit.World; import org.bukkit.command.Command; diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java new file mode 100644 index 000000000..bc9fc2113 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java @@ -0,0 +1,88 @@ +package com.earth2me.essentials.perm; + +import de.bananaco.permissions.Permissions; +import de.bananaco.permissions.interfaces.PermissionSet; +import de.bananaco.permissions.worlds.WorldPermissionsManager; +import java.util.List; +import org.bukkit.entity.Player; + + +public class BPermissionsHandler implements IPermissionsHandler +{ + private final transient WorldPermissionsManager wpm; + + public BPermissionsHandler() + { + wpm = Permissions.getWorldPermissionsManager(); + } + + @Override + public String getGroup(final Player base) + { + final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); + if (pset == null) + { + return "default"; + } + final List groups = pset.getGroups(base); + if (groups == null || groups.isEmpty()) + { + return "default"; + } + return groups.get(0); + } + + @Override + public boolean canBuild(Player base, String group) + { + return true; + } + + @Override + public boolean inGroup(Player base, String group) + { + final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); + if (pset == null) + { + return false; + } + final List groups = pset.getGroups(base); + if (groups == null || groups.isEmpty()) + { + return false; + } + return groups.contains(group); + } + + @Override + public boolean hasPermission(Player base, String node) + { + if (base.hasPermission("-" + node)) + { + return false; + } + final String[] parts = node.split("\\."); + final StringBuilder sb = new StringBuilder(); + for (String part : parts) + { + if (base.hasPermission(sb.toString() + "*")) + { + return true; + } + sb.append(part).append("."); + } + return base.hasPermission(node); + } + + @Override + public String getPrefix(Player base) + { + return ""; + } + + @Override + public String getSuffix(Player base) + { + return ""; + } +} diff --git a/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java similarity index 91% rename from Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index 200aa34f8..1d5ac447d 100644 --- a/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; +import com.earth2me.essentials.IEssentials; import org.bukkit.entity.Player; diff --git a/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java similarity index 89% rename from Essentials/src/com/earth2me/essentials/IPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java index a7bcc80b7..c7fddb6c8 100644 --- a/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; diff --git a/Essentials/src/com/earth2me/essentials/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java similarity index 97% rename from Essentials/src/com/earth2me/essentials/Permissions2Handler.java rename to Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index 71d7da58b..eca6feaf8 100644 --- a/Essentials/src/com/earth2me/essentials/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; diff --git a/Essentials/src/com/earth2me/essentials/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java similarity index 97% rename from Essentials/src/com/earth2me/essentials/Permissions3Handler.java rename to Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 99c95da0a..905b5e0a9 100644 --- a/Essentials/src/com/earth2me/essentials/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java new file mode 100644 index 000000000..fdf998ced --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -0,0 +1,86 @@ +package com.earth2me.essentials.perm; + +import com.platymuus.bukkit.permissions.Group; +import com.platymuus.bukkit.permissions.PermissionInfo; +import com.platymuus.bukkit.permissions.PermissionsPlugin; +import java.util.List; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + + +public class PermissionsBukkitHandler implements IPermissionsHandler +{ + private final transient PermissionsPlugin plugin; + + public PermissionsBukkitHandler(Plugin plugin) + { + this.plugin = (PermissionsPlugin)plugin; + } + + + public String getGroup(Player base) + { + final PermissionInfo info = plugin.getPlayerInfo(base.getName()); + if (info == null) { + return "default"; + } + final List groups = info.getGroups(); + if (groups == null || groups.isEmpty()) { + return "default"; + } + return groups.get(0).getName(); + } + + public boolean canBuild(Player base, String group) + { + return true; + } + + public boolean inGroup(Player base, String group) + { + final PermissionInfo info = plugin.getPlayerInfo(base.getName()); + if (info == null) { + return false; + } + final List groups = info.getGroups(); + if (groups == null || groups.isEmpty()) { + return false; + } + for (Group group1 : groups) + { + if(group1.getName().equalsIgnoreCase(group)) { + return true; + } + } + return false; + } + + public boolean hasPermission(Player base, String node) + { + if (base.hasPermission("-" + node)) + { + return false; + } + final String[] parts = node.split("\\."); + final StringBuilder sb = new StringBuilder(); + for (String part : parts) + { + if (base.hasPermission(sb.toString() + "*")) + { + return true; + } + sb.append(part).append("."); + } + return base.hasPermission(node); + } + + public String getPrefix(Player base) + { + return ""; + } + + public String getSuffix(Player base) + { + return ""; + } +} diff --git a/Essentials/src/com/earth2me/essentials/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java similarity index 93% rename from Essentials/src/com/earth2me/essentials/PermissionsExHandler.java rename to Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index f9151c77e..ed3c2afe6 100644 --- a/Essentials/src/com/earth2me/essentials/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; import ru.tehkode.permissions.PermissionManager; @@ -6,7 +6,7 @@ import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; -class PermissionsExHandler implements IPermissionsHandler +public class PermissionsExHandler implements IPermissionsHandler { private final transient PermissionManager manager; diff --git a/Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java similarity index 88% rename from Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index aee9ef0b4..e31776fe1 100644 --- a/Essentials/src/com/earth2me/essentials/BukkitPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -1,9 +1,9 @@ -package com.earth2me.essentials; +package com.earth2me.essentials.perm; import org.bukkit.entity.Player; -public class BukkitPermissionsHandler implements IPermissionsHandler +public class SuperpermsHandler implements IPermissionsHandler { public String getGroup(Player base) { @@ -49,3 +49,4 @@ public class BukkitPermissionsHandler implements IPermissionsHandler return ""; } } + diff --git a/lib/PermissionsBukkit-1.2.jar b/lib/PermissionsBukkit-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..3f5caf1b4e37fabca965f2672a2315eb8b0981ab GIT binary patch literal 23673 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 literal 0 HcmV?d00001 diff --git a/lib/bPermissions.jar b/lib/bPermissions.jar new file mode 100644 index 0000000000000000000000000000000000000000..b3b38e4255e26e4acac5baa6dbf297812b1d3714 GIT binary patch literal 36236 zcmb5VW0-8)k}h1UY}>Z&T4md|ZQHi(s#Vr1+qP}nzH6V;U-votySJb2oSA>}i5N3u z<`@xgyb&QM2?UG`0RHEiutehn_?H(l05E{Guo6FwxQqy$G{20vh_Ip(t+dG37y!V% z^u)N7Bn|B>j3f=^)Wmdy0{sHh&f(r6Ab^}C7A*n{ivGxH4!^VF#Xeh6MQk{_1t|u_s+3tT_Lay=&D+e19HD(tpV#-TF|d9 zAPN1z;9_D0{o$shJT2i-ZV*y&R0cgHsN=WI*rFArZ&wXm-Z9^zp zg?K9?dp~v*dUffoLgTEFNG$^rwvz@XSiFj`;1fImzpw?pC?Gs5X7mQgc|iI zrO%XE+YQ?$IU(LlS8Qz;K!t0Y-TQ5~xOG@PeVJx)tLAwQse^-r#p+cv*0QY6+Fv3j zZD^;M%!3>QZ`S3rKFNt~;p9uj4=2<|3#JdBN5097Wsz3bQROgs*n_g~^n~zRak~2* zv^%I(jCp*?BU!%3&F{>_(dAZxPy={%3WCR=6#9N055Ljl>qc~zMX(2tE5=9Jl!!%I zcG(*eeV~R*Qt5ajwaL7*`vcFlP#()Je*Ox{t}VrW-wE9zn-`f!%evi`_W8$#2%0Ct z-2Y>^?|(d+za9brKoruy?>OK;-x=Ck)BUw&{_he{{~=*xZeea|``-wn{kx!@v4gd_ zqocX4jpIL*{<-7-et+8kM(IBn5Yx9YvNCq~=U-T?ysm)64}a+&2jI}X4}*{d9IV{& zgFh+qCqAXJd}UuLL3)t?BrMBn@j-)E{TLWuPi*}~_9b-?uvjne#cJ0?`n)y|m+$xI z7Z3nbElMCL=xrsXMhtgc=olwr8@VJ&c~(Lbj*qP!nJE-bAb4Okkk157CKt&0{g(eo z8*~BGT>KSb;EITvq)OG_%U{2$hgJ-Da>H0xb z%X|HR9;0?m4zWUNP&?(_M#HA9#5xD)=j}szUsOf0qS)In4XZ)N)WZwLlM$+Hl+*cv zrHif++ysPM40K{kY8fi++NX|w!BdSKDr>5WtPW~5Dp2l8Z6#|Xp(b#%4Ea|`Q6JF# zCiLiGJMRNgeh>_GyOwivt$OFfgy2ZTC{uL`O*^tyv$XXw4TWlQ#OoiZDdQoCuQvxEG?~gc<}g-mz(Zl&?lBinB_0~D5x5e&Z^jMJ5gn&IEhUP zcu}cKwK*|9euGq9kXx=U5z_f)*&B6q*f*NG*G|@xeKK((SA%0A-7M!cSh||Gc;qJS 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 aM?!fiP=Est1VjP&F$eg(u Date: Sun, 28 Aug 2011 13:57:36 +0200 Subject: [PATCH 50/53] Updates to Plugin listener --- .../essentials/EssentialsPluginListener.java | 31 ++++++++++++++++--- .../essentials/perm/Permissions2Handler.java | 2 +- .../essentials/perm/Permissions3Handler.java | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 2155ca622..6d895082f 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,10 +1,12 @@ package com.earth2me.essentials; +import com.earth2me.essentials.perm.BPermissionsHandler; import com.earth2me.essentials.perm.ConfigPermissionsHandler; -import com.earth2me.essentials.perm.BukkitPermissionsHandler; import com.earth2me.essentials.perm.Permissions3Handler; import com.earth2me.essentials.perm.Permissions2Handler; +import com.earth2me.essentials.perm.PermissionsBukkitHandler; import com.earth2me.essentials.perm.PermissionsExHandler; +import com.earth2me.essentials.perm.SuperpermsHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.event.server.PluginDisableEvent; @@ -58,10 +60,31 @@ public class EssentialsPluginListener extends ServerListener implements IConf { if (ess.getSettings().useBukkitPermissions()) { - if (!(ess.getPermissionsHandler() instanceof BukkitPermissionsHandler)) + final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); + final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); + if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - ess.setPermissionsHandler(new BukkitPermissionsHandler()); + if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); + } + } + else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + { + if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + ess.setPermissionsHandler(new BPermissionsHandler()); + } + } + else + { + if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new SuperpermsHandler()); + } } } else diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index eca6feaf8..d22eb1c3a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -10,7 +10,7 @@ public class Permissions2Handler implements IPermissionsHandler { private final transient PermissionHandler permissionHandler; - Permissions2Handler(final Plugin permissionsPlugin) + public Permissions2Handler(final Plugin permissionsPlugin) { permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 905b5e0a9..84318689e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -10,7 +10,7 @@ public class Permissions3Handler implements IPermissionsHandler { private final transient PermissionHandler permissionHandler; - Permissions3Handler(final Plugin permissionsPlugin) + public Permissions3Handler(final Plugin permissionsPlugin) { permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } From 22c277f9ab38f599ea0bee7798be32b86510943f Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 14:12:27 +0200 Subject: [PATCH 51/53] If PermissionsBukkit or bPermissions is detected, we don't need the config switch. --- .../essentials/EssentialsPluginListener.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 6d895082f..cd969a10c 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -58,33 +58,30 @@ public class EssentialsPluginListener extends ServerListener implements IConf final Plugin permissionsPlugin = pm.getPlugin("Permissions"); if (permissionsPlugin == null || !permissionsPlugin.isEnabled()) { - if (ess.getSettings().useBukkitPermissions()) + final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); + final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); + if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) { - final Plugin permissionsBukkitPlugin = pm.getPlugin("PermissionsBukkit"); - final Plugin bPermissionsPlugin = pm.getPlugin("bPermissions"); - if (permissionsBukkitPlugin != null && permissionsBukkitPlugin.isEnabled()) + if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) { - if (!(ess.getPermissionsHandler() instanceof PermissionsBukkitHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); - ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); - } + LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions."); + ess.setPermissionsHandler(new PermissionsBukkitHandler(permissionsBukkitPlugin)); } - else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + } + else if (bPermissionsPlugin != null && bPermissionsPlugin.isEnabled()) + { + if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) { - if (!(ess.getPermissionsHandler() instanceof BPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); - ess.setPermissionsHandler(new BPermissionsHandler()); - } + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + ess.setPermissionsHandler(new BPermissionsHandler()); } - else + } + else if (ess.getSettings().useBukkitPermissions()) + { + if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) { - if (!(ess.getPermissionsHandler() instanceof SuperpermsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); - ess.setPermissionsHandler(new SuperpermsHandler()); - } + LOGGER.log(Level.INFO, "Essentials: Using superperms based permissions."); + ess.setPermissionsHandler(new SuperpermsHandler()); } } else From a60f040f7e201921c9aaf98d1eb47761d5ac2a09 Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 14:24:31 +0200 Subject: [PATCH 52/53] Cleanup --- .../essentials/perm/BPermissionsHandler.java | 42 +------------ .../perm/ConfigPermissionsHandler.java | 10 ++- .../essentials/perm/Permissions2Handler.java | 6 ++ .../essentials/perm/Permissions3Handler.java | 6 ++ .../perm/PermissionsBukkitHandler.java | 62 +++++-------------- .../essentials/perm/PermissionsExHandler.java | 18 ++++-- .../essentials/perm/SuperpermsHandler.java | 21 ++++--- 7 files changed, 64 insertions(+), 101 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java index bc9fc2113..82f793ee0 100644 --- a/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissionsHandler.java @@ -7,7 +7,7 @@ import java.util.List; import org.bukkit.entity.Player; -public class BPermissionsHandler implements IPermissionsHandler +public class BPermissionsHandler extends SuperpermsHandler { private final transient WorldPermissionsManager wpm; @@ -33,13 +33,7 @@ public class BPermissionsHandler implements IPermissionsHandler } @Override - public boolean canBuild(Player base, String group) - { - return true; - } - - @Override - public boolean inGroup(Player base, String group) + public boolean inGroup(final Player base, final String group) { final PermissionSet pset = wpm.getPermissionSet(base.getWorld()); if (pset == null) @@ -53,36 +47,4 @@ public class BPermissionsHandler implements IPermissionsHandler } return groups.contains(group); } - - @Override - public boolean hasPermission(Player base, String node) - { - if (base.hasPermission("-" + node)) - { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder sb = new StringBuilder(); - for (String part : parts) - { - if (base.hasPermission(sb.toString() + "*")) - { - return true; - } - sb.append(part).append("."); - } - return base.hasPermission(node); - } - - @Override - public String getPrefix(Player base) - { - return ""; - } - - @Override - public String getSuffix(Player base) - { - return ""; - } } diff --git a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java index 1d5ac447d..82d285b1f 100644 --- a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java @@ -13,33 +13,39 @@ public class ConfigPermissionsHandler implements IPermissionsHandler this.ess = ess; } + @Override public String getGroup(final Player base) { return "default"; } + @Override public boolean canBuild(final Player base, final String group) { return true; } + @Override public boolean inGroup(final Player base, final String group) { return false; } + @Override public boolean hasPermission(final Player base, final String node) { final String[] cmds = node.split("\\.", 2); - return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]) - && ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]); + return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]) + && ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]); } + @Override public String getPrefix(final Player base) { return ""; } + @Override public String getSuffix(final Player base) { return ""; diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java index d22eb1c3a..0d7b45cb7 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions2Handler.java @@ -15,33 +15,39 @@ public class Permissions2Handler implements IPermissionsHandler permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } + @Override public String getGroup(final Player base) { final String group = permissionHandler.getGroup(base.getWorld().getName(), base.getName()); return group == null ? "default" : group; } + @Override public boolean canBuild(final Player base, final String group) { return permissionHandler.canGroupBuild(base.getWorld().getName(), getGroup(base)); } + @Override public boolean inGroup(final Player base, final String group) { return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group); } + @Override public boolean hasPermission(final Player base, final String node) { return permissionHandler.permission(base, node); } + @Override public String getPrefix(final Player base) { final String prefix = permissionHandler.getGroupPrefix(base.getWorld().getName(), getGroup(base)); return prefix == null ? "" : prefix; } + @Override public String getSuffix(final Player base) { final String suffix = permissionHandler.getGroupSuffix(base.getWorld().getName(), getGroup(base)); diff --git a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java index 84318689e..c0ac249a8 100644 --- a/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/Permissions3Handler.java @@ -15,31 +15,37 @@ public class Permissions3Handler implements IPermissionsHandler permissionHandler = ((Permissions)permissionsPlugin).getHandler(); } + @Override public String getGroup(final Player base) { return permissionHandler.getPrimaryGroup(base.getWorld().getName(), base.getName()); } + @Override public boolean canBuild(final Player base, final String group) { return permissionHandler.canUserBuild(base.getWorld().getName(), base.getName()); } + @Override public boolean inGroup(final Player base, final String group) { return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group); } + @Override public boolean hasPermission(final Player base, final String node) { return permissionHandler.has(base, node); } + @Override public String getPrefix(final Player base) { return permissionHandler.getUserPrefix(base.getWorld().getName(), base.getName()); } + @Override public String getSuffix(final Player base) { return permissionHandler.getUserSuffix(base.getWorld().getName(), base.getName()); diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java index fdf998ced..9fd87905e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsBukkitHandler.java @@ -8,79 +8,51 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -public class PermissionsBukkitHandler implements IPermissionsHandler +public class PermissionsBukkitHandler extends SuperpermsHandler { private final transient PermissionsPlugin plugin; - public PermissionsBukkitHandler(Plugin plugin) + public PermissionsBukkitHandler(final Plugin plugin) { this.plugin = (PermissionsPlugin)plugin; } - - - public String getGroup(Player base) + + @Override + public String getGroup(final Player base) { final PermissionInfo info = plugin.getPlayerInfo(base.getName()); - if (info == null) { + if (info == null) + { return "default"; } final List groups = info.getGroups(); - if (groups == null || groups.isEmpty()) { + if (groups == null || groups.isEmpty()) + { return "default"; } return groups.get(0).getName(); } - public boolean canBuild(Player base, String group) - { - return true; - } - - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { final PermissionInfo info = plugin.getPlayerInfo(base.getName()); - if (info == null) { + if (info == null) + { return false; } final List groups = info.getGroups(); - if (groups == null || groups.isEmpty()) { + if (groups == null || groups.isEmpty()) + { return false; } for (Group group1 : groups) { - if(group1.getName().equalsIgnoreCase(group)) { + if (group1.getName().equalsIgnoreCase(group)) + { return true; } } return false; } - - public boolean hasPermission(Player base, String node) - { - if (base.hasPermission("-" + node)) - { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder sb = new StringBuilder(); - for (String part : parts) - { - if (base.hasPermission(sb.toString() + "*")) - { - return true; - } - sb.append(part).append("."); - } - return base.hasPermission(node); - } - - public String getPrefix(Player base) - { - return ""; - } - - public String getSuffix(Player base) - { - return ""; - } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java index ed3c2afe6..28b056c0a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java @@ -15,7 +15,8 @@ public class PermissionsExHandler implements IPermissionsHandler manager = PermissionsEx.getPermissionManager(); } - public String getGroup(Player base) + @Override + public String getGroup(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -25,7 +26,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getGroupsNames()[0]; } - public boolean canBuild(Player base, String group) + @Override + public boolean canBuild(final Player base, final String group) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -36,7 +38,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getOptionBoolean("build", base.getWorld().getName(), true); } - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -47,12 +50,14 @@ public class PermissionsExHandler implements IPermissionsHandler return user.inGroup(group); } - public boolean hasPermission(Player base, String node) + @Override + public boolean hasPermission(final Player base, final String node) { return manager.has(base.getName(), node, base.getWorld().getName()); } - public String getPrefix(Player base) + @Override + public String getPrefix(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) @@ -62,7 +67,8 @@ public class PermissionsExHandler implements IPermissionsHandler return user.getPrefix(); } - public String getSuffix(Player base) + @Override + public String getSuffix(final Player base) { final PermissionUser user = manager.getUser(base.getName()); if (user == null) diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index e31776fe1..60b1c5a3d 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -5,22 +5,26 @@ import org.bukkit.entity.Player; public class SuperpermsHandler implements IPermissionsHandler { - public String getGroup(Player base) + @Override + public String getGroup(final Player base) { return "default"; } - public boolean canBuild(Player base, String group) + @Override + public boolean canBuild(final Player base, final String group) { - return true; + return hasPermission(base, "essentials.build"); } - public boolean inGroup(Player base, String group) + @Override + public boolean inGroup(final Player base, final String group) { return false; } - public boolean hasPermission(Player base, String node) + @Override + public boolean hasPermission(final Player base, final String node) { if (base.hasPermission("-" + node)) { @@ -39,14 +43,15 @@ public class SuperpermsHandler implements IPermissionsHandler return base.hasPermission(node); } - public String getPrefix(Player base) + @Override + public String getPrefix(final Player base) { return ""; } - public String getSuffix(Player base) + @Override + public String getSuffix(final Player base) { return ""; } } - From 12e3eb1a234f991b6c7b136665de2ddd74fde1ab Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 28 Aug 2011 23:51:10 +0200 Subject: [PATCH 53/53] Fix compatibility issues with Citizens --- Essentials/src/com/earth2me/essentials/Essentials.java | 2 +- Essentials/src/com/earth2me/essentials/EssentialsConf.java | 5 ----- .../com/earth2me/essentials/EssentialsPlayerListener.java | 4 ---- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index cc465d7bf..43d397fda 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -564,7 +564,7 @@ public class Essentials extends JavaPlugin implements IEssentials } catch (NullPointerException ex) { - return null; + return new User(base, this); } } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 2e3920eba..c48f9f987 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -47,11 +47,6 @@ public class EssentialsConf extends Configuration LOGGER.log(Level.SEVERE, Util.format("failedToCreateConfig", configFile.toString())); } } - if (configFile.exists() && configFile.length() == 0 && !configFile.delete()) - { - LOGGER.log(Level.SEVERE, "Could not delete file " + configFile.toString()); - } - // This will delete files where the first character is 0. In most cases they are broken. if (configFile.exists() && configFile.length() != 0) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index fbd6995c5..66de8ef29 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -315,10 +315,6 @@ public class EssentialsPlayerListener extends PlayerListener return; } User user = ess.getUser(event.getPlayer()); - if (user == null) - { - user = new User(event.getPlayer(), ess); - } user.setNPC(false); final long currentTime = System.currentTimeMillis();