From 91393e3180c01ae2e3db5501d583e5aa26d79058 Mon Sep 17 00:00:00 2001 From: snowleo Date: Tue, 23 Aug 2011 01:28:01 +0200 Subject: [PATCH 1/9] 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 2/9] 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 3/9] 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 4/9] 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 5/9] 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 6/9] 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 7/9] 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 8/9] 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 9/9] 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: /