From 2f1aee005a645d45e3e18018ecf5ebbd531c4002 Mon Sep 17 00:00:00 2001 From: 502647092 Date: Tue, 22 Sep 2015 16:23:55 +0800 Subject: [PATCH] comeplete 1.7-1.8 all version... Signed-off-by: 502647092 --- pom.xml | 9 +- .../bekvon/bukkit/residence/Residence.java | 58 +- .../residence/ResidenceCommandListener.java | 770 ++++------ .../residence/economy/rent/RentManager.java | 801 +++++----- .../listeners/ResidenceEntityListener.java | 611 +++----- .../listeners/ResidencePlayerListener.java | 256 ++-- .../ResidencePlayerListener_1_8.java | 45 + .../protection/ClaimedResidence.java | 491 +++--- .../residence/protection/FlagPermissions.java | 678 ++++----- .../protection/ResidenceManager.java | 1323 ++++++++--------- .../protection/ResidencePermissions.java | 288 ++-- 11 files changed, 2223 insertions(+), 3107 deletions(-) create mode 100644 src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener_1_8.java diff --git a/pom.xml b/pom.xml index 1bee92d..148b7ca 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,6 @@ Residence ${project.name} - src src/main/resources @@ -19,8 +18,8 @@ maven-compiler-plugin 3.1 - 1.7 - 1.7 + 1.8 + 1.8 @@ -56,6 +55,10 @@ spigot-repo https://hub.spigotmc.org/nexus/content/groups/public/ + + citycraft-repo + http://ci.citycraft.cn:8800/jenkins/plugin/repository/everything/ + diff --git a/src/main/java/com/bekvon/bukkit/residence/Residence.java b/src/main/java/com/bekvon/bukkit/residence/Residence.java index 223a3d7..55ba5c3 100644 --- a/src/main/java/com/bekvon/bukkit/residence/Residence.java +++ b/src/main/java/com/bekvon/bukkit/residence/Residence.java @@ -40,6 +40,7 @@ import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener_1_8; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -67,7 +68,7 @@ import cn.citycraft.PluginHelper.config.FileConfig; */ public class Residence extends JavaPlugin { - public static String bukkitver; + public static float bukkitver; protected static ResidenceManager rmanager; protected static SelectionManager smanager; protected static PermissionManager gmanager; @@ -75,6 +76,7 @@ public class Residence extends JavaPlugin { protected static ResidenceBlockListener blistener; protected static ResidencePlayerListener plistener; protected static ResidenceEntityListener elistener; + protected static ResidencePlayerListener_1_8 plistener1_8; protected static TransactionManager tmanager; protected static PermissionListManager pmanager; protected static LeaseManager leasemanager; @@ -103,40 +105,26 @@ public class Residence extends JavaPlugin { protected Map deleteConfirm; - private Runnable doHeals = new Runnable() { - @Override - public void run() { - plistener.doHeals(); - } + private Runnable doHeals = () -> plistener.doHeals(); + + private Runnable rentExpire = () -> { + rentmanager.checkCurrentRents(); + if (cmanager.showIntervalMessages()) + getLog().info(" - Rent Expirations checked!"); }; - private Runnable rentExpire = new Runnable() { - @Override - public void run() { - rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) - getLog().info(" - Rent Expirations checked!"); - } + private Runnable leaseExpire = () -> { + leasemanager.doExpirations(); + if (cmanager.showIntervalMessages()) + getLog().info(" - Lease Expirations checked!"); }; - private Runnable leaseExpire = new Runnable() { - @Override - public void run() { - leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) - getLog().info(" - Lease Expirations checked!"); - } - }; - - private Runnable autoSave = new Runnable() { - @Override - public void run() { - try { - if (initsuccess) - saveYml(); - } catch (Exception ex) { - getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); - } + private Runnable autoSave = () -> { + try { + if (initsuccess) + saveYml(); + } catch (Exception ex) { + getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); } }; @@ -235,6 +223,10 @@ public class Residence extends JavaPlugin { return wmanager; } + public static boolean is1_8() { + return bukkitver == 1.8; + } + public static boolean isResAdminOn(Player player) { if (resadminToggle.contains(player.getName())) return true; @@ -312,7 +304,7 @@ public class Residence extends JavaPlugin { public void onEnable() { try { log = this.getLogger(); - bukkitver = this.getServer().getBukkitVersion().substring(0, 5); + bukkitver = Float.parseFloat(this.getServer().getBukkitVersion().substring(0, 3)); initsuccess = false; deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); @@ -412,9 +404,11 @@ public class Residence extends JavaPlugin { blistener = new ResidenceBlockListener(); plistener = new ResidencePlayerListener(); elistener = new ResidenceEntityListener(); + plistener1_8 = new ResidencePlayerListener_1_8(); PluginManager pm = getServer().getPluginManager(); pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); + pm.registerEvents(plistener1_8, this); pm.registerEvents(elistener, this); firstenable = false; diff --git a/src/main/java/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/main/java/com/bekvon/bukkit/residence/ResidenceCommandListener.java index bd8e3d2..59c2a32 100644 --- a/src/main/java/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/main/java/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -26,23 +26,101 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin; public class ResidenceCommandListener extends Residence { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); + server.getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) + return true; + if (command.getName().equals("resreload") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + this.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件."); + System.out.println("[Residence] 重载 by " + player.getName() + "."); + } + } else { + this.reloadPlugin(); + System.out.println("[Residence] 重载 by 控制台."); + } + return true; + } + if (command.getName().equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) + try { + this.loadYml(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + } + return true; + } else if (command.getName().equals("resworld")) { + if (args.length == 2 && args[0].equalsIgnoreCase("remove")) + if (sender instanceof ConsoleCommandSender) { + rmanager.removeAllFromWorld(sender, args[1]); + return true; + } else + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + return false; + } else if (command.getName().equals("rc")) { + if (sender instanceof Player) { + Player player = (Player) sender; + String pname = player.getName(); + if (cmanager.chatEnabled()) { + if (args.length == 0) + plistener.tooglePlayerResidenceChat(player); + else { + String area = plistener.getCurrentResidenceName(pname); + if (area != null) { + ChatChannel channel = chatmanager.getChannel(area); + if (channel != null) { + String message = ""; + for (String arg : args) + message = message + " " + arg; + channel.chat(pname, message); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } + } else + player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); + } + return true; + } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) + resadmin = true; + if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { + ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); + return true; + } + } else + resadmin = true; + return commandRes(args, resadmin, command, sender); + } + return super.onCommand(sender, command, label, args); + } + private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { if (helppages != null) { String helppath = "res"; for (String arg : args) { - if (arg.equalsIgnoreCase("?")) { + if (arg.equalsIgnoreCase("?")) break; - } helppath = helppath + "." + arg; } int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { + if (!args[args.length - 1].equalsIgnoreCase("?")) try { page = Integer.parseInt(args[args.length - 1]); } catch (Exception ex) { sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); } - } if (helppages.containesEntry(helppath)) { helppages.printHelp(sender, page, helppath); return true; @@ -53,14 +131,12 @@ public class ResidenceCommandListener extends Residence { @SuppressWarnings("deprecation") private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 - && args[args.length - 2].equals("?")) + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) return commandHelp(args, resadmin, sender); int page = 1; try { - if (args.length > 0) { + if (args.length > 0) page = Integer.parseInt(args[args.length - 1]); - } } catch (Exception ex) { } Player player = null; @@ -70,15 +146,13 @@ public class ResidenceCommandListener extends Residence { player = (Player) sender; group = Residence.getPermissionManager().getGroup(player); pname = player.getName(); - } else { + } else resadmin = true; - } - if (cmanager.allowAdminsOnly()) { + if (cmanager.allowAdminsOnly()) if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); + sender.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); return true; } - } if (args.length == 0) return false; if (args.length == 0) { @@ -92,20 +166,17 @@ public class ResidenceCommandListener extends Residence { return commandResConfirm(args, resadmin, sender, page); if (cmd.equals("version")) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "当前服务器运行的 " + ChatColor.GOLD + "Residence" - + ChatColor.RED + " 版本: " + ChatColor.BLUE + this.getDescription().getVersion()); + sender.sendMessage(ChatColor.RED + "当前服务器运行的 " + ChatColor.GOLD + "Residence" + ChatColor.RED + " 版本: " + ChatColor.BLUE + this.getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "创建者: " + ChatColor.YELLOW + "bekvon"); sender.sendMessage(ChatColor.GREEN + "升级到 1.8 by: " + ChatColor.YELLOW + "DartCZ"); sender.sendMessage(ChatColor.RED + "升级到最新无UUID版本 by: " + ChatColor.YELLOW + "喵♂呜"); String names = null; List authlist = this.getDescription().getAuthors(); - for (String auth : authlist) { - if (names == null) { + for (String auth : authlist) + if (names == null) names = auth; - } else { + else names = names + ", " + auth; - } - } sender.sendMessage(ChatColor.GREEN + "作者: " + ChatColor.YELLOW + names); sender.sendMessage(ChatColor.DARK_AQUA + "插件命令列表,帮助, 请查看wiki:"); sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/"); @@ -122,43 +193,31 @@ public class ResidenceCommandListener extends Residence { ClaimedResidence area = rmanager.getByName(args[1]); if (area != null) { area.getPermissions().setOwner(args[2], true); - if (area.getParent() == null) { + if (area.getParent() == null) sender.sendMessage(ChatColor.GREEN - + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " - + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW - + args[2] + ChatColor.GREEN)); - } else { - sender.sendMessage(ChatColor.GREEN - + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " - + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " - + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] - + ChatColor.GREEN)); - } - } else { + + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + else + sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", + ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + } else sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } if (player == null) return true; - if (command.getName().equals("resadmin")) { + if (command.getName().equals("resadmin")) if (args.length == 1 && args[0].equals("on")) { resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); return true; } else if (args.length == 1 && args[0].equals("off")) { resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); return true; } - } - if (!resadmin && resadminToggle.contains(player.getName())) { - if (!gmanager.isResidenceAdmin(player)) { + if (!resadmin && resadminToggle.contains(player.getName())) + if (!gmanager.isResidenceAdmin(player)) resadminToggle.remove(player.getName()); - } - } if (cmd.equals("select")) return commandResSelect(args, resadmin, player, page); if (cmd.equals("create")) @@ -172,12 +231,9 @@ public class ResidenceCommandListener extends Residence { return false; if (resadmin || args[1].endsWith(pname)) { rmanager.removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] - + ChatColor.GREEN)); - } else { + player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } else player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - } return true; } if (cmd.equals("compass")) @@ -204,11 +260,10 @@ public class ResidenceCommandListener extends Residence { if (cmd.equals("info")) { if (args.length == 1) { String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { + if (area != null) rmanager.printAreaInfo(area, player); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length == 2) { rmanager.printAreaInfo(args[1], player); @@ -218,40 +273,20 @@ public class ResidenceCommandListener extends Residence { } if (cmd.equals("check")) { if (args.length == 3 || args.length == 4) { - if (args.length == 4) { + if (args.length == 4) pname = args[3]; - } ClaimedResidence res = rmanager.getByName(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW - + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname - + ChatColor.RED + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(language - .getPhrase( - "FlagCheckTrue", - ChatColor.GREEN - + args[2] - + ChatColor.YELLOW - + "." - + ChatColor.GREEN - + pname - + ChatColor.YELLOW - + "." - + ChatColor.YELLOW - + args[1] - + ChatColor.RED - + "." - + (res.getPermissions() - .playerHas(pname, - res.getPermissions().getWorld(), - args[2], false) ? ChatColor.GREEN - + "TRUE" : ChatColor.RED + "FALSE"))); - } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) + player.sendMessage(language.getPhrase("FlagCheckFalse", + ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); + else + player.sendMessage(language.getPhrase("FlagCheckTrue", + ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); return true; } return false; @@ -260,13 +295,10 @@ public class ResidenceCommandListener extends Residence { if (args.length != 1) return false; String res = rmanager.getNameByLoc(player.getLocation()); - if (res == null) { + if (res == null) player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.GREEN - + language.getPhrase("InResidence", ChatColor.YELLOW + res - + ChatColor.GREEN)); - } + else + player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); return true; } if (cmd.equals("set")) @@ -345,9 +377,9 @@ public class ResidenceCommandListener extends Residence { return true; } ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res == null) { + if (res == null) player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { + else { player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); player.teleport(res.getOutsideFreeLoc(player.getLocation())); } @@ -357,21 +389,19 @@ public class ResidenceCommandListener extends Residence { if (args.length != 2) return false; Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - - } + if (targetplayer == null) + return false; group = gmanager.getGroup(player); if (!group.hasKickAccess()) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; } ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); - if (res.getOwner().equals(player.getName())) { + if (res.getOwner().equals(player.getName())) if (res.getPlayersInResidence().contains(targetplayer)) { targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); } - } } if (cmd.equals("mirror")) { @@ -381,14 +411,14 @@ public class ResidenceCommandListener extends Residence { return true; } if (cmd.equals("listall")) { - if (args.length == 1) { + if (args.length == 1) rmanager.listAllResidences(player, 1); - } else if (args.length == 2) { + else if (args.length == 2) try { rmanager.listAllResidences(player, page); } catch (Exception ex) { } - } else + else return false; return true; } @@ -397,14 +427,14 @@ public class ResidenceCommandListener extends Residence { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; } - if (args.length == 1) { + if (args.length == 1) rmanager.listAllResidences(player, 1, true); - } else if (args.length == 2) { + else if (args.length == 2) try { rmanager.listAllResidences(player, page, true); } catch (Exception ex) { } - } else + else return false; return true; } @@ -412,11 +442,8 @@ public class ResidenceCommandListener extends Residence { if (args.length != 2) return false; try { - player.sendMessage(ChatColor.GREEN - + language.getPhrase("MaterialGet", - ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED - + Material.getMaterial(Integer.parseInt(args[1])).name() - + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", + ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material.getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); } catch (Exception ex) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); } @@ -424,11 +451,10 @@ public class ResidenceCommandListener extends Residence { } if (cmd.equals("tpset")) { ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res != null) { + if (res != null) res.setTpLoc(player, resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } if (cmd.equals("tp")) { @@ -466,10 +492,8 @@ public class ResidenceCommandListener extends Residence { return true; } res.getPermissions().setOwner("Server Land", false); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] - + ChatColor.GREEN + "." + ChatColor.YELLOW + "Server Land" - + ChatColor.GREEN)); + player.sendMessage( + ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW + "Server Land" + ChatColor.GREEN)); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -485,92 +509,69 @@ public class ResidenceCommandListener extends Residence { if (area != null) { area.getPermissions().clearFlags(); player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); - } else { + } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" - + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " - + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); return true; } return false; } private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { + if (args.length == 4) if (args[1].equals("remove")) { ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { + if (res != null) res.removeArea(player, args[3], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin( - "WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) smanager.worldEdit(player); - } - } if (smanager.hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.addArea( - player, - new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager - .getPlayerLoc2(player.getName())), args[3], resadmin); - } else { + if (res != null) + res.addArea(player, new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName())), args[3], resadmin); + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { + } else player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } return true; } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin( - "WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) smanager.worldEdit(player); - } - } if (smanager.hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.replaceArea( - player, - new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager - .getPlayerLoc2(player.getName())), args[3], resadmin); - } else { + if (res != null) + res.replaceArea(player, new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName())), args[3], resadmin); + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { + } else player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } return true; } - } if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { + if (res != null) res.printAreaList(player, page); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { + if (res != null) res.printAdvancedAreaList(player, page); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } return false; @@ -579,8 +580,7 @@ public class ResidenceCommandListener extends Residence { private boolean commandResBank(String[] args, boolean resadmin, Player player, int page) { if (args.length != 3) return false; - ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player - .getName())); + ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); if (res == null) { player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); return true; @@ -592,11 +592,11 @@ public class ResidenceCommandListener extends Residence { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); return true; } - if (args[1].equals("deposit")) { + if (args[1].equals("deposit")) res.getBank().deposit(player, amount, resadmin); - } else if (args[1].equals("withdraw")) { + else if (args[1].equals("withdraw")) res.getBank().withdraw(player, amount, resadmin); - } else + else return false; return true; } @@ -608,22 +608,15 @@ public class ResidenceCommandListener extends Residence { return true; } if (rmanager.getByName(args[1]) != null) { - if (rmanager.getByName(args[1]).getWorld() - .equalsIgnoreCase(player.getWorld().getName())) { + if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), - (low.getBlockX() + high.getBlockX()) / 2, - (low.getBlockY() + high.getBlockY()) / 2, - (low.getBlockZ() + high.getBlockZ()) / 2); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] - + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } - } else { + } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } @@ -636,16 +629,13 @@ public class ResidenceCommandListener extends Residence { } if (args.length == 1) { String area = deleteConfirm.get(name); - if (area == null) { + if (area == null) sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } else { + else { rmanager.removeResidence(player, area, resadmin); deleteConfirm.remove(name); - if (player == null) { - sender.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("ResidenceRemove", - ChatColor.YELLOW + name + ChatColor.GREEN)); - } + if (player == null) + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); } } return true; @@ -655,14 +645,11 @@ public class ResidenceCommandListener extends Residence { if (args.length != 2) return false; WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + if (wep != null) + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) smanager.worldEdit(player); - } - } if (smanager.hasPlacedBoth(player.getName())) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), - smanager.getPlayerLoc2(player.getName()), resadmin); + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -673,19 +660,17 @@ public class ResidenceCommandListener extends Residence { private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 4) { ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { + if (area != null) area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); - } return true; } else if (args.length == 5) { ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { + if (area != null) area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } return false; @@ -694,24 +679,19 @@ public class ResidenceCommandListener extends Residence { private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { if (args.length == 2 || args.length == 3) { if (args[1].equals("renew")) { - if (args.length == 3) { + if (args.length == 3) leasemanager.renewArea(args[2], player); - } else { + else leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); - } return true; - } else if (args[1].equals("cost")) { + } else if (args[1].equals("cost")) if (args.length == 3) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res == null || leasemanager.leaseExpires(args[2])) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] - + ChatColor.YELLOW + "." + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED + cost + ChatColor.YELLOW)); + } else player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } return true; } else { String area = rmanager.getNameByLoc(player.getLocation()); @@ -722,17 +702,12 @@ public class ResidenceCommandListener extends Residence { } if (leasemanager.leaseExpires(area)) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area - + ChatColor.YELLOW + "." + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost + ChatColor.YELLOW)); + } else player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } return true; } - } - } else if (args.length == 4) { + } else if (args.length == 4) if (args[1].equals("set")) { if (!resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); @@ -742,9 +717,8 @@ public class ResidenceCommandListener extends Residence { if (leasemanager.leaseExpires(args[2])) { leasemanager.removeExpireTime(args[2]); player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); - } else { + } else player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } return true; } else { int days; @@ -758,7 +732,6 @@ public class ResidenceCommandListener extends Residence { return true; } } - } return false; } @@ -786,24 +759,20 @@ public class ResidenceCommandListener extends Residence { } } else if (args.length == 5) { if (args[1].equals("set")) { - pmanager.getList(player.getName(), args[2]).setFlag(args[3], - FlagPermissions.stringToFlagState(args[4])); + pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); return true; } - } else if (args.length == 6) { + } else if (args.length == 6) if (args[1].equals("gset")) { - pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], - FlagPermissions.stringToFlagState(args[5])); + pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); return true; } else if (args[1].equals("pset")) { - pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], - FlagPermissions.stringToFlagState(args[5])); + pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); return true; } - } return false; } @@ -848,14 +817,13 @@ public class ResidenceCommandListener extends Residence { return true; } } - if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { + if (res != null && listtype != null) { + if (listtype.equalsIgnoreCase("blacklist")) res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { + else if (listtype.equalsIgnoreCase("ignorelist")) res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); - } return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -878,25 +846,22 @@ public class ResidenceCommandListener extends Residence { if (command.equals("release")) { if (args.length != 3) return false; - if (rentmanager.isRented(args[2])) { + if (rentmanager.isRented(args[2])) rentmanager.removeFromForRent(player, args[2], resadmin); - } else { + else rentmanager.unrent(player, args[2], resadmin); - } return true; } if (command.equals("info")) { if (args.length == 2) { String areaname = rmanager.getNameByLoc(player.getLocation()); tmanager.viewSaleInfo(areaname, player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { + if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) rentmanager.printRentInfo(player, areaname); - } } else if (args.length == 3) { tmanager.viewSaleInfo(args[2], player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { + if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) rentmanager.printRentInfo(player, args[2]); - } } else return false; return true; @@ -937,24 +902,20 @@ public class ResidenceCommandListener extends Residence { if (args.length != 4) return false; boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) value = true; - } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { + else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) value = false; - } else { + else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); return true; } - if (rentmanager.isRented(args[2]) - && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { + if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (rentmanager.isForRent(args[2])) { + else if (rentmanager.isForRent(args[2])) rentmanager.setRentRepeatable(player, args[2], value, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] - + ChatColor.RED)); - } + else + player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); return true; } @@ -965,9 +926,8 @@ public class ResidenceCommandListener extends Residence { } player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); tmanager.printForSaleResidences(player); - if (cmanager.enabledRentSystem()) { + if (cmanager.enabledRentSystem()) rentmanager.printRentableResidences(player); - } return true; } @@ -975,14 +935,13 @@ public class ResidenceCommandListener extends Residence { if (args.length < 3 || args.length > 4) return false; boolean repeat = false; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + if (args.length == 4) + if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) repeat = true; - } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { + else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); return true; } - } rentmanager.rent(player, args[2], repeat, resadmin); return true; } @@ -1009,14 +968,13 @@ public class ResidenceCommandListener extends Residence { return true; } boolean repeat = false; - if (args.length == 6) { - if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { + if (args.length == 6) + if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) repeat = true; - } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { + else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); return true; } - } rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); return true; } @@ -1037,19 +995,17 @@ public class ResidenceCommandListener extends Residence { } else if (args[1].equals("remove")) { if (args.length > 2 && args[2].equals("enter")) { res = rmanager.getByLoc(player.getLocation()); - if (res != null) { + if (res != null) res.setEnterLeaveMessage(player, null, true, resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length > 2 && args[2].equals("leave")) { res = rmanager.getByLoc(player.getLocation()); - if (res != null) { + if (res != null) res.setEnterLeaveMessage(player, null, false, resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); @@ -1066,14 +1022,12 @@ public class ResidenceCommandListener extends Residence { if (args.length != 4) return false; if (args[3].equals("enter")) { - if (res != null) { + if (res != null) res.setEnterLeaveMessage(player, null, true, resadmin); - } return true; } else if (args[3].equals("leave")) { - if (res != null) { + if (res != null) res.setEnterLeaveMessage(player, null, false, resadmin); - } return true; } player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); @@ -1085,49 +1039,43 @@ public class ResidenceCommandListener extends Residence { if (start == 0) return false; String message = ""; - for (int i = start; i < args.length; i++) { + for (int i = start; i < args.length; i++) message = message + args[i] + " "; - } - if (res != null) { + if (res != null) res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { + if (area != null) area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { + if (area != null) area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length == 4) { ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { + if (area != null) area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length == 5) { ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { + if (area != null) area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } return false; @@ -1144,26 +1092,18 @@ public class ResidenceCommandListener extends Residence { if (res.getParent() != null) { String[] split = area.split("\\."); String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) - || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW - + words + ChatColor.RED)); + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); deleteConfirm.put(player.getName(), area); - } else { + } else rmanager.removeResidence(player, area, resadmin); - } return true; } else { - if (!deleteConfirm.containsKey(player.getName()) - || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area - + ChatColor.RED)); + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); deleteConfirm.put(player.getName(), area); - } else { + } else rmanager.removeResidence(player, area, resadmin); - } return true; } } @@ -1173,8 +1113,7 @@ public class ResidenceCommandListener extends Residence { if (args.length != 2) return false; if (player != null) { - if (!deleteConfirm.containsKey(player.getName()) - || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { String words = ""; if (rmanager.getByName(args[1]) != null) { ClaimedResidence res = rmanager.getByName(args[1]); @@ -1183,46 +1122,29 @@ public class ResidenceCommandListener extends Residence { words = split[split.length - 1]; } } - if (words == "") { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] - + ChatColor.RED)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words - + ChatColor.RED)); - } + if (words == "") + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + else + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); deleteConfirm.put(player.getName(), args[1]); - } else { + } else rmanager.removeResidence(player, args[1], resadmin); - } - } else { - if (!deleteConfirm.containsKey("Console") - || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } + } else if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; } - if (words == "") { - server.getConsoleSender().sendMessage( - ChatColor.RED - + language.getPhrase("DeleteConfirm", ChatColor.YELLOW - + args[1] + ChatColor.RED)); - } else { - server.getConsoleSender().sendMessage( - ChatColor.RED - + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW - + words + ChatColor.RED)); - } - deleteConfirm.put("Console", args[1]); - } else { - rmanager.removeResidence(args[1]); } - } + if (words == "") + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + else + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + deleteConfirm.put("Console", args[1]); + } else + rmanager.removeResidence(args[1]); return true; } @@ -1236,16 +1158,14 @@ public class ResidenceCommandListener extends Residence { player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } - if ((!player.hasPermission("residence.create") - && player.isPermissionSet("residence.create") - && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player.isPermissionSet("residence.select")) + && !resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } if (args.length == 2) { if (args[1].equals("size") || args[1].equals("cost")) { - if (smanager.hasPlacedBoth(player.getName())) { + if (smanager.hasPlacedBoth(player.getName())) try { smanager.showSelectionInfo(player); return true; @@ -1253,7 +1173,7 @@ public class ResidenceCommandListener extends Residence { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); return true; } - } else if (smanager.worldEdit(player)) { + else if (smanager.worldEdit(player)) try { smanager.showSelectionInfo(player); return true; @@ -1261,7 +1181,6 @@ public class ResidenceCommandListener extends Residence { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); return true; } - } } else if (args[1].equals("vert")) { smanager.vert(player, resadmin); return true; @@ -1273,29 +1192,23 @@ public class ResidenceCommandListener extends Residence { return true; } else if (args[1].equals("coords")) { Location playerLoc1 = smanager.getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") - + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " - + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); - } + if (playerLoc1 != null) + player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + playerLoc1.getBlockY() + ", " + + playerLoc1.getBlockZ() + ")"); Location playerLoc2 = smanager.getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") - + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " - + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); - } + if (playerLoc2 != null) + player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + playerLoc2.getBlockY() + ", " + + playerLoc2.getBlockZ() + ")"); return true; } else if (args[1].equals("chunk")) { smanager.selectChunk(player); return true; } else if (args[1].equals("worldedit")) { - if (smanager.worldEdit(player)) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SelectionSuccess")); - } + if (smanager.worldEdit(player)) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); return true; } - } else if (args.length == 3) { + } else if (args.length == 3) if (args[1].equals("expand")) { int amount; try { @@ -1317,16 +1230,14 @@ public class ResidenceCommandListener extends Residence { smanager.modify(player, true, amount); return true; } - } if (args.length > 1 && args[1].equals("residence")) { String resName; String areaName; ClaimedResidence res = null; - if (args.length > 2) { + if (args.length > 2) res = rmanager.getByName(args[2]); - } else { + else res = rmanager.getByLoc(player.getLocation()); - } if (res == null) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; @@ -1343,43 +1254,34 @@ public class ResidenceCommandListener extends Residence { if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName - + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); - } else { + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + ChatColor.GREEN)); + } else player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); - } return true; - } else { + } else try { - smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), - Integer.parseInt(args[3])); + smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); return true; } catch (Exception ex) { player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); return true; } - } } private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3) { String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.getByName(area).getPermissions() - .setFlag(player, args[1], args[2], resadmin); - } else { + if (area != null) + rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } else if (args.length == 4) { ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { + if (area != null) area.getPermissions().setFlag(player, args[2], args[3], resadmin); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } return false; @@ -1388,16 +1290,14 @@ public class ResidenceCommandListener extends Residence { private boolean commandResSublist(String[] args, boolean resadmin, Player player, int page) { if (args.length == 1 || args.length == 2 || args.length == 3) { ClaimedResidence res; - if (args.length == 1) { + if (args.length == 1) res = rmanager.getByLoc(player.getLocation()); - } else { + else res = rmanager.getByName(args[1]); - } - if (res != null) { + if (res != null) res.printSubzoneList(player, page); - } else { + else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } return true; } return false; @@ -1416,118 +1316,20 @@ public class ResidenceCommandListener extends Residence { zname = args[2]; } WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + if (wep != null) + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) smanager.worldEdit(player); - } - } if (smanager.hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(parent); if (res == null) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - res.addSubzone(player, smanager.getPlayerLoc1(player.getName()), - smanager.getPlayerLoc2(player.getName()), zname, resadmin); + res.addSubzone(player, smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), zname, resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); return true; } } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - server.getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) - return true; - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - this.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件."); - System.out.println("[Residence] 重载 by " + player.getName() + "."); - } - } else { - this.reloadPlugin(); - System.out.println("[Residence] 重载 by 控制台."); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player - && gmanager.isResidenceAdmin((Player) sender)) { - try { - this.loadYml(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED - + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - } - return true; - } else if (command.getName().equals("resworld")) { - if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { - if (sender instanceof ConsoleCommandSender) { - rmanager.removeAllFromWorld(sender, args[1]); - return true; - } else { - sender.sendMessage(ChatColor.RED + "MUST be run from console."); - } - } - return false; - } else if (command.getName().equals("rc")) { - if (sender instanceof Player) { - Player player = (Player) sender; - String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { - plistener.tooglePlayerResidenceChat(player); - } else { - String area = plistener.getCurrentResidenceName(pname); - if (area != null) { - ChatChannel channel = chatmanager.getChannel(area); - if (channel != null) { - String message = ""; - for (String arg : args) { - message = message + " " + arg; - } - channel.chat(pname, message); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidChannel")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); - } - } - return true; - } else if (command.getName().equals("res") || command.getName().equals("residence") - || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") - && gmanager.isResidenceAdmin((Player) sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") - && !gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); - return true; - } - } else { - resadmin = true; - } - return commandRes(args, resadmin, command, sender); - } - return super.onCommand(sender, command, label, args); - } } diff --git a/src/main/java/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/main/java/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 472a8df..c58c589 100644 --- a/src/main/java/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/main/java/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -4,14 +4,6 @@ */ package com.bekvon.bukkit.residence.economy.rent; -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.event.ResidenceRentEvent; -import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import java.util.Date; import java.util.HashMap; @@ -20,480 +12,389 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + /** * * @author Administrator */ public class RentManager { - protected Map rentedLand; - protected Map rentableLand; + protected Map rentedLand; + protected Map rentableLand; - public RentManager() - { - rentedLand = new HashMap(); - rentableLand = new HashMap(); - } + public RentManager() { + rentedLand = new HashMap(); + rentableLand = new HashMap(); + } - public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) - { - if(!Residence.getConfigManager().enabledRentSystem()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); - return; - } - if(Residence.getTransactionManager().isForSale(landName)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SellRentFail")); - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if(!resadmin) - { - if(!res.getPermissions().hasResidencePermission(player, true)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(this.getRentableCount(player.getName()) >= group.getMaxRentables()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceMaxRent")); - return; - } - } - if(!rentableLand.containsKey(landName)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.RENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - RentableLand newrent = new RentableLand(); - newrent.days = days; - newrent.cost = amount; - newrent.repeatable = repeatable; - rentableLand.put(landName,newrent); - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceForRentSuccess",ChatColor.YELLOW+split[split.length-1] + ChatColor.GREEN+"."+ChatColor.YELLOW+amount+ChatColor.GREEN+"."+ChatColor.YELLOW+days+ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); - } - } + @SuppressWarnings("unchecked") + public static RentManager load(Map root) { + RentManager rentManager = new RentManager(); + if (root != null) { + Map rentables = (Map) root.get("Rentables"); + for (Entry rent : rentables.entrySet()) + rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map) rent.getValue())); + Map rented = (Map) root.get("Rented"); + for (Entry rent : rented.entrySet()) + rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map) rent.getValue())); + } + return rentManager; + } - public void rent(Player player, String landName, boolean repeat, boolean resadmin) - { - if(!Residence.getConfigManager().enabledRentSystem()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentDisabled")); - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res!=null) - { - if(res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("OwnerRentFail")); - return; - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceMaxRent")); - return; - } - if(!this.isForRent(landName)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - return; - } - if(this.isRented(landName)) - { - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED+"."+ChatColor.YELLOW + this.getRentingPlayer(landName))); - return; - } - RentableLand land = rentableLand.get(landName); - if(Residence.getEconomyManager().canAfford(player.getName(), land.cost)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.RENT); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - if(Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) - { - RentedLand newrent = new RentedLand(); - newrent.player = player.getName(); - newrent.startTime = System.currentTimeMillis(); - newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); - newrent.autoRefresh = repeat; - rentedLand.put(landName, newrent); - res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); - res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); - res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceRentSuccess",ChatColor.YELLOW + split[split.length-1] + ChatColor.GREEN+"."+ChatColor.YELLOW + land.days + ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+"Error, unable to transfer money..."); - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NotEnoughMoney")); - } - } + public void checkCurrentRents() { + Iterator> it = rentedLand.entrySet().iterator(); + while (it.hasNext()) { + Entry next = it.next(); + RentedLand land = next.getValue(); + if (land.endTime <= System.currentTimeMillis()) { + ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Rent Check: " + next.getKey()); + if (res != null) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + Residence.getServ().getPluginManager().callEvent(revent); + if (!revent.isCancelled()) { + RentableLand rentable = rentableLand.get(next.getKey()); + if (!rentable.repeatable) { + rentableLand.remove(next.getKey()); + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else if (land.autoRefresh) { + if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else + land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); + } else { + res.getPermissions().applyDefaultFlags(); + it.remove(); + } + } + } else { + rentableLand.remove(next.getKey()); + it.remove(); + } + } + } + } - public void removeFromForRent(Player player, String landName, boolean resadmin) - { - RentedLand rent = rentedLand.get(landName); - if(rent == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotRented")); - return; - } - if(resadmin || rent.player.equalsIgnoreCase(player.getName())) - { - ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName),player,RentEventType.UNRENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - rentedLand.remove(landName); - if(!rentableLand.get(landName).repeatable) - { - rentableLand.remove(landName); - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res!=null) - res.getPermissions().applyDefaultFlags(); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceUnrent",ChatColor.YELLOW+landName + ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - } - } + public int getCostOfRent(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; + } - private long daysToMs(int days) - { - return (((long)days) * 24L * 60L * 60L * 1000L); - } + public int getRentableCount(String player) { + Set set = rentableLand.keySet(); + int count = 0; + for (String land : set) { + ClaimedResidence res = Residence.getResidenceManager().getByName(land); + if (res != null) + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) + count++; + } + return count; + } - @SuppressWarnings("unused") - private int msToDays(long ms) - { - return (int) Math.ceil(((((double)ms/1000D)/60D)/60D)/24D); - } + public boolean getRentableRepeatable(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; + } - public void unrent(Player player, String landName, boolean resadmin) - { - String[] split = landName.split("\\."); - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res == null) - { - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if(!res.getPermissions().hasResidencePermission(player, true) && !resadmin) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if(rentedLand.containsKey(landName) && !resadmin) - { - if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceAlreadyRented",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED+"."+ChatColor.YELLOW + rentedLand.get(landName).player)+ChatColor.YELLOW); - return; - } - if(rentableLand.containsKey(landName)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.UNRENT); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - rentableLand.remove(landName); - if(rentedLand.containsKey(landName)) - { - rentedLand.remove(landName); - if(res!=null) - res.getPermissions().applyDefaultFlags(); - } - if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceRemoveRentable",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); + public int getRentCount(String player) { + Set> set = rentedLand.entrySet(); + int count = 0; + for (Entry land : set) + if (land.getValue().player.equalsIgnoreCase(player)) + count++; + return count; + } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - } - } + public int getRentDays(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; + } - public void removeFromRent(String landName) - { - rentedLand.remove(landName); - } + public boolean getRentedAutoRepeats(String landName) { + return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; + } - public void removeRentable(String landName) - { - removeFromRent(landName); - rentableLand.remove(landName); - } + public String getRentingPlayer(String landName) { + return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; + } - public boolean isForRent(String landName) - { - return rentableLand.containsKey(landName); - } + public boolean isForRent(String landName) { + return rentableLand.containsKey(landName); + } - public boolean isRented(String landName) - { - return rentedLand.containsKey(landName); - } + public boolean isRented(String landName) { + return rentedLand.containsKey(landName); + } - public String getRentingPlayer(String landName) - { - return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; - } + public void printRentableResidences(Player player) { + Set> set = rentableLand.entrySet(); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentableLand") + ":"); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + boolean firstadd = true; + for (Entry land : set) + if (!this.isRented(land.getKey())) { + if (!firstadd) + sbuild.append(", "); + else + firstadd = false; + sbuild.append(land.getKey()); + } + player.sendMessage(sbuild.toString()); + } - public int getCostOfRent(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; - } + public void printRentInfo(Player player, String landName) { + RentableLand rentable = rentableLand.get(landName); + RentedLand rented = rentedLand.get(landName); + if (rentable != null) { + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Land") + ":" + ChatColor.DARK_GREEN + landName); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Cost") + ": " + ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + " days"); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentableAutoRenew") + ":" + ChatColor.DARK_AQUA + rentable.repeatable); + if (rented != null) { + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " + + Residence.getLanguage().getPhrase("ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new Date(rented.endTime)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); + } else + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + Residence.getLanguage().getPhrase("Available")); + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + } - public boolean getRentableRepeatable(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; - } + public void removeFromForRent(Player player, String landName, boolean resadmin) { + RentedLand rent = rentedLand.get(landName); + if (rent == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotRented")); + return; + } + if (resadmin || rent.player.equalsIgnoreCase(player.getName())) { + ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentedLand.remove(landName); + if (!rentableLand.get(landName).repeatable) + rentableLand.remove(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res != null) + res.getPermissions().applyDefaultFlags(); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } - public boolean getRentedAutoRepeats(String landName) - { - return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; - } + public void removeFromRent(String landName) { + rentedLand.remove(landName); + } - public int getRentDays(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; - } + public void removeRentable(String landName) { + removeFromRent(landName); + rentableLand.remove(landName); + } - public void checkCurrentRents() - { - Iterator> it = rentedLand.entrySet().iterator(); - while(it.hasNext()) - { - Entry next = it.next(); - RentedLand land = next.getValue(); - if(land.endTime<=System.currentTimeMillis()) - { - ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Rent Check: "+next.getKey()); - if (res != null) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - Residence.getServ().getPluginManager().callEvent(revent); - if (!revent.isCancelled()) { - RentableLand rentable = rentableLand.get(next.getKey()); - if (!rentable.repeatable) { - rentableLand.remove(next.getKey()); - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else if (land.autoRefresh) { - if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else { - if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } - else - { - land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); - } - } - } else { - res.getPermissions().applyDefaultFlags(); - it.remove(); - } - } - } - else - { - rentableLand.remove(next.getKey()); - it.remove(); - } - } - } - } + public void rent(Player player, String landName, boolean repeat, boolean resadmin) { + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res != null) { + if (res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerRentFail")); + return; + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + return; + } + if (!this.isForRent(landName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + return; + } + if (this.isRented(landName)) { + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented", + ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + this.getRentingPlayer(landName))); + return; + } + RentableLand land = rentableLand.get(landName); + if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + RentedLand newrent = new RentedLand(); + newrent.player = player.getName(); + newrent.startTime = System.currentTimeMillis(); + newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); + newrent.autoRefresh = repeat; + rentedLand.put(landName, newrent); + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); + res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); + res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", + ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + land.days + ChatColor.GREEN)); + } else + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + } - public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) - { - String[] split = landName.split("\\."); - RentableLand land = rentableLand.get(landName); - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(land!=null && res!=null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) - { - land.repeatable = value; - if(!value && this.isRented(landName)) - rentedLand.get(landName).autoRefresh = false; - if(value && split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentableEnableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - else if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentableDisableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - } - } + public Map save() { + Map root = new HashMap(); + Map rentables = new HashMap(); + for (Entry rent : rentableLand.entrySet()) + rentables.put(rent.getKey(), rent.getValue().save()); + Map rented = new HashMap(); + for (Entry rent : rentedLand.entrySet()) + rented.put(rent.getKey(), rent.getValue().save()); + root.put("Rentables", rentables); + root.put("Rented", rented); + return root; + } - public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) - { - String[] split = landName.split("\\."); - RentedLand land = rentedLand.get(landName); - if(land!=null && (land.player.equals(player.getName()) || resadmin)) - { - land.autoRefresh = value; - if(value && split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentEnableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - else if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentDisableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - } - } + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return; + } + if (Residence.getTransactionManager().isForSale(landName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SellRentFail")); + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + return; + } + } + if (!rentableLand.containsKey(landName)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + RentableLand newrent = new RentableLand(); + newrent.days = days; + newrent.cost = amount; + newrent.repeatable = repeatable; + rentableLand.put(landName, newrent); + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForRentSuccess", + ChatColor.YELLOW + split[split.length - 1] + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN + "." + ChatColor.YELLOW + days + ChatColor.GREEN)); + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); + } - public void printRentInfo(Player player, String landName) - { - RentableLand rentable = rentableLand.get(landName); - RentedLand rented = rentedLand.get(landName); - if(rentable!=null) - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Land")+":"+ChatColor.DARK_GREEN + landName); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Cost")+": "+ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + " days"); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("RentableAutoRenew")+":"+ChatColor.DARK_AQUA + rentable.repeatable); - if(rented!=null) - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Status")+":"+ChatColor.YELLOW+" "+Residence.getLanguage().getPhrase("ResidenceRentedBy",ChatColor.RED + rented.player+ChatColor.YELLOW)); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("RentExpire")+":"+ChatColor.GREEN + new Date(rented.endTime)); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("RentAutoRenew")+":"+ChatColor.DARK_AQUA + rented.autoRefresh); - } - else - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Status")+":"+ChatColor.GREEN+" "+Residence.getLanguage().getPhrase("Available")); - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - } - } + public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { + String[] split = landName.split("\\."); + RentedLand land = rentedLand.get(landName); + if (land != null && (land.player.equals(player.getName()) || resadmin)) { + land.autoRefresh = value; + if (value && split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + else if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + } + } - @SuppressWarnings("unchecked") - public static RentManager load(Map root) - { - RentManager rentManager = new RentManager(); - if(root!=null) - { - Map rentables = (Map) root.get("Rentables"); - for(Entry rent : rentables.entrySet()) - { - rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map) rent.getValue())); - } - Map rented = (Map) root.get("Rented"); - for(Entry rent : rented.entrySet()) - { - rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map) rent.getValue())); - } - } - return rentManager; - } + public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { + String[] split = landName.split("\\."); + RentableLand land = rentableLand.get(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (land != null && res != null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) { + land.repeatable = value; + if (!value && this.isRented(landName)) + rentedLand.get(landName).autoRefresh = false; + if (value && split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + else if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + } + } - public Map save() - { - Map root = new HashMap(); - Map rentables = new HashMap(); - for(Entry rent : rentableLand.entrySet()) - { - rentables.put(rent.getKey(), rent.getValue().save()); - } - Map rented = new HashMap(); - for(Entry rent : rentedLand.entrySet()) - { - rented.put(rent.getKey(), rent.getValue().save()); - } - root.put("Rentables", rentables); - root.put("Rented", rented); - return root; - } + public void unrent(Player player, String landName, boolean resadmin) { + String[] split = landName.split("\\."); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res == null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (rentedLand.containsKey(landName) && !resadmin) { + if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", + ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); + return; + } + if (rentableLand.containsKey(landName)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentableLand.remove(landName); + if (rentedLand.containsKey(landName)) { + rentedLand.remove(landName); + res.getPermissions().applyDefaultFlags(); + } + if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); - public void updateRentableName(String oldName, String newName) - { - if(rentableLand.containsKey(oldName)) - { - rentableLand.put(newName, rentableLand.get(oldName)); - rentableLand.remove(oldName); - } - if(rentedLand.containsKey(oldName)) - { - rentedLand.put(newName, rentedLand.get(oldName)); - rentedLand.remove(oldName); - } - } + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + } - public void printRentableResidences(Player player) - { - Set> set = rentableLand.entrySet(); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("RentableLand")+":"); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - boolean firstadd = true; - for(Entry land : set) - { - if(!this.isRented(land.getKey())) - { - if(!firstadd) - sbuild.append(", "); - else - firstadd = false; - sbuild.append(land.getKey()); - } - } - player.sendMessage(sbuild.toString()); - } + public void updateRentableName(String oldName, String newName) { + if (rentableLand.containsKey(oldName)) { + rentableLand.put(newName, rentableLand.get(oldName)); + rentableLand.remove(oldName); + } + if (rentedLand.containsKey(oldName)) { + rentedLand.put(newName, rentedLand.get(oldName)); + rentedLand.remove(oldName); + } + } - public int getRentCount(String player) - { - Set> set = rentedLand.entrySet(); - int count = 0; - for(Entry land : set) - { - if(land.getValue().player.equalsIgnoreCase(player)) - count++; - } - return count; - } + private long daysToMs(int days) { + return ((days) * 24L * 60L * 60L * 1000L); + } - public int getRentableCount(String player) - { - Set set = rentableLand.keySet(); - int count = 0; - for(String land : set) - { - ClaimedResidence res = Residence.getResidenceManager().getByName(land); - if(res!=null) - if(res.getPermissions().getOwner().equalsIgnoreCase(player)) - count++; - } - return count; - } + @SuppressWarnings("unused") + private int msToDays(long ms) { + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 96fb154..945459a 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -5,19 +5,40 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.ChatColor; -import org.bukkit.Location; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.bekvon.bukkit.residence.protection.FlagPermissions; - +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustEvent; @@ -25,130 +46,48 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.PotionSplashEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Material; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Creeper; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Monster; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.Slime; -import org.bukkit.entity.Ghast; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + /** * * @author Administrator */ public class ResidenceEntityListener implements Listener { - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEndermanChangeBlock(EntityChangeBlockEvent event) { - if (event.getEntityType() != EntityType.ENDERMAN - && event.getEntityType() != EntityType.WITHER) { - return; - } - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock() - .getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms( - event.getBlock().getWorld().getName()); - if (event.getEntityType() == EntityType.WITHER) { - if (!perms.has( - "wither", - perms.has("explode", - world.has("wither", world.has("explode", true))))) { - event.setCancelled(true); - } - } else if (!perms.has("build", true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onEntityInteract(EntityInteractEvent event) { - Block block = event.getBlock(); - Material mat = block.getType(); - Entity entity = event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) - && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - } - } - - private boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); - } - - private boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat - || ent instanceof Snowman || ent instanceof IronGolem - || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken - || ent instanceof Wolf || ent instanceof Cow - || ent instanceof Squid || ent instanceof Villager || ent instanceof Rabbit); - } - @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); - if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { + if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) return; - } Player cause; - if ((damager instanceof Arrow) - && (!(((Arrow) damager).getShooter() instanceof Player))) { + if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) return; - - } else if (damager instanceof Player) { + else if (damager instanceof Player) cause = (Player) damager; - } else { + else cause = (Player) ((Arrow) damager).getShooter(); - } - if (Residence.isResAdminOn(cause)) { + if (Residence.isResAdminOn(cause)) return; - } Entity entity = event.getEntity(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc( - entity.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - if (res != null - && !res.getPermissions().playerHas(cause.getName(), - "animalkilling", true)) { + if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) if (isAnimal(entity)) { - cause.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); event.setCancelled(true); } - } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -156,100 +95,126 @@ public class ResidenceEntityListener implements Listener { FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); Entity ent = event.getEntity(); if (isAnimal(ent)) { - if (!perms.has("animals", true)) { + if (!perms.has("animals", true)) event.setCancelled(true); - } - } else { - if (!perms.has("monsters", true) && isMonster(ent)) { - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingPlace(HangingPlaceEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event - .getEntity().getLocation(), player); - String pname = player.getName(); - String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, "place", - perms.playerHas(pname, world, "build", true))) { + } else if (!perms.has("monsters", true) && isMonster(ent)) event.setCancelled(true); - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingBreak(HangingBreakEvent event) { - if (event instanceof HangingBreakByEntityEvent) { - HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; - if (evt.getRemover() instanceof Player) { - Player player = (Player) evt.getRemover(); - if (Residence.isResAdminOn(player)) { - return; - } - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event - .getEntity().getLocation(), player); - String world = event.getEntity().getWorld().getName(); - if (!perms.playerHas(pname, world, "destroy", - perms.playerHas(pname, world, "build", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } - } - } + public void onEndermanChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.ENDERMAN && event.getEntityType() != EntityType.WITHER) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); + if (event.getEntityType() == EntityType.WITHER) { + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) + event.setCancelled(true); + } else if (!perms.has("build", true)) + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity() - .getLocation()); - if (!perms.has("burn", true)) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (!perms.has("burn", true)) event.setCancelled(true); - } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onExplosionPrime(ExplosionPrimeEvent event) { - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity() - .getLocation()); - if (entity == EntityType.CREEPER) { - if (!perms.has("creeper", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } + public void onEntityDamage(EntityDamageEvent event) { + Entity ent = event.getEntity(); + if (ent.hasMetadata("NPC")) + return; + boolean tamedWolf = ent instanceof Wolf ? ((Wolf) ent).isTamed() : false; + ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + /* Living Entities */ + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + ClaimedResidence srcarea = null; + if (damager != null) + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + boolean srcpvp = true; + if (srcarea != null) + srcpvp = srcarea.getPermissions().has("pvp", true); + ent = attackevent.getEntity(); + if ((ent instanceof Player || tamedWolf) && (damager instanceof Player || (damager instanceof Arrow && (((Arrow) damager).getShooter() instanceof Player)))) { + Player attacker = null; + if (damager instanceof Player) + attacker = (Player) damager; + else if (damager instanceof Arrow) + attacker = (Player) ((Arrow) damager).getShooter(); + if (!srcpvp) { + if (attacker != null) + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (damager != null) + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + if (attacker != null) + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + event.setCancelled(true); + } + } else /* Normal PvP */ + if (!area.getPermissions().has("pvp", true)) { + if (attacker != null) + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + } + return; + } else if ((ent instanceof Player || tamedWolf) && (damager instanceof Creeper)) + if (area == null) { + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) + event.setCancelled(true); + } else if (!area.getPermissions().has("creeper", true)) + event.setCancelled(true); } - if (entity == EntityType.PRIMED_TNT - || entity == EntityType.MINECART_TNT) { - if (!perms.has("tnt", perms.has("explode", true))) { + if (area == null) { + if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedWolf)) event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.SMALL_FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.WITHER_SKULL) { - if (!perms.has("witherdamage", perms.has("damage", true))) { - event.setCancelled(true); - event.getEntity().remove(); + } else if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedWolf)) + event.setCancelled(true); + if (event.isCancelled()) + /* Put out a fire on a player */ + if ((ent instanceof Player || tamedWolf) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) + ent.setFireTicks(0); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + if (event.getEntityType() == EntityType.ITEM_FRAME || (Residence.is1_8() && event.getEntityType() == EntityType.ARMOR_STAND)) { + Entity dmgr = event.getDamager(); + Player player; + if (dmgr instanceof Player) + player = (Player) event.getDamager(); + else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) + player = (Player) ((Projectile) dmgr).getShooter(); + else + return; + + if (Residence.isResAdminOn(player)) + return; + + // Note: Location of entity, not player; otherwise player could + // stand outside of res and still damage + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) { + if (!res.getPermissions().has("container", false)) + if (isMonster(dmgr)) { + event.setCancelled(true); + return; + } + + if (!res.getPermissions().playerHas(player.getName(), "container", false)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } } } } @@ -260,63 +225,113 @@ public class ResidenceEntityListener implements Listener { return; Boolean cancel = false; EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity() - .getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms( - event.getEntity().getWorld().getName()); - if (entity == EntityType.CREEPER) { - if (!perms.has("creeper", perms.has("explode", true))) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); + if (entity == EntityType.CREEPER) + if (!perms.has("creeper", perms.has("explode", true))) cancel = true; - } - } - if (entity == EntityType.PRIMED_TNT - || entity == EntityType.MINECART_TNT) { - if (!perms.has("tnt", perms.has("explode", true))) { + if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) + if (!perms.has("tnt", perms.has("explode", true))) cancel = true; - } - } - if (entity == EntityType.FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { + if (entity == EntityType.FIREBALL) + if (!perms.has("fireball", perms.has("explode", true))) cancel = true; - } - } - if (entity == EntityType.SMALL_FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { + if (entity == EntityType.SMALL_FIREBALL) + if (!perms.has("fireball", perms.has("explode", true))) cancel = true; - } - } - if (entity == EntityType.WITHER_SKULL || entity == EntityType.WITHER) { - if (!perms.has( - "wither", - perms.has("explode", - world.has("wither", world.has("explode", true))))) { + if (entity == EntityType.WITHER_SKULL || entity == EntityType.WITHER) + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) cancel = true; - } - } if (cancel) { event.setCancelled(true); event.getEntity().remove(); } else { List preserve = new ArrayList(); for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block - .getLocation()); - if ((!blockperms.has("wither", blockperms.has("explode", - world.has("wither", world.has("explode", true)))) - && (entity == EntityType.WITHER || entity == EntityType.WITHER_SKULL) - || (!blockperms.has("fireball", - blockperms.has("explode", true)) && (entity == EntityType.FIREBALL || entity == EntityType.SMALL_FIREBALL)) - || (!blockperms.has("tnt", - blockperms.has("explode", true)) && (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT)) || (!blockperms - .has("creeper", blockperms.has("explode", true)) && entity == EntityType.CREEPER))) { - if (block != null) { - preserve.add(block); - } + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + if ((!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true)))) && (entity == EntityType.WITHER || entity == EntityType.WITHER_SKULL) + || (!blockperms.has("fireball", blockperms.has("explode", true)) && (entity == EntityType.FIREBALL || entity == EntityType.SMALL_FIREBALL)) + || (!blockperms.has("tnt", blockperms.has("explode", true)) && (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT)) + || (!blockperms.has("creeper", blockperms.has("explode", true)) && entity == EntityType.CREEPER))) + preserve.add(block); + } + for (Block block : preserve) + event.blockList().remove(block); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onEntityInteract(EntityInteractEvent event) { + Block block = event.getBlock(); + Material mat = block.getType(); + Entity entity = event.getEntity(); + FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); + boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onExplosionPrime(ExplosionPrimeEvent event) { + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (entity == EntityType.CREEPER) + if (!perms.has("creeper", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) + if (!perms.has("tnt", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + if (entity == EntityType.FIREBALL) + if (!perms.has("fireball", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + if (entity == EntityType.SMALL_FIREBALL) + if (!perms.has("fireball", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + if (entity == EntityType.WITHER_SKULL) + if (!perms.has("witherdamage", perms.has("damage", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreak(HangingBreakEvent event) { + if (event instanceof HangingBreakByEntityEvent) { + HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; + if (evt.getRemover() instanceof Player) { + Player player = (Player) evt.getRemover(); + if (Residence.isResAdminOn(player)) + return; + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String world = event.getEntity().getWorld().getName(); + if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } } - for (Block block : preserve) { - event.blockList().remove(block); - } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingPlace(HangingPlaceEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String pname = player.getName(); + String world = player.getWorld().getName(); + if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } } @@ -325,158 +340,24 @@ public class ResidenceEntityListener implements Listener { if (event.isCancelled()) return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", - true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (target.getType() == EntityType.PLAYER) { - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()) - .has("pvp", true); - if (!srcpvp || !tgtpvp) { + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + if (!srcpvp || !tgtpvp) event.setIntensity(target, 0); - } } } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - if (event.getEntityType() == EntityType.ITEM_FRAME - || event.getEntityType() == EntityType.ARMOR_STAND) { - Entity dmgr = event.getDamager(); - Player player; - if (dmgr instanceof Player) { - player = (Player) event.getDamager(); - } else { - if (dmgr instanceof Projectile - && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else - return; - } - - if (Residence.isResAdminOn(player)) - return; - - // Note: Location of entity, not player; otherwise player could - // stand outside of res and still damage - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager() - .getByLoc(loc); - if (res != null) { - if (!res.getPermissions().has("container", false)) { - if (isMonster(dmgr)) { - event.setCancelled(true); - return; - } - } - - if (!res.getPermissions().playerHas(player.getName(), - "container", false)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("FlagDeny", - "container")); - } - } - } + private boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig || ent instanceof Sheep + || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager || (Residence.is1_8() && ent instanceof Rabbit)); } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamage(EntityDamageEvent event) { - Entity ent = event.getEntity(); - if (ent.hasMetadata("NPC")) { - return; - } - boolean tamedWolf = ent instanceof Wolf ? ((Wolf) ent).isTamed() - : false; - ClaimedResidence area = Residence.getResidenceManager().getByLoc( - ent.getLocation()); - /* Living Entities */ - if (event instanceof EntityDamageByEntityEvent) { - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = Residence.getResidenceManager().getByLoc( - damager.getLocation()); - } - boolean srcpvp = true; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); - } - ent = attackevent.getEntity(); - if ((ent instanceof Player || tamedWolf) - && (damager instanceof Player || (damager instanceof Arrow && (((Arrow) damager) - .getShooter() instanceof Player)))) { - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Arrow) { - attacker = (Player) ((Arrow) damager).getShooter(); - } - if (!srcpvp) { - attacker.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - return; - } - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (!Residence.getWorldFlags() - .getPerms(damager.getWorld().getName()) - .has("pvp", true)) { - attacker.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase( - "WorldPVPDisabled")); - event.setCancelled(true); - } - } else { - /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { - attacker.sendMessage(ChatColor.RED - + Residence.getLanguage() - .getPhrase("NoPVPZone")); - event.setCancelled(true); - } - } - return; - } else if ((ent instanceof Player || tamedWolf) - && (damager instanceof Creeper)) { - if (area == null) { - if (!Residence.getWorldFlags() - .getPerms(damager.getWorld().getName()) - .has("creeper", true)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has("creeper", true)) { - event.setCancelled(true); - } - } - } - } - if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()) - .has("damage", true) - && (ent instanceof Player || tamedWolf)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has("damage", true) - && (ent instanceof Player || tamedWolf)) { - event.setCancelled(true); - } - } - if (event.isCancelled()) { - /* Put out a fire on a player */ - if ((ent instanceof Player || tamedWolf) - && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event - .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { - ent.setFireTicks(0); - } - } + private boolean isMonster(Entity ent) { + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 95f2dbf..c0a61c4 100644 --- a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -28,7 +28,6 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -69,9 +68,8 @@ public class ResidencePlayerListener implements Listener { playerToggleChat = new ArrayList(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) lastUpdate.put(player.getName(), System.currentTimeMillis()); - } } public void doHeals() { @@ -79,15 +77,13 @@ public class ResidencePlayerListener implements Listener { for (Player player : Bukkit.getServer().getOnlinePlayers()) { String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); ClaimedResidence res = null; - if (resname != null) { + if (resname != null) res = Residence.getResidenceManager().getByName(resname); - } if (res != null && res.getPermissions().has("healing", false)) { Damageable damage = player; double health = damage.getHealth(); - if (health < 20 && !player.isDead()) { + if (health < 20 && !player.isDead()) player.setHealth(health + 1); - } } } } catch (Exception ex) { @@ -116,9 +112,8 @@ public class ResidencePlayerListener implements Listener { ClaimedResidence ResOld = null; if (currentRes.containsKey(pname)) { ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); - if (ResOld == null) { + if (ResOld == null) currentRes.remove(pname); - } } if (res == null) { lastOutsideLoc.put(pname, loc); @@ -129,40 +124,31 @@ public class ResidencePlayerListener implements Listener { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, - (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { + if (leave != null && !leave.equals("")) + if (Residence.getConfigManager().useActionBar()) + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + else player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } currentRes.remove(pname); Residence.getChatManager().removeFromChannel(pname); } return; } - if (move) { - if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) - && !player.hasPermission("residence.admin.move")) { + if (move) + if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.admin.move")) { Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) { + if (lastLoc != null) player.teleport(lastLoc); - } else { + else player.teleport(res.getOutsideFreeLoc(loc)); - } - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1])); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1])); return; } - } lastOutsideLoc.put(pname, loc); if (!currentRes.containsKey(pname) || ResOld != res) { currentRes.put(pname, areaname); - if (subzone == null) { + if (subzone == null) chatchange = true; - } // "from" residence for ResidenceChangedEvent ClaimedResidence chgFrom = null; @@ -170,15 +156,11 @@ public class ResidencePlayerListener implements Listener { String leave = ResOld.getLeaveMessage(); chgFrom = ResOld; - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, - (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { + if (leave != null && !leave.equals("") && ResOld != res.getParent()) + if (Residence.getConfigManager().useActionBar()) + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + else player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } } String enterMessage = res.getEnterMessage(); @@ -186,18 +168,14 @@ public class ResidencePlayerListener implements Listener { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) - .toString()); - } else { + if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) + if (Residence.getConfigManager().useActionBar()) + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); + else player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); - } - } } - if (chatchange && chatenabled) { + if (chatchange && chatenabled) Residence.getChatManager().setChannel(pname, areaname); - } } public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { @@ -211,32 +189,6 @@ public class ResidencePlayerListener implements Listener { return message; } - private boolean isCanUseEntity(Material mat, Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); - } - - private boolean isCanUseEntity_BothClick(Material mat, Block block) { - return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR - || mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR - || mat == Material.DARK_OAK_DOOR || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE - || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE || mat == Material.DARK_OAK_FENCE_GATE - || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE - || mat == Material.DRAGON_EGG || Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - - private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL - || mat == Material.CAKE_BLOCK || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF - || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH || mat == Material.BREWING_STAND - || mat == Material.ENCHANTMENT_TABLE - || Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); - } - - private boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") - || Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId())); - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Player player = event.getPlayer(); @@ -244,15 +196,13 @@ public class ResidencePlayerListener implements Listener { return; String pname = player.getName(); ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (res != null) + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) if (Residence.getRentManager().isRented(res.getName())) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); event.setCancelled(true); return; } - } - } FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); @@ -267,18 +217,15 @@ public class ResidencePlayerListener implements Listener { if (Residence.isResAdminOn(player)) return; ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (res != null) + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) if (Residence.getRentManager().isRented(res.getName())) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); event.setCancelled(true); return; } - } - } FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", - perms.playerHas(pname, player.getWorld().getName(), "build", true)); + boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); if (!hasbucket) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); event.setCancelled(true); @@ -292,9 +239,8 @@ public class ResidencePlayerListener implements Listener { String area = currentRes.get(pname); if (area != null) { ChatChannel channel = Residence.getChatManager().getChannel(area); - if (channel != null) { + if (channel != null) channel.chat(pname, event.getMessage()); - } event.setCancelled(true); } } @@ -308,11 +254,10 @@ public class ResidencePlayerListener implements Listener { if (block == null) return; Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) { + if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) + || event.getAction() == Action.PHYSICAL)) { int typeId = player.getItemInHand().getTypeId(); - if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID() - && typeId != 351 && typeId != 416) + if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) return; } FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); @@ -328,8 +273,7 @@ public class ResidencePlayerListener implements Listener { return; } } - if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) - && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { + if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { event.setCancelled(true); return; } @@ -343,31 +287,27 @@ public class ResidencePlayerListener implements Listener { if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getSelectionTooldID()) { Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { + if (wep != null) if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) return; - } PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") - && !player.isPermissionSet("residence.select") || group.canCreateResidences() && !player.isPermissionSet("residence.create") - && !player.isPermissionSet("residence.select") || resadmin) { + if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") + || group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc1(player, loc); - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc2(player, loc); - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); } event.setCancelled(true); } } - if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getInfoToolID()) { + if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getInfoToolID()) if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); String res = Residence.getResidenceManager().getNameByLoc(loc); @@ -380,13 +320,11 @@ public class ResidencePlayerListener implements Listener { player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); } } - } if (!resadmin) { - if (heldItem != null) { + if (heldItem != null) if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (player.getItemInHand().getTypeId() == 351) { - if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS - || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 + if (player.getItemInHand().getTypeId() == 351) + if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { @@ -394,22 +332,21 @@ public class ResidencePlayerListener implements Listener { return; } } - } - if (heldItem == Material.ARMOR_STAND) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - return; + if (Residence.is1_8()) + if (heldItem == Material.ARMOR_STAND) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + return; + } } - } } - } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat == checkMat.getKey()) { - if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) { + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) + if (mat == checkMat.getKey()) + if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) if (hasuse || checkMat.getValue().equals("container")) { event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); @@ -419,56 +356,30 @@ public class ResidencePlayerListener implements Listener { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); return; } - } - } - } - if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) { + if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) if (!perms.playerHas(player.getName(), world, "container", hasuse)) { event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); return; } - } - if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) { + if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) if (!hasuse) { event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); return; } - } - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) + if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) if (!hasuse) { event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); return; } - } - } } } } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.ARMOR_STAND) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); @@ -510,9 +421,8 @@ public class ResidencePlayerListener implements Listener { public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); lastUpdate.put(player.getName(), 0L); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { + if (Residence.getPermissionManager().isResidenceAdmin(player)) Residence.turnResAdminOn(player); - } handleNewLocation(player, player.getLocation(), false); } @@ -530,10 +440,9 @@ public class ResidencePlayerListener implements Listener { if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) return; lastUpdate.put(player.getName(), now); - if (event.getFrom().getWorld() == event.getTo().getWorld()) { + if (event.getFrom().getWorld() == event.getTo().getWorld()) if (event.getFrom().distance(event.getTo()) == 0) return; - } handleNewLocation(player, event.getTo(), true); } @@ -556,15 +465,12 @@ public class ResidencePlayerListener implements Listener { return; if (res.getPermissions().playerHas(player.getName(), "move", true)) return; - if (bed) { + if (bed) loc = player.getWorld().getSpawnLocation(); - } res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) { - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { + if (res != null) + if (!res.getPermissions().playerHas(player.getName(), "move", true)) loc = res.getOutsideFreeLoc(loc); - } - } player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); event.setRespawnLocation(loc); } @@ -580,8 +486,7 @@ public class ResidencePlayerListener implements Listener { } ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND - || event.getCause() == TeleportCause.NETHER_PORTAL) { + if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL) if (res != null) { String areaname = Residence.getResidenceManager().getNameByLoc(loc); if (!res.getPermissions().playerHas(player.getName(), "move", true)) { @@ -590,8 +495,7 @@ public class ResidencePlayerListener implements Listener { return; } } - } - if (event.getCause() == TeleportCause.PLUGIN) { + if (event.getCause() == TeleportCause.PLUGIN) if (res != null) { String areaname = Residence.getResidenceManager().getNameByLoc(loc); if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { @@ -600,7 +504,6 @@ public class ResidencePlayerListener implements Listener { return; } } - } handleNewLocation(player, loc, false); } @@ -611,9 +514,8 @@ public class ResidencePlayerListener implements Listener { playerToggleChat = new ArrayList(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) lastUpdate.put(player.getName(), System.currentTimeMillis()); - } } public void tooglePlayerResidenceChat(Player player) { @@ -626,4 +528,28 @@ public class ResidencePlayerListener implements Listener { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); } } + + private boolean isCanUseEntity(Material mat, Block block) { + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + } + + private boolean isCanUseEntity_BothClick(Material mat, Block block) { + return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR + || (Residence.is1_8() && (mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR + || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE + || mat == Material.DARK_OAK_FENCE_GATE)) + || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG + || Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + + private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL || mat == Material.CAKE_BLOCK + || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH + || mat == Material.BREWING_STAND || mat == Material.ENCHANTMENT_TABLE || Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + } + + private boolean isContainer(Material mat, Block block) { + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") + || Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId())); + } } diff --git a/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener_1_8.java b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener_1_8.java new file mode 100644 index 0000000..19ec1a5 --- /dev/null +++ b/src/main/java/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener_1_8.java @@ -0,0 +1,45 @@ +/* + * To change this template, choose Tools | Templates and open the template in + * the editor. + */ + +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +/** + * + * @author Administrator + */ +public class ResidencePlayerListener_1_8 implements Listener { + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (ent.getType() != EntityType.ARMOR_STAND) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + } + +} diff --git a/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d6d864a..3b0c21b 100644 --- a/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -32,52 +32,8 @@ import com.bekvon.bukkit.residence.text.help.InformationPager; */ public class ClaimedResidence { - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception { - ClaimedResidence res = new ClaimedResidence(); - if (root == null) - throw new Exception("Null residence!"); - res.enterMessage = (String) root.get("EnterMessage"); - res.leaveMessage = (String) root.get("LeaveMessage"); - if (root.containsKey("StoredMoney")) { - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - } - if (root.containsKey("BlackList")) { - res.blacklist = ResidenceItemList - .load(res, (Map) root.get("BlackList")); - } - if (root.containsKey("IgnoreList")) { - res.ignorelist = ResidenceItemList.load(res, - (Map) root.get("IgnoreList")); - } - Map areamap = (Map) root.get("Areas"); - res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); - World world = Residence.getServ().getWorld(res.perms.getWorld()); - if (world == null) - throw new Exception("Cant Find World: " + res.perms.getWorld()); - for (Entry map : areamap.entrySet()) { - res.areas.put(map.getKey(), - CuboidArea.load((Map) map.getValue(), world)); - } - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), - res); - if (Residence.getConfigManager().flagsInherit()) { - subres.getPermissions().setParent(res.getPermissions()); - } - res.subzones.put(map.getKey(), subres); - } - res.parent = parent; - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), - (Integer) tploc.get("Z")); - } - return res; - } - protected ClaimedResidence parent; + protected Map areas; protected Map subzones; protected ResidencePermissions perms; @@ -86,17 +42,8 @@ public class ClaimedResidence { protected String enterMessage; protected String leaveMessage; protected ResidenceItemList ignorelist; - protected ResidenceItemList blacklist; - private ClaimedResidence() { - subzones = new HashMap(); - areas = new HashMap(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); - } - public ClaimedResidence(String creationWorld) { this("Server Land", creationWorld); } @@ -111,114 +58,129 @@ public class ClaimedResidence { parent = parentResidence; } + private ClaimedResidence() { + subzones = new HashMap(); + areas = new HashMap(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception { + ClaimedResidence res = new ClaimedResidence(); + if (root == null) + throw new Exception("Null residence!"); + res.enterMessage = (String) root.get("EnterMessage"); + res.leaveMessage = (String) root.get("LeaveMessage"); + if (root.containsKey("StoredMoney")) + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); + Map areamap = (Map) root.get("Areas"); + res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); + World world = Residence.getServ().getWorld(res.perms.getWorld()); + if (world == null) + throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res); + if (Residence.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); + res.subzones.put(map.getKey(), subres); + } + res.parent = parent; + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) + res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); + return res; + } + public boolean addArea(CuboidArea area, String name) { return addArea(null, area, name, true); } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); return false; } if (areas.containsKey(name)) { - if (player != null) { + if (player != null) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); - } return false; } - if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() - && this.getParent() == null) { + if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { boolean inside = false; - for (CuboidArea are : areas.values()) { - if (are.isAreaWithinArea(area)) { + for (CuboidArea are : areas.values()) + if (are.isAreaWithinArea(area)) inside = true; - } - } if (!inside) return false; } if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaDiffWorld")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); return false; } if (parent == null) { - String collideResidence = Residence.getResidenceManager() - .checkAreaCollision(area, this); + String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); if (collideResidence != null) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaCollision", - ChatColor.YELLOW + collideResidence)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); return false; } } else { String[] szs = parent.listSubzones(); for (String sz : szs) { ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { + if (res != null && res != this) if (res.checkCollision(area)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaSubzoneCollision", - ChatColor.YELLOW + sz)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); return false; } - } } } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } if (parent != null) { if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ParentNoPermission")); + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); return false; } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } if (areas.size() >= group.getMaxPhysicalPerResidence()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaMaxPhysical")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical")); return false; } if (!group.inLimits(area)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaSizeLimit")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); return false; } if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaLowLimit", - ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); return false; } if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaHighLimit", - ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); return false; } if (parent == null && Residence.getConfigManager().enableEconomy()) { @@ -230,10 +192,8 @@ public class ClaimedResidence { Residence.getResidenceManager().removeChunkList(getName()); areas.put(name, area); Residence.getResidenceManager().calculateChunks(getName()); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); - } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); return true; } @@ -246,40 +206,29 @@ public class ClaimedResidence { public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); return false; } if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneSelectInside")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); return false; } if (subzones.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneExists", - ChatColor.YELLOW + name)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); return false; } if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), "subzone", - this.perms.playerHas(player.getName(), "admin", false))) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + if (!this.perms.hasResidencePermission(player, true)) + if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } - } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (this.getZoneDepth() >= group.getMaxSubzoneDepth()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); return false; } } @@ -288,11 +237,8 @@ public class ClaimedResidence { for (Entry resEntry : set) { ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneCollide", - ChatColor.YELLOW + resEntry.getKey())); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); return false; } } @@ -311,22 +257,15 @@ public class ClaimedResidence { newres.setEnterMessage(group.getDefaultEnterMessage()); newres.setLeaveMessage(group.getDefaultLeaveMessage()); } - if (Residence.getConfigManager().flagsInherit()) { + if (Residence.getConfigManager().flagsInherit()) newres.getPermissions().setParent(perms); - } subzones.put(name, newres); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SubzoneCreate", - ChatColor.YELLOW + name)); - } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); return true; } else { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneCreateFail", - ChatColor.YELLOW + name)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); return false; } } @@ -339,23 +278,21 @@ public class ClaimedResidence { Set set = areas.keySet(); for (String key : set) { CuboidArea checkarea = areas.get(key); - if (checkarea != null) { + if (checkarea != null) if (checkarea.checkCollision(area)) return true; - } } return false; } public boolean containsLoc(Location loc) { Collection keys = areas.values(); - for (CuboidArea key : keys) { + for (CuboidArea key : keys) if (key.containsLoc(loc)) { if (parent != null) return parent.containsLoc(loc); return true; } - } return false; } @@ -374,10 +311,9 @@ public class ClaimedResidence { } public CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { + for (CuboidArea thisarea : areas.values()) if (thisarea.containsLoc(loc)) return thisarea; - } return null; } @@ -386,10 +322,9 @@ public class ClaimedResidence { } public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { + for (Entry area : areas.entrySet()) if (area.getValue().containsLoc(loc)) return area.getKey(); - } return null; } @@ -434,8 +369,7 @@ public class ClaimedResidence { if (area == null) return insideLoc; Location highLoc = area.getHighLoc(); - Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), - highLoc.getBlockY(), highLoc.getBlockZ()); + Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); boolean found = false; int it = 0; while (!found && it < maxIt) { @@ -445,14 +379,12 @@ public class ClaimedResidence { newLoc.setZ(newLoc.getBlockZ() + 1); lowLoc = new Location(newLoc.getWorld(), newLoc.getBlockX(), 254, newLoc.getBlockZ()); newLoc.setY(255); - while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) - && lowLoc.getBlockY() > -126) { + while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) && lowLoc.getBlockY() > -126) { newLoc.setY(newLoc.getY() - 1); lowLoc.setY(lowLoc.getY() - 1); } - if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { + if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) found = true; - } } if (found) return newLoc; @@ -478,11 +410,9 @@ public class ClaimedResidence { public ArrayList getPlayersInResidence() { ArrayList within = new ArrayList(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) + if (this.containsLoc(player.getLocation())) within.add(player); - } - } return within; } @@ -512,6 +442,8 @@ public class ClaimedResidence { } if (!found) return null; + if (res == null) + return null; ClaimedResidence subrez = res.getSubzoneByLoc(loc); if (subrez == null) return res; @@ -521,11 +453,9 @@ public class ClaimedResidence { public String[] getSubzoneList() { ArrayList zones = new ArrayList(); Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { + for (String key : set) + if (key != null) zones.add(key); - } - } return zones.toArray(new String[zones.size()]); } @@ -542,6 +472,8 @@ public class ClaimedResidence { } if (key == null) return null; + if (res == null) + return null; String subname = res.getSubzoneNameByLoc(loc); if (subname != null) return key + "." + subname; @@ -569,9 +501,8 @@ public class ClaimedResidence { public long getTotalSize() { Collection set = areas.values(); long size = 0; - for (CuboidArea entry : set) { + for (CuboidArea entry : set) size = size + entry.getSize(); - } return size; } @@ -605,34 +536,25 @@ public class ClaimedResidence { CuboidArea a = entry.getValue(); Location h = a.getHighLoc(); Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED - + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" - + h.getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " - + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," - + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), - temp, page); + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); } public void printAreaList(Player player, int page) { ArrayList temp = new ArrayList(); - for (String area : areas.keySet()) { + for (String area : areas.keySet()) temp.add(area); - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), - temp, page); + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); } public void printSubzoneList(Player player, int page) { ArrayList temp = new ArrayList(); - for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " - + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, - page); + for (Entry sz : subzones.entrySet()) + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, page); } public void remove() { @@ -647,20 +569,17 @@ public class ClaimedResidence { if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaNonExist")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); return; } if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaRemoveLast")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaRemoveLast")); return; } removeArea(id); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRemove")); - } else { + } else player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } } public void removeArea(String id) { @@ -676,11 +595,8 @@ public class ClaimedResidence { return false; } subzones.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SubzoneRemove", - ChatColor.YELLOW + name + ChatColor.GREEN)); - } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); return true; } @@ -690,38 +606,28 @@ public class ClaimedResidence { public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); return false; } if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaExists")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); return false; } CuboidArea area = areas.get(oldName); if (area == null) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaInvalidName")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaInvalidName")); return false; } areas.put(newName, area); areas.remove(oldName); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); - } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); return true; } else { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } } @@ -732,40 +638,28 @@ public class ClaimedResidence { public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); return false; } ClaimedResidence res = subzones.get(oldName); if (res == null) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidSubzone")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidSubzone")); return false; } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) - && !resadmin) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } if (subzones.containsKey(newName)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SubzoneExists", - ChatColor.YELLOW + newName)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); return false; } subzones.put(newName, res); subzones.remove(oldName); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); - } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); return true; } @@ -779,45 +673,33 @@ public class ClaimedResidence { public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { if (!areas.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaNonExist")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); return false; } CuboidArea oldarea = areas.get(name); if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaDiffWorld")); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); return false; } if (parent == null) { - String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, - this); + String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); if (collideResidence != null) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaCollision", - ChatColor.YELLOW + collideResidence)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); return false; } } else { String[] szs = parent.listSubzones(); for (String sz : szs) { ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { + if (res != null && res != this) if (res.checkCollision(newarea)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaSubzoneCollision", - ChatColor.YELLOW + sz)); - } + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); return false; } - } } } // Remove subzones that are not in the area anymore @@ -826,74 +708,56 @@ public class ClaimedResidence { ClaimedResidence res = getSubzone(sz); if (res != null && res != this) { String[] areas = res.getAreaList(); - for (String area : areas) { + for (String area : areas) if (!newarea.isAreaWithinArea(res.getArea(area))) { boolean good = false; - for (CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + for (CuboidArea arae : getAreaArray()) + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) good = true; - } - } - if (!good) { + if (!good) res.removeArea(area); - } } - } - if (res.getAreaArray().length == 0) { + if (res.getAreaArray().length == 0) removeSubzone(sz); - } } } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) - || !parent.containsLoc(newarea.getLowLoc())) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ParentNoPermission")); + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); return false; } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } if (!group.inLimits(newarea)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaSizeLimit")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); return false; } if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaLowLimit", - ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); return false; } if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("AreaHighLimit", - ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); return false; } if (parent == null && Residence.getConfigManager().enableEconomy()) { - int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) - * group.getCostPerBlock()); - if (chargeamount > 0) { + int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + if (chargeamount > 0) if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) return false; - } } } @@ -913,14 +777,12 @@ public class ClaimedResidence { root.put("StoredMoney", bank.getStoredMoney()); root.put("BlackList", blacklist.save()); root.put("IgnoreList", ignorelist.save()); - for (Entry entry : areas.entrySet()) { + for (Entry entry : areas.entrySet()) areamap.put(entry.getKey(), entry.getValue().save()); - } root.put("Areas", areamap); Map subzonemap = new HashMap(); - for (Entry sz : subzones.entrySet()) { + for (Entry sz : subzones.entrySet()) subzonemap.put(sz.getKey(), sz.getValue().save()); - } root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); if (tpLoc != null) { @@ -940,27 +802,22 @@ public class ClaimedResidence { // player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidCharacters")); // return; // } - if (message != null) { - if (message.equals("")) { + if (message != null) + if (message.equals("")) message = null; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), - perms.getWorld()); + PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); if (!group.canSetEnterLeaveMessages() && !resadmin) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("OwnerNoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); return; } if (!perms.hasResidencePermission(player, false) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } - if (enter) { + if (enter) this.setEnterMessage(message); - } else { + else this.setLeaveMessage(message); - } player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange")); } @@ -982,26 +839,22 @@ public class ClaimedResidence { return; } tpLoc = player.getLocation(); - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("SetTeleportLocation")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SetTeleportLocation")); } public void tpToResidence(Player reqPlayer, Player targetPlayer, boolean resadmin) { if (!resadmin) { PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); if (!group.hasTpAccess()) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("TeleportDeny")); + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny")); return; } if (!reqPlayer.equals(targetPlayer)) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("TeleportNoFlag")); + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportNoFlag")); return; } } @@ -1010,8 +863,7 @@ public class ClaimedResidence { Residence.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.teleport(tpLoc); - targetPlayer.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("TeleportSuccess")); + targetPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportSuccess")); } } else { CuboidArea area = areas.values().iterator().next(); @@ -1024,8 +876,7 @@ public class ClaimedResidence { Residence.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.teleport(targloc); - targetPlayer.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("TeleportNear")); + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); } } } diff --git a/src/main/java/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/main/java/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 2d6ed32..386c07b 100644 --- a/src/main/java/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/main/java/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,7 +22,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; /** - * + * * @author Administrator */ public class FlagPermissions { @@ -30,83 +30,65 @@ public class FlagPermissions { protected static ArrayList validFlags = new ArrayList(); protected static ArrayList validPlayerFlags = new ArrayList(); protected static ArrayList validAreaFlags = new ArrayList(); - final static Map matUseFlagList = new EnumMap( - Material.class); + final static Map matUseFlagList = new EnumMap(Material.class); + protected static HashMap> validFlagGroups = new HashMap>(); protected Map> playerFlags; protected Map> groupFlags; protected Map cuboidFlags; + protected FlagPermissions parent; - public static void addMaterialToUseFlag(Material mat, String flag) { - matUseFlagList.put(mat, flag); - } - - public static void removeMaterialFromUseFlag(Material mat) { - matUseFlagList.remove(mat); - } - - public static EnumMap getMaterialUseFlagList() { - return (EnumMap) matUseFlagList; + public FlagPermissions() { + cuboidFlags = Collections.synchronizedMap(new HashMap()); + playerFlags = Collections.synchronizedMap(new HashMap>()); + groupFlags = Collections.synchronizedMap(new HashMap>()); } public static void addFlag(String flag) { flag = flag.toLowerCase(); - if (!validFlags.contains(flag)) { + if (!validFlags.contains(flag)) validFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { + if (validFlagGroups.containsKey(flag)) validFlagGroups.remove(flag); - } } - public static void addPlayerOrGroupOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validPlayerFlags.contains(flag)) { - validPlayerFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - } - - public static void addResidenceOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validAreaFlags.contains(flag)) { - validAreaFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - } - - protected static HashMap> validFlagGroups = new HashMap>(); - public static void addFlagToFlagGroup(String group, String flag) { - if (!FlagPermissions.validFlags.contains(group) - && !FlagPermissions.validAreaFlags.contains(group) - && !FlagPermissions.validPlayerFlags.contains(group)) { - if (!validFlagGroups.containsKey(group)) { + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + if (!validFlagGroups.containsKey(group)) validFlagGroups.put(group, new ArrayList()); - } ArrayList flags = validFlagGroups.get(group); flags.add(flag); } } - public static void removeFlagFromFlagGroup(String group, String flag) { - if (validFlagGroups.containsKey(group)) { - ArrayList flags = validFlagGroups.get(group); - flags.remove(flag); - if (flags.isEmpty()) { - validFlagGroups.remove(group); - } - } + public static void addMaterialToUseFlag(Material mat, String flag) { + matUseFlagList.put(mat, flag); + } + + public static void addPlayerOrGroupOnlyFlag(String flag) { + flag = flag.toLowerCase(); + if (!validPlayerFlags.contains(flag)) + validPlayerFlags.add(flag); + if (validFlagGroups.containsKey(flag)) + validFlagGroups.remove(flag); + } + + public static void addResidenceOnlyFlag(String flag) { + flag = flag.toLowerCase(); + if (!validAreaFlags.contains(flag)) + validAreaFlags.add(flag); + if (validFlagGroups.containsKey(flag)) + validFlagGroups.remove(flag); } public static boolean flagGroupExists(String group) { return validFlagGroups.containsKey(group); } + public static EnumMap getMaterialUseFlagList() { + return (EnumMap) matUseFlagList; + } + public static void initValidFlags() { validAreaFlags.clear(); validPlayerFlags.clear(); @@ -187,20 +169,22 @@ public class FlagPermissions { addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); addMaterialToUseFlag(Material.WORKBENCH, "table"); addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); - - /* 1.8 Doors */ - addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); - addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); - addMaterialToUseFlag(Material.JUNGLE_DOOR, "door"); - addMaterialToUseFlag(Material.ACACIA_DOOR, "door"); - addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door"); - /* 1.8 Fence Gates */ - addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); + if (Residence.is1_8()) { + /* 1.8 Doors */ + addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); + addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); + addMaterialToUseFlag(Material.JUNGLE_DOOR, "door"); + addMaterialToUseFlag(Material.ACACIA_DOOR, "door"); + addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door"); + + /* 1.8 Fence Gates */ + addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); + } addMaterialToUseFlag(Material.FENCE_GATE, "door"); addMaterialToUseFlag(Material.NETHER_FENCE, "door"); @@ -229,259 +213,151 @@ public class FlagPermissions { addMaterialToUseFlag(Material.CAKE_BLOCK, "cake"); } - public static FlagPermissions parseFromConfigNode(String name, - ConfigurationSection node) { + public static FlagPermissions load(Map root) throws Exception { + FlagPermissions newperms = new FlagPermissions(); + return FlagPermissions.load(root, newperms); + } + + public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { FlagPermissions list = new FlagPermissions(); Set keys = node.getConfigurationSection(name).getKeys(false); - if (keys != null) { + if (keys != null) for (String key : keys) { boolean state = node.getBoolean(name + "." + key, false); key = key.toLowerCase(); - if (state) { + if (state) list.setFlag(key, FlagState.TRUE); - } else { + else list.setFlag(key, FlagState.FALSE); - } } - } return list; } - public FlagPermissions() { - cuboidFlags = Collections - .synchronizedMap(new HashMap()); - playerFlags = Collections - .synchronizedMap(new HashMap>()); - groupFlags = Collections - .synchronizedMap(new HashMap>()); + public static void removeFlagFromFlagGroup(String group, String flag) { + if (validFlagGroups.containsKey(group)) { + ArrayList flags = validFlagGroups.get(group); + flags.remove(flag); + if (flags.isEmpty()) + validFlagGroups.remove(group); + } } - public boolean setPlayerFlag(String player, String flag, FlagState state) { - player = player.toLowerCase(); - if (!playerFlags.containsKey(player)) { - playerFlags - .put(player, Collections - .synchronizedMap(new HashMap())); - } - Map map = playerFlags.get(player); - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if (map.isEmpty()) { - playerFlags.remove(player); - } - return true; - } - - public void removeAllPlayerFlags(String player) { - playerFlags.remove(player); - } - - public void removeAllGroupFlags(String group) { - groupFlags.remove(group); - } - - public boolean setGroupFlag(String group, String flag, FlagState state) { - group = group.toLowerCase(); - if (!groupFlags.containsKey(group)) { - groupFlags - .put(group, Collections - .synchronizedMap(new HashMap())); - } - Map map = groupFlags.get(group); - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if (map.isEmpty()) { - groupFlags.remove(group); - } - return true; - } - - public boolean setFlag(String flag, FlagState state) { - if (state == FlagState.FALSE) { - cuboidFlags.put(flag, false); - } else if (state == FlagState.TRUE) { - cuboidFlags.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (cuboidFlags.containsKey(flag)) { - cuboidFlags.remove(flag); - } - } - return true; - } - - public static enum FlagState { - - TRUE, FALSE, NEITHER, INVALID + public static void removeMaterialFromUseFlag(Material mat) { + matUseFlagList.remove(mat); } public static FlagState stringToFlagState(String flagstate) { - if (flagstate.equalsIgnoreCase("true") - || flagstate.equalsIgnoreCase("t")) { + if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) return FlagState.TRUE; - } else if (flagstate.equalsIgnoreCase("false") - || flagstate.equalsIgnoreCase("f")) { + else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) return FlagState.FALSE; - } else if (flagstate.equalsIgnoreCase("remove") - || flagstate.equalsIgnoreCase("r")) { + else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) return FlagState.NEITHER; - } else { + else return FlagState.INVALID; + } + + @SuppressWarnings("unchecked") + protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { + newperms.playerFlags = (Map>) root.get("PlayerFlags"); + newperms.groupFlags = (Map>) root.get("GroupFlags"); + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + return newperms; + } + + public boolean checkValidFlag(String flag, boolean globalflag) { + if (validFlags.contains(flag)) + return true; + if (globalflag) { + if (validAreaFlags.contains(flag)) + return true; + } else if (validPlayerFlags.contains(flag)) + return true; + return false; + } + + public void clearFlags() { + groupFlags.clear(); + playerFlags.clear(); + cuboidFlags.clear(); + } + + public void clearPlayersFlags(String user) { + if (playerFlags.containsKey(user)) + playerFlags.remove(user); + } + + public void copyUserPermissions(String fromUser, String toUser) { + fromUser = fromUser.toLowerCase(); + toUser = toUser.toLowerCase(); + Map get = playerFlags.get(fromUser); + if (get != null) { + Map targ = playerFlags.get(toUser); + if (targ == null) { + targ = new HashMap(); + playerFlags.put(toUser, targ); + } + for (Entry entry : get.entrySet()) + targ.put(entry.getKey(), entry.getValue()); } } - public boolean playerHas(String player, String world, String flag, - boolean def) { - String group = Residence.getPermissionManager().getGroupNameByPlayer( - player, world); - return this.playerCheck(player, flag, - this.groupCheck(group, flag, this.has(flag, def))); + public FlagPermissions getParent() { + return parent; } public boolean groupHas(String group, String flag, boolean def) { return this.groupCheck(group, flag, this.has(flag, def)); } - private boolean playerCheck(String player, String flag, boolean def) { - player = player.toLowerCase(); - if (playerFlags.containsKey(player)) { - Map pmap = playerFlags.get(player); - if (pmap.containsKey(flag)) { - return pmap.get(flag); - } - } - if (parent != null) { - return parent.playerCheck(player, flag, def); - } - return def; - } - - private boolean groupCheck(String group, String flag, boolean def) { - if (groupFlags.containsKey(group)) { - Map gmap = groupFlags.get(group); - if (gmap.containsKey(flag)) { - return gmap.get(flag); - } - } - if (parent != null) { - return parent.groupCheck(group, flag, def); - } - return def; - } - public boolean has(String flag, boolean def) { - if (cuboidFlags.containsKey(flag)) { + if (cuboidFlags.containsKey(flag)) return cuboidFlags.get(flag); - } - if (parent != null) { + if (parent != null) return parent.has(flag, def); - } return def; } - public boolean isPlayerSet(String player, String flag) { - player = player.toLowerCase(); - Map flags = playerFlags.get(player); - if (flags == null) { - return false; - } - return flags.containsKey(flag); - } - - public boolean inheritanceIsPlayerSet(String player, String flag) { - player = player.toLowerCase(); - Map flags = playerFlags.get(player); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsPlayerSet( - player, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent - .inheritanceIsPlayerSet(player, flag); - } - - public boolean isGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return false; - } - return flags.containsKey(flag); - } - public boolean inheritanceIsGroupSet(String group, String flag) { group = group.toLowerCase(); Map flags = groupFlags.get(group); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsGroupSet(group, - flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent - .inheritanceIsGroupSet(group, flag); + if (flags == null) + return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + } + + public boolean inheritanceIsPlayerSet(String player, String flag) { + player = player.toLowerCase(); + Map flags = playerFlags.get(player); + if (flags == null) + return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + } + + public boolean inheritanceIsSet(String flag) { + return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); + } + + public boolean isGroupSet(String group, String flag) { + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) + return false; + return flags.containsKey(flag); + } + + public boolean isPlayerSet(String player, String flag) { + player = player.toLowerCase(); + Map flags = playerFlags.get(player); + if (flags == null) + return false; + return flags.containsKey(flag); } public boolean isSet(String flag) { return cuboidFlags.containsKey(flag); } - public boolean inheritanceIsSet(String flag) { - return cuboidFlags.containsKey(flag) ? true : parent == null ? false - : parent.inheritanceIsSet(flag); - } - - public boolean checkValidFlag(String flag, boolean globalflag) { - if (validFlags.contains(flag)) { - return true; - } - if (globalflag) { - if (validAreaFlags.contains(flag)) { - return true; - } - } else { - if (validPlayerFlags.contains(flag)) { - return true; - } - } - return false; - } - - public Map save() { - Map root = new LinkedHashMap(); - root.put("PlayerFlags", playerFlags); - root.put("GroupFlags", groupFlags); - root.put("AreaFlags", cuboidFlags); - return root; - } - - public static FlagPermissions load(Map root) - throws Exception { - FlagPermissions newperms = new FlagPermissions(); - return FlagPermissions.load(root, newperms); - } - - @SuppressWarnings("unchecked") - protected static FlagPermissions load(Map root, - FlagPermissions newperms) throws Exception { - newperms.playerFlags = (Map>) root - .get("PlayerFlags"); - newperms.groupFlags = (Map>) root - .get("GroupFlags"); - newperms.cuboidFlags = (Map) root.get("AreaFlags"); - return newperms; - } - public String listFlags() { StringBuilder sbuild = new StringBuilder(); Set> set = cuboidFlags.entrySet(); @@ -491,73 +367,17 @@ public class FlagPermissions { Entry next = it.next(); if (next.getValue()) { sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { + if (it.hasNext()) sbuild.append(" "); - } } else { sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { + if (it.hasNext()) sbuild.append(" "); - } } } } - if (sbuild.length() == 0) { + if (sbuild.length() == 0) sbuild.append("none"); - } - return sbuild.toString(); - } - - public String listPlayerFlags(String player) { - player = player.toLowerCase(); - if (playerFlags.containsKey(player)) { - StringBuilder sbuild = new StringBuilder(); - Map get = playerFlags.get(player); - Set> set = get.entrySet(); - synchronized (get) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - playerFlags.remove(player); - sbuild.append("none"); - } - return sbuild.toString(); - } else { - return "none"; - } - } - - public String listOtherPlayersFlags(String player) { - player = player.toLowerCase(); - StringBuilder sbuild = new StringBuilder(); - Set set = playerFlags.keySet(); - synchronized (playerFlags) { - Iterator it = set.iterator(); - while (it.hasNext()) { - String next = it.next(); - if (!next.equals(player)) { - String perms = listPlayerFlags(next); - if (!perms.equals("none")) { - sbuild.append(next).append("[" + ChatColor.DARK_AQUA) - .append(perms).append(ChatColor.RED + "] "); - } - } - } - } return sbuild.toString(); } @@ -569,10 +389,8 @@ public class FlagPermissions { while (it.hasNext()) { String next = it.next(); String perms = listGroupFlags(next); - if (!perms.equals("none")) { - sbuild.append(next).append("[" + ChatColor.DARK_AQUA) - .append(perms).append(ChatColor.RED + "] "); - } + if (!perms.equals("none")) + sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] "); } } return sbuild.toString(); @@ -590,14 +408,12 @@ public class FlagPermissions { Entry next = it.next(); if (next.getValue()) { sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { + if (it.hasNext()) sbuild.append(" "); - } } else { sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { + if (it.hasNext()) sbuild.append(" "); - } } } } @@ -606,59 +422,163 @@ public class FlagPermissions { sbuild.append("none"); } return sbuild.toString(); - } else { + } else return "none"; - } } - public void clearFlags() { - groupFlags.clear(); - playerFlags.clear(); - cuboidFlags.clear(); + public String listOtherPlayersFlags(String player) { + player = player.toLowerCase(); + StringBuilder sbuild = new StringBuilder(); + Set set = playerFlags.keySet(); + synchronized (playerFlags) { + Iterator it = set.iterator(); + while (it.hasNext()) { + String next = it.next(); + if (!next.equals(player)) { + String perms = listPlayerFlags(next); + if (!perms.equals("none")) + sbuild.append(next).append("[" + ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED + "] "); + } + } + } + return sbuild.toString(); + } + + public String listPlayerFlags(String player) { + player = player.toLowerCase(); + if (playerFlags.containsKey(player)) { + StringBuilder sbuild = new StringBuilder(); + Map get = playerFlags.get(player); + Set> set = get.entrySet(); + synchronized (get) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("+").append(next.getKey()); + if (it.hasNext()) + sbuild.append(" "); + } else { + sbuild.append("-").append(next.getKey()); + if (it.hasNext()) + sbuild.append(" "); + } + } + } + if (sbuild.length() == 0) { + playerFlags.remove(player); + sbuild.append("none"); + } + return sbuild.toString(); + } else + return "none"; + } + + public boolean playerHas(String player, String world, String flag, boolean def) { + String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); + return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); } public void printFlags(Player player) { - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("Flags") + ":" - + ChatColor.BLUE + " " + listFlags()); - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("Your.Flags") + ":" - + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("Group.Flags") + ":" - + ChatColor.RED + " " + listGroupFlags()); - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("Others.Flags") + ":" - + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); } - public void copyUserPermissions(String fromUser, String toUser) { - fromUser = fromUser.toLowerCase(); - toUser = toUser.toLowerCase(); - Map get = playerFlags.get(fromUser); - if (get != null) { - Map targ = playerFlags.get(toUser); - if (targ == null) { - targ = new HashMap(); - playerFlags.put(toUser, targ); - } - for (Entry entry : get.entrySet()) { - targ.put(entry.getKey(), entry.getValue()); - } - } + public void removeAllGroupFlags(String group) { + groupFlags.remove(group); } - public void clearPlayersFlags(String user) { - if (playerFlags.containsKey(user)) { - playerFlags.remove(user); - } + public void removeAllPlayerFlags(String player) { + playerFlags.remove(player); + } + + public Map save() { + Map root = new LinkedHashMap(); + root.put("PlayerFlags", playerFlags); + root.put("GroupFlags", groupFlags); + root.put("AreaFlags", cuboidFlags); + return root; + } + + public boolean setFlag(String flag, FlagState state) { + if (state == FlagState.FALSE) + cuboidFlags.put(flag, false); + else if (state == FlagState.TRUE) + cuboidFlags.put(flag, true); + else if (state == FlagState.NEITHER) + if (cuboidFlags.containsKey(flag)) + cuboidFlags.remove(flag); + return true; + } + + public boolean setGroupFlag(String group, String flag, FlagState state) { + group = group.toLowerCase(); + if (!groupFlags.containsKey(group)) + groupFlags.put(group, Collections.synchronizedMap(new HashMap())); + Map map = groupFlags.get(group); + if (state == FlagState.FALSE) + map.put(flag, false); + else if (state == FlagState.TRUE) + map.put(flag, true); + else if (state == FlagState.NEITHER) + if (map.containsKey(flag)) + map.remove(flag); + if (map.isEmpty()) + groupFlags.remove(group); + return true; } public void setParent(FlagPermissions p) { parent = p; } - public FlagPermissions getParent() { - return parent; + public boolean setPlayerFlag(String player, String flag, FlagState state) { + player = player.toLowerCase(); + if (!playerFlags.containsKey(player)) + playerFlags.put(player, Collections.synchronizedMap(new HashMap())); + Map map = playerFlags.get(player); + if (state == FlagState.FALSE) + map.put(flag, false); + else if (state == FlagState.TRUE) + map.put(flag, true); + else if (state == FlagState.NEITHER) + if (map.containsKey(flag)) + map.remove(flag); + if (map.isEmpty()) + playerFlags.remove(player); + return true; + } + + private boolean groupCheck(String group, String flag, boolean def) { + if (groupFlags.containsKey(group)) { + Map gmap = groupFlags.get(group); + if (gmap.containsKey(flag)) + return gmap.get(flag); + } + if (parent != null) + return parent.groupCheck(group, flag, def); + return def; + } + + private boolean playerCheck(String player, String flag, boolean def) { + player = player.toLowerCase(); + if (playerFlags.containsKey(player)) { + Map pmap = playerFlags.get(player); + if (pmap.containsKey(flag)) + return pmap.get(flag); + } + if (parent != null) + return parent.playerCheck(player, flag, def); + return def; + } + + public static enum FlagState { + + TRUE, + FALSE, + NEITHER, + INVALID } } diff --git a/src/main/java/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/main/java/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e9f928b..04b9b40 100644 --- a/src/main/java/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/main/java/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,14 +36,596 @@ import com.bekvon.bukkit.residence.text.help.InformationPager; * @author Administrator */ public class ResidenceManager { + protected Map residences; + + protected Map>> chunkResidences; + + public ResidenceManager() { + residences = new HashMap(); + chunkResidences = new HashMap>>(); + } + + @SuppressWarnings("unchecked") + public static ResidenceManager load(Map root) throws Exception { + ResidenceManager resm = new ResidenceManager(); + if (root == null) + return resm; + for (World world : Residence.getServ().getWorlds()) { + Map reslist = (Map) root.get(world.getName()); + if (reslist != null) + try { + resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); + } catch (Exception ex) { + Residence.getLog().warning("载入世界: " + world.getName() + "的领地数据时发生错误!"); + if (Residence.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + return resm; + } + + @SuppressWarnings("unchecked") + public static Map> loadMap(Map root, ResidenceManager resm) throws Exception { + Map> retRes = new HashMap>(); + if (root != null) + for (Entry res : root.entrySet()) + try { + ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null); + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList(); + if (retRes.containsKey(chunk)) + ress.addAll(retRes.get(chunk)); + ress.add(res.getKey()); + retRes.put(chunk, ress); + } + resm.residences.put(res.getKey(), residence); + } catch (Exception ex) { + System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (Residence.getConfigManager().stopOnSaveError()) + throw (ex); + } + return retRes; + } + + private static List getChunks(ClaimedResidence res) { + List chunks = new ArrayList(); + for (CuboidArea area : res.getAreaArray()) + chunks.addAll(area.getChunks()); + return chunks; + } + + public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { + return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); + } + + public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { + if (!Residence.validName(name)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + return false; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); + if (!createpermission && !resadmin) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (player != null) + if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + return false; + } + CuboidArea newArea = new CuboidArea(loc1, loc2); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); + newRes.getPermissions().applyDefaultFlags(); + newRes.setEnterMessage(group.getDefaultEnterMessage()); + newRes.setLeaveMessage(group.getDefaultLeaveMessage()); + + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + newArea = resevent.getPhysicalArea(); + name = resevent.getResidenceName(); + if (residences.containsKey(name)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + return false; + } + if (player != null) + newRes.addArea(player, newArea, "main", resadmin); + else + newRes.addArea(newArea, "main"); + if (newRes.getAreaCount() != 0) { + residences.put(name, newRes); + calculateChunks(name); + Residence.getLeaseManager().removeExpireTime(name); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); + if (Residence.getConfigManager().useLeases()) + if (player != null) + Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + else + Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); + return true; + } + return false; + } + + public boolean addResidence(String name, Location loc1, Location loc2) { + return this.addResidence(name, "Server Land", loc1, loc2); + } + + public boolean addResidence(String name, String owner, Location loc1, Location loc2) { + return this.addResidence(null, owner, name, loc1, loc2, true); + } + + public void calculateChunks(String name) { + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) == null) + chunkResidences.put(world, new HashMap>()); + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList(); + if (chunkResidences.get(world).containsKey(chunk)) + ress.addAll(chunkResidences.get(world).get(chunk)); + ress.add(name); + chunkResidences.get(world).put(chunk, ress); + } + } + } + + public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) + return entry.getKey(); + } + return null; + } + + public ClaimedResidence getByLoc(Location loc) { + if (loc == null) + return null; + ClaimedResidence res = null; + boolean found = false; + String world = loc.getWorld().getName(); + ChunkRef chunk = new ChunkRef(loc); + if (chunkResidences.get(world) != null) + if (chunkResidences.get(world).get(chunk) != null) + for (String key : chunkResidences.get(world).get(chunk)) { + ClaimedResidence entry = residences.get(key); + if (entry.containsLoc(loc)) { + res = entry; + found = true; + break; + } + } + if (!found) + return null; + if (res == null) + return null; + ClaimedResidence subres = res.getSubzoneByLoc(loc); + if (subres == null) + return res; + return subres; + } + + public ClaimedResidence getByName(String name) { + if (name == null) + return null; + String[] split = name.split("\\."); + if (split.length == 1) + return residences.get(name); + ClaimedResidence res = residences.get(split[0]); + for (int i = 1; i < split.length; i++) + if (res != null) + res = res.getSubzone(split[i]); + else + return null; + return res; + } + + public String getNameByLoc(Location loc) { + if (loc == null) + return null; + ClaimedResidence res = null; + String name = null; + boolean found = false; + String world = loc.getWorld().getName(); + ChunkRef chunk = new ChunkRef(loc); + if (chunkResidences.get(world) != null) + if (chunkResidences.get(world).get(chunk) != null) + for (String key : chunkResidences.get(world).get(chunk)) { + ClaimedResidence entry = residences.get(key); + if (entry.containsLoc(loc)) { + res = entry; + found = true; + break; + } + } + if (!found) + return null; + if (res == null) + return null; + name = res.getName(); + if (name == null) + return null; + String szname = res.getSubzoneNameByLoc(loc); + if (szname != null) + return name + "." + szname; + return name; + } + + public String getNameByRes(ClaimedResidence res) { + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) + return check.getKey(); + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) + return check.getKey() + "." + n; + } + return null; + } + + public int getOwnedZoneCount(String player) { + Collection set = residences.values(); + int count = 0; + for (ClaimedResidence res : set) + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) + count++; + return count; + } + + public int getResidenceCount() { + return residences.size(); + } + + public String[] getResidenceList() { + return this.getResidenceList(true, true).toArray(new String[0]); + } + + public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { + return this.getResidenceList(null, showhidden, showsubzones, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { + return this.getResidenceList(targetplayer, showhidden, showsubzones, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { + ArrayList list = new ArrayList(); + for (Entry res : residences.entrySet()) + this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); + return list; + } + + public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { + ClaimedResidence res = getByName(residence); + if (res == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + Player giveplayer = Residence.getServ().getPlayer(targPlayer); + if (giveplayer == null || !giveplayer.isOnline()) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); + return; + } + CuboidArea[] areas = res.getAreaArray(); + PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); + if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (!resadmin) + for (CuboidArea area : areas) + if (!g.inLimits(area)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + res.getPermissions().setOwner(giveplayer.getName(), true); + // Fix phrases here + reqPlayer.sendMessage( + ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); + giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW)); + } + + public void listAllResidences(Player player, int page) { + this.listAllResidences(player, page, false); + } + + public void listAllResidences(Player player, int page, boolean showhidden) { + this.listAllResidences(player, page, showhidden, false); + } + + public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { + if (showhidden && !Residence.isResAdminOn(player)) + showhidden = false; + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); + } + + public void listResidences(Player player) { + this.listResidences(player, player.getName(), 1); + } + + public void listResidences(Player player, int page) { + this.listResidences(player, player.getName(), page); + } + + public void listResidences(Player player, int page, boolean showhidden) { + this.listResidences(player, player.getName(), page, showhidden); + } + + public void listResidences(Player player, String targetplayer) { + this.listResidences(player, targetplayer, 1); + } + + public void listResidences(Player player, String targetplayer, int page) { + this.listResidences(player, targetplayer, page, false); + } + + public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { + this.listResidences(player, targetplayer, page, showhidden, false); + } + + public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { + if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) + showhidden = false; + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); + } + + public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { + ClaimedResidence reciever = this.getByName(targetArea); + ClaimedResidence source = this.getByName(sourceArea); + if (source == null || reciever == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!resadmin) + if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); + } + + public void printAreaInfo(String areaname, Player player) { + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + ResidencePermissions perms = res.getPermissions(); + if (Residence.getConfigManager().enableEconomy()) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD + + res.getBank().getStoredMoney()); + else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED + + Residence.getRentManager().getRentingPlayer(areaname)); + else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " + + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); + String aid = res.getAreaIDbyLoc(player.getLocation()); + if (aid != null) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); + if (aid != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + + Residence.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + + Residence.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); + if (Residence.isUseWorldEdit()) + WECUI.UPDATESELECT(res, player); + } + if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager().getExpireTime(areaname)); + } + + public void removeAllByOwner(Player player, String owner) { + this.removeAllByOwner(player, owner, residences); + } + + public void removeAllByOwner(String owner) { + this.removeAllByOwner(null, owner, residences); + } + + public void removeAllFromWorld(CommandSender sender, String world) { + int count = 0; + Iterator it = residences.values().iterator(); + while (it.hasNext()) { + ClaimedResidence next = it.next(); + if (next.getWorld().equals(world)) { + it.remove(); + count++; + } + } + chunkResidences.remove(world); + chunkResidences.put(world, new HashMap>()); + if (count == 0) + sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); + else + sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); + } + + public void removeChunkList(String name) { + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) != null) + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList(); + if (chunkResidences.get(world).containsKey(chunk)) + ress.addAll(chunkResidences.get(world).get(chunk)); + ress.remove(name); + chunkResidences.get(world).put(chunk, ress); + } + } + } + + public void removeResidence(Player player, String name, boolean resadmin) { + ClaimedResidence res = this.getByName(name); + if (res != null) { + if (player != null && !resadmin) + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + residences.remove(name); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } else { + String[] split = name.split("\\."); + if (player != null) + parent.removeSubzone(player, split[split.length - 1], true); + else + parent.removeSubzone(split[split.length - 1]); + } + // Residence.getLeaseManager().removeExpireTime(name); - causing + // concurrent modification exception in lease manager... worked + // around for now + Residence.getRentManager().removeRentable(name); + + } else if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } + + public void removeResidence(String name) { + this.removeResidence(null, name, true); + } + + public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { + if (!Residence.validName(newName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + ClaimedResidence res = this.getByName(oldName); + if (res == null) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return false; + } + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (res.getParent() == null) { + if (residences.containsKey(newName)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); + return false; + } + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); + Residence.getServ().getPluginManager().callEvent(resevent); + removeChunkList(oldName); + residences.put(newName, res); + residences.remove(oldName); + calculateChunks(newName); + if (Residence.getConfigManager().useLeases()) + Residence.getLeaseManager().updateLeaseName(oldName, newName); + if (Residence.getConfigManager().enabledRentSystem()) + Residence.getRentManager().updateRentableName(oldName, newName); + if (player != null) + player.sendMessage( + ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN)); + return true; + } else { + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); + return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + } + } else { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + } + + public boolean renameResidence(String oldName, String newName) { + return this.renameResidence(null, oldName, newName, true); + } + + public Map save() { + Map worldmap = new LinkedHashMap(); + for (World world : Residence.getServ().getWorlds()) { + Map resmap = new LinkedHashMap(); + for (Entry res : residences.entrySet()) + if (res.getValue().getWorld().equals(world.getName())) + try { + resmap.put(res.getKey(), res.getValue().save()); + } catch (Exception ex) { + System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + } + worldmap.put(world.getName(), resmap); + } + return worldmap; + } + + private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, + boolean formattedOutput) { + boolean hidden = res.getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) + if (formattedOutput) + list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); + else + list.add(parentzone + resname); + if (showsubzones) + for (Entry sz : res.subzones.entrySet()) + this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); + } + } + + private void removeAllByOwner(Player player, String owner, Map resholder) { + Iterator it = resholder.values().iterator(); + while (it.hasNext()) { + ClaimedResidence res = it.next(); + if (res.getOwner().equalsIgnoreCase(owner)) { + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + removeChunkList(res.getName()); + it.remove(); + } else + this.removeAllByOwner(player, owner, res.subzones); + } + } + public static final class ChunkRef { - public static int getChunkCoord(final int val) { - // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) - return val >> 4; - } - private final int z; + private final int x; public ChunkRef(int x, int z) { @@ -56,6 +638,11 @@ public class ResidenceManager { this.z = getChunkCoord(loc.getBlockZ()); } + public static int getChunkCoord(final int val) { + // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) + return val >> 4; + } + @Override public boolean equals(final Object obj) { if (this == obj) @@ -83,730 +670,4 @@ public class ResidenceManager { return sb.toString(); } } - - private static List getChunks(ClaimedResidence res) { - List chunks = new ArrayList(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } - return chunks; - } - - @SuppressWarnings("unchecked") - public static ResidenceManager load(Map root) throws Exception { - ResidenceManager resm = new ResidenceManager(); - if (root == null) - return resm; - for (World world : Residence.getServ().getWorlds()) { - Map reslist = (Map) root.get(world.getName()); - if (reslist != null) { - try { - resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); - } catch (Exception ex) { - Residence.getLog().warning("载入世界: " + world.getName() + "的领地数据时发生错误!"); - if (Residence.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - } - return resm; - } - - @SuppressWarnings("unchecked") - public static Map> loadMap(Map root, ResidenceManager resm) throws Exception { - Map> retRes = new HashMap>(); - if (root != null) { - for (Entry res : root.entrySet()) { - try { - ClaimedResidence residence = ClaimedResidence.load( - (Map) res.getValue(), null); - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(res.getKey()); - retRes.put(chunk, ress); - } - resm.residences.put(res.getKey(), residence); - } catch (Exception ex) { - System.out.print("[Residence] Failed to load residence (" + res.getKey() - + ")! Reason:" + ex.getMessage() + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (Residence.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - } - return retRes; - } - - protected Map residences; - - protected Map>> chunkResidences; - - public ResidenceManager() { - residences = new HashMap(); - chunkResidences = new HashMap>>(); - } - - public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { - return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); - } - - public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (loc1 == null || loc2 == null - || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("SelectPoints")); - } - return false; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(owner, - loc1.getWorld().getName()); - boolean createpermission = group.canCreateResidences() - || (player == null ? true : player.hasPermission("residence.create")); - if (!createpermission && !resadmin) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } - if (player != null) { - if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceTooMany")); - return false; - } - } - CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); - newRes.getPermissions().applyDefaultFlags(); - newRes.setEnterMessage(group.getDefaultEnterMessage()); - newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - newArea = resevent.getPhysicalArea(); - name = resevent.getResidenceName(); - if (residences.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", - ChatColor.YELLOW + name + ChatColor.RED)); - } - return false; - } - if (player != null) { - newRes.addArea(player, newArea, "main", resadmin); - } else { - newRes.addArea(newArea, "main"); - } - if (newRes.getAreaCount() != 0) { - residences.put(name, newRes); - calculateChunks(name); - Residence.getLeaseManager().removeExpireTime(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("ResidenceCreate", - ChatColor.YELLOW + name + ChatColor.GREEN)); - } - if (Residence.getConfigManager().useLeases()) { - if (player != null) { - Residence.getLeaseManager().setExpireTime(player, name, - group.getLeaseGiveTime()); - } else { - Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } - } - return true; - } - return false; - } - - public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, "Server Land", loc1, loc2); - } - - public boolean addResidence(String name, String owner, Location loc1, Location loc2) { - return this.addResidence(null, owner, name, loc1, loc2, true); - } - - public void calculateChunks(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(name); - chunkResidences.get(world).put(chunk, ress); - } - } - } - - public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check != parentResidence && check.checkCollision(newarea)) - return entry.getKey(); - } - return null; - } - - public ClaimedResidence getByLoc(Location loc) { - if (loc == null) - return null; - ClaimedResidence res = null; - boolean found = false; - String world = loc.getWorld().getName(); - ChunkRef chunk = new ChunkRef(loc); - if (chunkResidences.get(world) != null) { - if (chunkResidences.get(world).get(chunk) != null) { - for (String key : chunkResidences.get(world).get(chunk)) { - ClaimedResidence entry = residences.get(key); - if (entry.containsLoc(loc)) { - res = entry; - found = true; - break; - } - } - } - } - if (!found) - return null; - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) - return res; - return subres; - } - - public ClaimedResidence getByName(String name) { - if (name == null) - return null; - String[] split = name.split("\\."); - if (split.length == 1) - return residences.get(name); - ClaimedResidence res = residences.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i]); - } else - return null; - } - return res; - } - - public String getNameByLoc(Location loc) { - if (loc == null) - return null; - ClaimedResidence res = null; - String name = null; - boolean found = false; - String world = loc.getWorld().getName(); - ChunkRef chunk = new ChunkRef(loc); - if (chunkResidences.get(world) != null) { - if (chunkResidences.get(world).get(chunk) != null) { - for (String key : chunkResidences.get(world).get(chunk)) { - ClaimedResidence entry = residences.get(key); - if (entry.containsLoc(loc)) { - res = entry; - found = true; - break; - } - } - } - } - if (!found) - return null; - name = res.getName(); - if (name == null) - return null; - String szname = res.getSubzoneNameByLoc(loc); - if (szname != null) - return name + "." + szname; - return name; - } - - public String getNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) - return check.getKey(); - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) - return check.getKey() + "." + n; - } - return null; - } - - public int getOwnedZoneCount(String player) { - Collection set = residences.values(); - int count = 0; - for (ClaimedResidence res : set) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { - count++; - } - } - return count; - } - - public int getResidenceCount() { - return residences.size(); - } - - public String[] getResidenceList() { - return this.getResidenceList(true, true).toArray(new String[0]); - } - - public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { - return this.getResidenceList(null, showhidden, showsubzones, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { - ArrayList list = new ArrayList(); - for (Entry res : residences.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), - res.getValue(), list, formattedOutput); - } - return list; - } - - private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, boolean formattedOutput) { - boolean hidden = res.getPermissions().has("hidden", false); - if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null - || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { - if (formattedOutput) { - list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " - + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); - } else { - list.add(parentzone + resname); - } - } - if (showsubzones) { - for (Entry sz : res.subzones.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone - + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); - } - } - } - } - - public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - ClaimedResidence res = getByName(residence); - if (res == null) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - reqPlayer - .sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - Player giveplayer = Residence.getServ().getPlayer(targPlayer); - if (giveplayer == null || !giveplayer.isOnline()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); - return; - } - CuboidArea[] areas = res.getAreaArray(); - PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); - if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (!resadmin) { - for (CuboidArea area : areas) { - if (!g.inLimits(area)) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - } - } - res.getPermissions().setOwner(giveplayer.getName(), true); - // Fix phrases here - reqPlayer.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase( - "ResidenceGive", - ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW - + giveplayer.getName() + ChatColor.GREEN)); - giveplayer.sendMessage(Residence.getLanguage().getPhrase( - "ResidenceRecieve", - ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN - + reqPlayer.getName() + ChatColor.YELLOW)); - } - - public void listAllResidences(Player player, int page) { - this.listAllResidences(player, page, false); - } - - public void listAllResidences(Player player, int page, boolean showhidden) { - this.listAllResidences(player, page, showhidden, false); - } - - public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), - this.getResidenceList(null, showhidden, showsubzones, true), page); - } - - public void listResidences(Player player) { - this.listResidences(player, player.getName(), 1); - } - - public void listResidences(Player player, int page) { - this.listResidences(player, player.getName(), page); - } - - public void listResidences(Player player, int page, boolean showhidden) { - this.listResidences(player, player.getName(), page, showhidden); - } - - public void listResidences(Player player, String targetplayer) { - this.listResidences(player, targetplayer, 1); - } - - public void listResidences(Player player, String targetplayer, int page) { - this.listResidences(player, targetplayer, page, false); - } - - public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { - this.listResidences(player, targetplayer, page, showhidden, false); - } - - public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " - + targetplayer, - this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); - } - - public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { - ClaimedResidence reciever = this.getByName(targetArea); - ClaimedResidence source = this.getByName(sourceArea); - if (source == null || reciever == null) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!resadmin) { - if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) - || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - reqPlayer.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); - } - - public void printAreaInfo(String areaname, Player player) { - ClaimedResidence res = this.getByName(areaname); - if (res == null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - ResidencePermissions perms = res.getPermissions(); - if (Residence.getConfigManager().enableEconomy()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") - + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW - + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") - + ":" + ChatColor.DARK_GREEN + " " + areaname); - } - if (Residence.getConfigManager().enabledRentSystem() - && Residence.getRentManager().isRented(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" - + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " - + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" - + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " - + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED - + perms.getWorld()); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" - + ChatColor.BLUE + " " + perms.listFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") - + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") - + ":" + ChatColor.RED + " " + perms.listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") - + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); - String aid = res.getAreaIDbyLoc(player.getLocation()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") - + ": " + ChatColor.GOLD + aid); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" - + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("CoordsT") - + ": " - + ChatColor.LIGHT_PURPLE - + Residence.getLanguage().getPhrase( - "CoordsTop", - res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() - + "." - + res.getAreaByLoc(player.getLocation()).getHighLoc() - .getBlockY() - + "." - + res.getAreaByLoc(player.getLocation()).getHighLoc() - .getBlockZ())); - player.sendMessage(ChatColor.YELLOW - + Residence.getLanguage().getPhrase("CoordsB") - + ": " - + ChatColor.LIGHT_PURPLE - + Residence.getLanguage().getPhrase( - "CoordsBottom", - res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() - + "." - + res.getAreaByLoc(player.getLocation()).getLowLoc() - .getBlockY() - + "." - + res.getAreaByLoc(player.getLocation()).getLowLoc() - .getBlockZ())); - if (Residence.isUseWorldEdit()) { - WECUI.UPDATESELECT(res, player); - } - } - if (Residence.getConfigManager().useLeases() - && Residence.getLeaseManager().leaseExpires(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") - + ":" + ChatColor.GREEN + " " - + Residence.getLeaseManager().getExpireTime(areaname)); - } - } - - public void removeAllByOwner(Player player, String owner) { - this.removeAllByOwner(player, owner, residences); - } - - private void removeAllByOwner(Player player, String owner, Map resholder) { - Iterator it = resholder.values().iterator(); - while (it.hasNext()) { - ClaimedResidence res = it.next(); - if (res.getOwner().equalsIgnoreCase(owner)) { - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, - player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - removeChunkList(res.getName()); - it.remove(); - } else { - this.removeAllByOwner(player, owner, res.subzones); - } - } - } - - public void removeAllByOwner(String owner) { - this.removeAllByOwner(null, owner, residences); - } - - public void removeAllFromWorld(CommandSender sender, String world) { - int count = 0; - Iterator it = residences.values().iterator(); - while (it.hasNext()) { - ClaimedResidence next = it.next(); - if (next.getWorld().equals(world)) { - it.remove(); - count++; - } - } - chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); - if (count == 0) { - sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW - + world); - } else { - sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count - + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); - } - } - - public void removeChunkList(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) != null) { - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.remove(name); - chunkResidences.get(world).put(chunk, ress); - } - } - } - } - - public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); - if (res != null) { - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, - player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - residences.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("ResidenceRemove", - ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } - } - // Residence.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now - Residence.getRentManager().removeRentable(name); - - } else { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidResidence")); - } - } - } - - public void removeResidence(String name) { - this.removeResidence(null, name, true); - } - - public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - ClaimedResidence res = this.getByName(oldName); - if (res == null) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return false; - } - if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (res.getParent() == null) { - if (residences.containsKey(newName)) { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", - ChatColor.YELLOW + newName + ChatColor.RED)); - } - return false; - } - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - Residence.getServ().getPluginManager().callEvent(resevent); - removeChunkList(oldName); - residences.put(newName, res); - residences.remove(oldName); - calculateChunks(newName); - if (Residence.getConfigManager().useLeases()) { - Residence.getLeaseManager().updateLeaseName(oldName, newName); - } - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().updateRentableName(oldName, newName); - } - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase( - "ResidenceRename", - ChatColor.YELLOW + oldName + ChatColor.GREEN + "." - + ChatColor.YELLOW + newName + ChatColor.GREEN)); - } - return true; - } else { - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); - return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - } - } else { - if (player != null) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } - } - - public boolean renameResidence(String oldName, String newName) { - return this.renameResidence(null, oldName, newName, true); - } - - public Map save() { - Map worldmap = new LinkedHashMap(); - for (World world : Residence.getServ().getWorlds()) { - Map resmap = new LinkedHashMap(); - for (Entry res : residences.entrySet()) { - if (res.getValue().getWorld().equals(world.getName())) { - try { - resmap.put(res.getKey(), res.getValue().save()); - } catch (Exception ex) { - System.out.println("[Residence] Failed to save residence (" + res.getKey() - + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, - ex); - } - } - } - worldmap.put(world.getName(), resmap); - } - return worldmap; - } } diff --git a/src/main/java/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/main/java/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index e7578c6..8ef3116 100644 --- a/src/main/java/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/main/java/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -29,12 +29,26 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager; */ public class ResidencePermissions extends FlagPermissions { + protected String owner; + + protected String world; + protected ClaimedResidence residence; + + public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { + this(res); + owner = creator; + world = inworld; + } + + private ResidencePermissions(ClaimedResidence res) { + residence = res; + } + public static ResidencePermissions load(ClaimedResidence res, Map root) throws Exception { ResidencePermissions newperms = new ResidencePermissions(res); newperms.owner = (String) root.get("Owner"); - if (newperms.owner == null) { + if (newperms.owner == null) newperms.owner = (String) root.get("OwnerLastKnownName"); - } if (newperms.owner == null) { Residence.getLog().warning("发现未知所有者的领地,转换为Server Land..."); newperms.owner = "Server Land"; @@ -55,21 +69,6 @@ public class ResidencePermissions extends FlagPermissions { return newperms; } - protected String owner; - protected String world; - - protected ClaimedResidence residence; - - private ResidencePermissions(ClaimedResidence res) { - residence = res; - } - - public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { - this(res); - owner = creator; - world = inworld; - } - public void applyDefaultFlags() { PermissionManager gm = Residence.getPermissionManager(); PermissionGroup group = gm.getGroup(owner, world); @@ -77,33 +76,25 @@ public class ResidencePermissions extends FlagPermissions { Set> dcflags = group.getDefaultCreatorFlags(); Set>> dgflags = group.getDefaultGroupFlags(); this.applyGlobalDefaults(); - for (Entry next : dflags) { - if (this.checkValidFlag(next.getKey(), true)) { - if (next.getValue()) { + for (Entry next : dflags) + if (this.checkValidFlag(next.getKey(), true)) + if (next.getValue()) this.setFlag(next.getKey(), FlagState.TRUE); - } else { + else this.setFlag(next.getKey(), FlagState.FALSE); - } - } - } - for (Entry next : dcflags) { - if (this.checkValidFlag(next.getKey(), false)) { - if (next.getValue()) { + for (Entry next : dcflags) + if (this.checkValidFlag(next.getKey(), false)) + if (next.getValue()) this.setPlayerFlag(owner, next.getKey(), FlagState.TRUE); - } else { + else this.setPlayerFlag(owner, next.getKey(), FlagState.FALSE); - } - } - } for (Entry> entry : dgflags) { Map value = entry.getValue(); - for (Entry flag : value.entrySet()) { - if (flag.getValue()) { + for (Entry flag : value.entrySet()) + if (flag.getValue()) this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - } else { + else this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } } } @@ -111,121 +102,65 @@ public class ResidencePermissions extends FlagPermissions { if (this.hasResidencePermission(player, true) || resadmin) { this.applyDefaultFlags(); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("FlagsDefault")); - } else { + } else player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("NoPermission")); - } } public void applyGlobalDefaults() { this.clearFlags(); FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags(); - Map gGD = Residence.getConfigManager() - .getGlobalGroupDefaultFlags(); - for (Entry entry : gRD.cuboidFlags.entrySet()) { - if (entry.getValue()) { + Map gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags(); + for (Entry entry : gRD.cuboidFlags.entrySet()) + if (entry.getValue()) this.setFlag(entry.getKey(), FlagState.TRUE); - } else { + else this.setFlag(entry.getKey(), FlagState.FALSE); - } - } - for (Entry entry : gCD.cuboidFlags.entrySet()) { - if (entry.getValue()) { + for (Entry entry : gCD.cuboidFlags.entrySet()) + if (entry.getValue()) this.setPlayerFlag(owner, entry.getKey(), FlagState.TRUE); - } else { + else this.setPlayerFlag(owner, entry.getKey(), FlagState.FALSE); - } - } - for (Entry entry : gGD.entrySet()) { - for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { - if (flag.getValue()) { + for (Entry entry : gGD.entrySet()) + for (Entry flag : entry.getValue().cuboidFlags.entrySet()) + if (flag.getValue()) this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - } else { + else this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } - } } public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { if (player != null) { if (!player.getName().equals(owner) && !resadmin) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } - } else { + } else resadmin = true; - } PermissionGroup group = Residence.getPermissionManager().getGroup(owner, world); - for (Entry flag : list.cuboidFlags.entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { + for (Entry flag : list.cuboidFlags.entrySet()) + if (group.hasFlagAccess(flag.getKey()) || resadmin) this.cuboidFlags.put(flag.getKey(), flag.getValue()); - } else { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("FlagSetDeny", - ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); - } - } - for (Entry> plists : list.playerFlags.entrySet()) { - for (Entry flag : plists.getValue().entrySet()) { + else if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + for (Entry> plists : list.playerFlags.entrySet()) + for (Entry flag : plists.getValue().entrySet()) if (group.hasFlagAccess(flag.getKey()) || resadmin) { - if (!this.playerFlags.containsKey(plists.getKey())) { - this.playerFlags.put(plists.getKey(), - Collections.synchronizedMap(new HashMap())); - } + if (!this.playerFlags.containsKey(plists.getKey())) + this.playerFlags.put(plists.getKey(), Collections.synchronizedMap(new HashMap())); this.playerFlags.get(plists.getKey()).put(flag.getKey(), flag.getValue()); - } else { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("FlagSetDeny", - ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); - } - } - } - for (Entry> glists : list.groupFlags.entrySet()) { - for (Entry flag : glists.getValue().entrySet()) { + } else if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + for (Entry> glists : list.groupFlags.entrySet()) + for (Entry flag : glists.getValue().entrySet()) if (group.hasFlagAccess(flag.getKey()) || resadmin) { - if (!this.groupFlags.containsKey(glists.getKey())) { - this.groupFlags.put(glists.getKey(), - Collections.synchronizedMap(new HashMap())); - } + if (!this.groupFlags.containsKey(glists.getKey())) + this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); - } else { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("FlagSetDeny", - ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); - } - } - } - if (player != null) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("PermissionsApply")); - } - } - - private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { - if (!checkValidFlag(flag, globalflag)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag")); - return false; - } - if (state == FlagState.INVALID) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidFlagState")); - return false; - } - if (!resadmin) { - if (!this.hasResidencePermission(player, false)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (!hasFlagAccess(owner, flag)) { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("OwnerNoPermission")); - return false; - } - } - return true; + } else if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("PermissionsApply")); } public void fixNames() { @@ -233,9 +168,8 @@ public class ResidencePermissions extends FlagPermissions { Iterator>> it = playerFlags.entrySet().iterator(); while (it.hasNext()) { String name = it.next().getKey(); - if (!name.equals(name.toLowerCase())) { + if (!name.equals(name.toLowerCase())) fixNames.add(name); - } } for (String name : fixNames) { Map get = playerFlags.get(name); @@ -254,8 +188,7 @@ public class ResidencePermissions extends FlagPermissions { @Override public boolean groupHas(String group, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, - group, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); @@ -264,8 +197,7 @@ public class ResidencePermissions extends FlagPermissions { @Override public boolean has(String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, - FlagType.RESIDENCE, null, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); @@ -273,14 +205,7 @@ public class ResidencePermissions extends FlagPermissions { } public boolean hasApplicableFlag(String player, String flag) { - return super.inheritanceIsPlayerSet(player, flag) - || super.inheritanceIsGroupSet(Residence.getPermissionManager() - .getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag); - } - - private boolean hasFlagAccess(String player, String flag) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player, world); - return group.hasFlagAccess(flag); + return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag); } public boolean hasResidencePermission(Player player, boolean requireOwner) { @@ -298,8 +223,7 @@ public class ResidencePermissions extends FlagPermissions { } if (requireOwner) return (owner.equalsIgnoreCase(player.getName())); - return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player - .getName())); + return (playerHas(player.getName(), "admin", false) || owner.equalsIgnoreCase(player.getName())); } public boolean playerHas(String player, String flag, boolean def) { @@ -308,8 +232,7 @@ public class ResidencePermissions extends FlagPermissions { @Override public boolean playerHas(String player, String world, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, - player, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); @@ -318,8 +241,7 @@ public class ResidencePermissions extends FlagPermissions { public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", - ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -332,8 +254,7 @@ public class ResidencePermissions extends FlagPermissions { public boolean removeAllPlayerFlags(Player player, String targetPlayer, boolean resadmin) { if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", - ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -357,8 +278,7 @@ public class ResidencePermissions extends FlagPermissions { return this.setFlagGroup(player, flag, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); if (checkCanSetFlag(player, flag, state, true, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, - ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -372,8 +292,7 @@ public class ResidencePermissions extends FlagPermissions { @Override public boolean setFlag(String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, - ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -384,11 +303,9 @@ public class ResidencePermissions extends FlagPermissions { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); boolean changed = false; - for (String flag : flags) { - if (this.setFlag(player, flag, state, resadmin)) { + for (String flag : flags) + if (this.setFlag(player, flag, state, resadmin)) changed = true; - } - } return changed; } return false; @@ -398,11 +315,9 @@ public class ResidencePermissions extends FlagPermissions { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); boolean changed = false; - for (String flag : flags) { - if (this.setGroupFlag(player, group, flag, state, resadmin)) { + for (String flag : flags) + if (this.setGroupFlag(player, group, flag, state, resadmin)) changed = true; - } - } return changed; } return false; @@ -412,11 +327,9 @@ public class ResidencePermissions extends FlagPermissions { if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); boolean changed = false; - for (String flag : flags) { - if (this.setPlayerFlag(player, target, flag, state, resadmin)) { + for (String flag : flags) + if (this.setPlayerFlag(player, target, flag, state, resadmin)) changed = true; - } - } return changed; } return false; @@ -427,31 +340,26 @@ public class ResidencePermissions extends FlagPermissions { if (validFlagGroups.containsKey(flag)) return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { + if (checkCanSetFlag(player, flag, state, false, resadmin)) if (Residence.getPermissionManager().hasGroup(group)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, - ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase("FlagSet")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); return true; } } else { - player.sendMessage(ChatColor.RED - + Residence.getLanguage().getPhrase("InvalidGroup")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup")); return false; } - } return false; } @Override public boolean setGroupFlag(String group, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, - ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -462,9 +370,8 @@ public class ResidencePermissions extends FlagPermissions { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); Residence.getServ().getPluginManager().callEvent(ownerchange); owner = newOwner; - if (resetFlags) { + if (resetFlags) this.applyDefaultFlags(); - } } public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin) { @@ -472,8 +379,7 @@ public class ResidencePermissions extends FlagPermissions { return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); if (checkCanSetFlag(player, flag, state, false, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, - ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; @@ -487,11 +393,37 @@ public class ResidencePermissions extends FlagPermissions { @Override public boolean setPlayerFlag(String player, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, - ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; return super.setPlayerFlag(player, flag, state); } + + private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { + if (!checkValidFlag(flag, globalflag)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag")); + return false; + } + if (state == FlagState.INVALID) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlagState")); + return false; + } + if (!resadmin) { + if (!this.hasResidencePermission(player, false)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (!hasFlagAccess(owner, flag)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); + return false; + } + } + return true; + } + + private boolean hasFlagAccess(String player, String flag) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player, world); + return group.hasFlagAccess(flag); + } }