From ab6bc94456e170d5d5d52f94c5a8448ef7f385b6 Mon Sep 17 00:00:00 2001 From: okamosy Date: Mon, 22 Aug 2011 22:10:23 +0100 Subject: [PATCH 01/10] 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 18b6c3436f8526b6dce6ec49327b9f9aa0833326 Mon Sep 17 00:00:00 2001 From: okamosy Date: Tue, 23 Aug 2011 19:47:50 +0100 Subject: [PATCH 02/10] 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 c7903459acb9ddf42dfc7f0f5370375842d0a033 Mon Sep 17 00:00:00 2001 From: okamosy Date: Tue, 23 Aug 2011 22:58:19 +0100 Subject: [PATCH 03/10] 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 767362c9d8748fc91ee3fa77f3de17b46d60044b Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 02:48:38 +0100 Subject: [PATCH 04/10] 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 13056601b7ee5ad2b40e0b468c6910cc286e39ee Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 03:09:27 +0100 Subject: [PATCH 05/10] 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 560ea0d3838a6424b1a591ecdd7e361cb4e918bf Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 03:49:35 +0100 Subject: [PATCH 06/10] 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 ef857bfe967ca122c0cd58f05463df3f6937ec61 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 24 Aug 2011 05:18:35 +0100 Subject: [PATCH 07/10] 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 d0cb64bddc0e451ba3e3b5028228c66649344d73 Mon Sep 17 00:00:00 2001 From: snowleo Date: Thu, 25 Aug 2011 17:37:41 +0200 Subject: [PATCH 08/10] 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 751de18eaa4819e4eed8b67815d3f99e4a0a2f1b Mon Sep 17 00:00:00 2001 From: snowleo Date: Fri, 26 Aug 2011 04:46:08 +0200 Subject: [PATCH 09/10] 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 d38f95a2bdaf3f706994472e42950ffb3e5cd07c Mon Sep 17 00:00:00 2001 From: KHobbits Date: Fri, 26 Aug 2011 05:12:29 +0100 Subject: [PATCH 10/10] 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)); }