diff --git a/src/main/java/cn/citycraft/Residence/listeners/ResidencePlayerListener.java b/src/main/java/cn/citycraft/Residence/listeners/ResidencePlayerListener.java index b9c3820..433984a 100644 --- a/src/main/java/cn/citycraft/Residence/listeners/ResidencePlayerListener.java +++ b/src/main/java/cn/citycraft/Residence/listeners/ResidencePlayerListener.java @@ -2,7 +2,6 @@ * To change this template, choose Tools | Templates and open the template in * the editor. */ - package cn.citycraft.Residence.listeners; import java.util.ArrayList; @@ -53,501 +52,497 @@ import cn.citycraft.Residence.permissions.PermissionGroup; @SuppressWarnings("deprecation") public class ResidencePlayerListener implements Listener { - protected boolean chatenabled; - protected Map currentRes; - protected Map lastOutsideLoc; - protected Map lastUpdate; - protected int minUpdateTime; - protected List playerToggleChat; - ResidenceMain plugin; + protected boolean chatenabled; + protected Map currentRes; + protected Map lastOutsideLoc; + protected Map lastUpdate; + protected int minUpdateTime; + protected List playerToggleChat; + ResidenceMain plugin; - public ResidencePlayerListener(final ResidenceMain plugin) { - this.plugin = plugin; - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); - minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = plugin.getConfigManager().chatEnabled(); - for (final Player player : Bukkit.getServer().getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } - } + public ResidencePlayerListener(final ResidenceMain plugin) { + this.plugin = plugin; + currentRes = new HashMap<>(); + lastUpdate = new HashMap<>(); + lastOutsideLoc = new HashMap<>(); + playerToggleChat = new ArrayList<>(); + minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = plugin.getConfigManager().chatEnabled(); + for (final Player player : Bukkit.getServer().getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } + } - public String getCurrentResidenceName(final String player) { - return currentRes.get(player); - } + public String getCurrentResidenceName(final String player) { + return currentRes.get(player); + } - public void handleNewLocation(final Player player, final Location loc, final boolean move) { - final String pname = player.getName(); + public void handleNewLocation(final Player player, final Location loc, final boolean move) { + final String pname = player.getName(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - String areaname = null; - boolean chatchange = false; - String subzone = null; - if (res != null) { - areaname = plugin.getResidenceManager().getNameByLoc(loc); - while (res.getSubzoneByLoc(player.getLocation()) != null) { - subzone = res.getSubzoneNameByLoc(player.getLocation()); - res = res.getSubzoneByLoc(player.getLocation()); - areaname = areaname + "." + subzone; - } - } - ClaimedResidence ResOld = null; - if (currentRes.containsKey(pname)) { - ResOld = plugin.getResidenceManager().getByName(currentRes.get(pname)); - if (ResOld == null) { - currentRes.remove(pname); - } - } - if (res == null) { - lastOutsideLoc.put(pname, loc); - if (ResOld != null) { - final String leave = ResOld.getLeaveMessage(); - final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - plugin.getServer().getPluginManager().callEvent(chgEvent); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + String areaname = null; + boolean chatchange = false; + String subzone = null; + if (res != null) { + areaname = plugin.getResidenceManager().getNameByLoc(loc); + while (res.getSubzoneByLoc(player.getLocation()) != null) { + subzone = res.getSubzoneNameByLoc(player.getLocation()); + res = res.getSubzoneByLoc(player.getLocation()); + areaname = areaname + "." + subzone; + } + } + ClaimedResidence ResOld = null; + if (currentRes.containsKey(pname)) { + ResOld = plugin.getResidenceManager().getByName(currentRes.get(pname)); + if (ResOld == null) { + currentRes.remove(pname); + } + } + if (res == null) { + lastOutsideLoc.put(pname, loc); + if (ResOld != null) { + final String leave = ResOld.getLeaveMessage(); + final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + plugin.getServer().getPluginManager().callEvent(chgEvent); - if (leave != null && !leave.equals("")) { - if (plugin.getConfigManager().useActionBar()) { - ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); - } else { - player.sendMessage(ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - currentRes.remove(pname); - plugin.getChatManager().removeFromChannel(pname); - } - return; - } - if (move && !res.getPermissions().playerHas(pname, "move", true) && !plugin.isResAdminOn(player) && !player.hasPermission("residence.admin.move") - && !player.hasPermission("residence.admin.tp")) { - final Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) { - player.teleport(lastLoc); - } else { - player.teleport(res.getOutsideFreeLoc(loc)); - } - player.sendMessage(ChatColor.RED + plugin.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) { - chatchange = true; - } - ClaimedResidence chgFrom = null; - if (ResOld != res && ResOld != null) { - final String leave = ResOld.getLeaveMessage(); - chgFrom = ResOld; + if (leave != null && !leave.equals("")) { + if (plugin.getConfigManager().useActionBar()) { + ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); + } else { + player.sendMessage(ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + currentRes.remove(pname); + plugin.getChatManager().removeFromChannel(pname); + } + return; + } + if (move && !res.getPermissions().playerHas(pname, "move", true) && !plugin.isResAdminOn(player) && !player.hasPermission("residence.admin.move")) { + final Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) { + player.teleport(lastLoc); + } else { + player.teleport(res.getOutsideFreeLoc(loc)); + } + player.sendMessage(ChatColor.RED + plugin.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) { + chatchange = true; + } + ClaimedResidence chgFrom = null; + if (ResOld != res && ResOld != null) { + final String leave = ResOld.getLeaveMessage(); + chgFrom = ResOld; - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (plugin.getConfigManager().useActionBar()) { - ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); - } else { - player.sendMessage(ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - } - final String enterMessage = res.getEnterMessage(); - final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); - plugin.getServer().getPluginManager().callEvent(chgEvent); + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { + if (plugin.getConfigManager().useActionBar()) { + ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); + } else { + player.sendMessage(ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + } + final String enterMessage = res.getEnterMessage(); + final ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); + plugin.getServer().getPluginManager().callEvent(chgEvent); - if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - if (plugin.getConfigManager().useActionBar()) { - ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, areaname, res, enterMessage)); - } else { - player.sendMessage(ChatColor.YELLOW + insertMessages(player, areaname, res, enterMessage)); - } - } - } - if (chatchange && chatenabled) { - plugin.getChatManager().setChannel(pname, areaname); - } - } + if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { + if (plugin.getConfigManager().useActionBar()) { + ActionBar.send(player, ChatColor.YELLOW + insertMessages(player, areaname, res, enterMessage)); + } else { + player.sendMessage(ChatColor.YELLOW + insertMessages(player, areaname, res, enterMessage)); + } + } + } + if (chatchange && chatenabled) { + plugin.getChatManager().setChannel(pname, areaname); + } + } - public String insertMessages(final Player player, final String areaname, final ClaimedResidence res, String message) { - try { - message = message.replaceAll("%player", player.getName()); - message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", areaname); - message = ChatColor.translateAlternateColorCodes('&', message); - } catch (final Exception ex) { - return ""; - } - return message; - } + public String insertMessages(final Player player, final String areaname, final ClaimedResidence res, String message) { + try { + message = message.replaceAll("%player", player.getName()); + message = message.replaceAll("%owner", res.getPermissions().getOwner()); + message = message.replaceAll("%residence", areaname); + message = ChatColor.translateAlternateColorCodes('&', message); + } catch (final Exception ex) { + return ""; + } + return message; + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) { - final Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) { - return; - } - final String pname = player.getName(); - final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { - if (plugin.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - final FlagPermissions perms = plugin.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 + plugin.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) { + final Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) { + return; + } + final String pname = player.getName(); + final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { + if (plugin.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + } + final FlagPermissions perms = plugin.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 + plugin.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + } + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketFill(final PlayerBucketFillEvent event) { - final Player player = event.getPlayer(); - final String pname = player.getName(); - if (plugin.isResAdminOn(player)) { - return; - } - final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { - if (plugin.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - final boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasbucket) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketFill(final PlayerBucketFillEvent event) { + final Player player = event.getPlayer(); + final String pname = player.getName(); + if (plugin.isResAdminOn(player)) { + return; + } + final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { + if (plugin.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + } + final FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + final boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasbucket) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + } + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerChat(final AsyncPlayerChatEvent event) { - final String pname = event.getPlayer().getName(); - if (chatenabled && playerToggleChat.contains(pname)) { - final String area = currentRes.get(pname); - if (area != null) { - final ChatChannel channel = plugin.getChatManager().getChannel(area); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); - } - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerChat(final AsyncPlayerChatEvent event) { + final String pname = event.getPlayer().getName(); + if (chatenabled && playerToggleChat.contains(pname)) { + final String area = currentRes.get(pname); + if (area != null) { + final ChatChannel channel = plugin.getChatManager().getChannel(area); + if (channel != null) { + channel.chat(pname, event.getMessage()); + } + event.setCancelled(true); + } + } + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteract(final PlayerInteractEvent event) { - final Player player = event.getPlayer(); - final Material heldItem = player.getItemInHand().getType(); - final Block block = event.getClickedBlock(); - if (block == null) { - return; - } - final 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)) { - final int typeId = player.getItemInHand().getTypeId(); - if (typeId != plugin.getConfigManager().getSelectionTooldID() && typeId != plugin.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) { - return; - } - } - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - final String world = player.getWorld().getName(); - final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); - final boolean resadmin = plugin.isResAdminOn(player); - if (event.getAction() == Action.PHYSICAL) { - if (!resadmin) { - final boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - final boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { - event.setCancelled(true); - return; - } - } - 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; - } - return; - } - if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getSelectionTooldID()) { - final Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { - return; - } - } - final PermissionGroup group = plugin.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 (event.getAction() == Action.LEFT_CLICK_BLOCK) { - final Location loc = block.getLocation(); - plugin.getSelectionManager().placeLoc1(player, loc); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," - + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - final Location loc = block.getLocation(); - plugin.getSelectionManager().placeLoc2(player, loc); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," - + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - } - } - } - if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getInfoToolID()) { - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - final Location loc = block.getLocation(); - final String res = plugin.getResidenceManager().getNameByLoc(loc); - if (res != null) { - plugin.getResidenceManager().printAreaInfo(res, player); - event.setCancelled(true); - } else { - event.setCancelled(true); - player.sendMessage(plugin.getLanguage().getPhrase("NoResHere")); - } - } - } - if (!resadmin) { - 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 - && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { - perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - event.setCancelled(true); - return; - } - } - } - if (plugin.isGt1_8()) { - if (heldItem == Material.ARMOR_STAND) { - perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - return; - } - } - } - } - } - if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - final boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - for (final 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 + plugin.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); - return; - } else { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - } - } - if (plugin.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) { - if (!perms.playerHas(player.getName(), world, "container", hasuse)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container")); - return; - } - } - if (plugin.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - } - } - } - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + final Material heldItem = player.getItemInHand().getType(); + final Block block = event.getClickedBlock(); + if (block == null) { + return; + } + final 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)) { + final int typeId = player.getItemInHand().getTypeId(); + if (typeId != plugin.getConfigManager().getSelectionTooldID() && typeId != plugin.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) { + return; + } + } + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + final String world = player.getWorld().getName(); + final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); + final boolean resadmin = plugin.isResAdminOn(player); + if (event.getAction() == Action.PHYSICAL) { + if (!resadmin) { + final boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + final boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { + event.setCancelled(true); + return; + } + } + 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; + } + return; + } + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getSelectionTooldID()) { + final Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + return; + } + } + final PermissionGroup group = plugin.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 (event.getAction() == Action.LEFT_CLICK_BLOCK) { + final Location loc = block.getLocation(); + plugin.getSelectionManager().placeLoc1(player, loc); + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + event.setCancelled(true); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Location loc = block.getLocation(); + plugin.getSelectionManager().placeLoc2(player, loc); + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + } + } + } + if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getInfoToolID()) { + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + final Location loc = block.getLocation(); + final String res = plugin.getResidenceManager().getNameByLoc(loc); + if (res != null) { + plugin.getResidenceManager().printAreaInfo(res, player); + event.setCancelled(true); + } else { + event.setCancelled(true); + player.sendMessage(plugin.getLanguage().getPhrase("NoResHere")); + } + } + } + if (!resadmin) { + 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 + && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + event.setCancelled(true); + return; + } + } + } + if (plugin.isGt1_8()) { + if (heldItem == Material.ARMOR_STAND) { + perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + return; + } + } + } + } + } + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + final boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + for (final 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 + plugin.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); + return; + } else { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + } + } + if (plugin.getConfigManager().getCustomContainers().contains(block.getTypeId())) { + if (!perms.playerHas(player.getName(), world, "container", hasuse)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container")); + return; + } + } + if (plugin.getConfigManager().getCustomBothClick().contains(block.getTypeId())) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (plugin.getConfigManager().getCustomRightClick().contains(block.getTypeId())) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "use")); + } + } + } + } + } + } + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractEntity(final PlayerInteractEntityEvent event) { - final Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) { - return; - } - final Entity ent = event.getRightClicked(); - /* Trade */ - if (ent.getType() == EntityType.VILLAGER) { - final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractEntity(final PlayerInteractEntityEvent event) { + final Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) { + return; + } + final Entity ent = event.getRightClicked(); + /* Trade */ + if (ent.getType() == EntityType.VILLAGER) { + final ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); - if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - } - } + if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + } + /* Container - ItemFrame protection */ + final Material heldItem = player.getItemInHand().getType(); + if (!(ent instanceof Hanging)) { + return; + } + final Hanging hanging = (Hanging) ent; + if (hanging.getType() != EntityType.ITEM_FRAME) { + return; + } + final FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); + final String world = player.getWorld().getName(); + final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); + if (!plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container")); + } + } - /* Container - ItemFrame protection */ - final Material heldItem = player.getItemInHand().getType(); - if (!(ent instanceof Hanging)) { - return; - } - final Hanging hanging = (Hanging) ent; - if (hanging.getType() != EntityType.ITEM_FRAME) { - return; - } - final FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); - final String world = player.getWorld().getName(); - final String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); - if (!plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("FlagDeny", "container")); - } - } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerJoin(final PlayerJoinEvent event) { + final Player player = event.getPlayer(); + lastUpdate.put(player.getName(), 0L); + if (plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.turnResAdminOn(player); + } + handleNewLocation(player, player.getLocation(), false); + } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(final PlayerJoinEvent event) { - final Player player = event.getPlayer(); - lastUpdate.put(player.getName(), 0L); - if (plugin.getPermissionManager().isResidenceAdmin(player)) { - plugin.turnResAdminOn(player); - } - handleNewLocation(player, player.getLocation(), false); - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerMove(final PlayerMoveEvent event) { + final Player player = event.getPlayer(); + if (player == null) { + return; + } + final long now = System.currentTimeMillis(); + if (!lastUpdate.containsKey(player.getName())) { + lastUpdate.put(player.getName(), now); + return; + } + final long last = lastUpdate.get(player.getName()); + if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) { + return; + } + lastUpdate.put(player.getName(), now); + if (event.getFrom().getWorld() == event.getTo().getWorld()) { + if (event.getFrom().distance(event.getTo()) == 0) { + return; + } + } + handleNewLocation(player, event.getTo(), true); + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerMove(final PlayerMoveEvent event) { - final Player player = event.getPlayer(); - if (player == null) { - return; - } - final long now = System.currentTimeMillis(); - if (!lastUpdate.containsKey(player.getName())) { - lastUpdate.put(player.getName(), now); - return; - } - final long last = lastUpdate.get(player.getName()); - if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) { - return; - } - lastUpdate.put(player.getName(), now); - if (event.getFrom().getWorld() == event.getTo().getWorld()) { - if (event.getFrom().distance(event.getTo()) == 0) { - return; - } - } - handleNewLocation(player, event.getTo(), true); - } + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerQuit(final PlayerQuitEvent event) { + final String pname = event.getPlayer().getName(); + currentRes.remove(pname); + lastUpdate.remove(pname); + lastOutsideLoc.remove(pname); + plugin.getChatManager().removeFromChannel(pname); + } - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerQuit(final PlayerQuitEvent event) { - final String pname = event.getPlayer().getName(); - currentRes.remove(pname); - lastUpdate.remove(pname); - lastOutsideLoc.remove(pname); - plugin.getChatManager().removeFromChannel(pname); - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerSpawn(final PlayerRespawnEvent event) { + Location loc = event.getRespawnLocation(); + final Boolean bed = event.isBedSpawn(); + final Player player = event.getPlayer(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res == null) { + return; + } + if (res.getPermissions().playerHas(player.getName(), "move", true)) { + return; + } + if (bed) { + loc = player.getWorld().getSpawnLocation(); + } + res = plugin.getResidenceManager().getByLoc(loc); + if (res != null) { + if (!res.getPermissions().playerHas(player.getName(), "move", true)) { + loc = res.getOutsideFreeLoc(loc); + } + } + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoSpawn")); + event.setRespawnLocation(loc); + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerSpawn(final PlayerRespawnEvent event) { - Location loc = event.getRespawnLocation(); - final Boolean bed = event.isBedSpawn(); - final Player player = event.getPlayer(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) { - return; - } - if (res.getPermissions().playerHas(player.getName(), "move", true)) { - return; - } - if (bed) { - loc = player.getWorld().getSpawnLocation(); - } - res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) { - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { - loc = res.getOutsideFreeLoc(loc); - } - } - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoSpawn")); - event.setRespawnLocation(loc); - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTeleport(final PlayerTeleportEvent event) { + final Location loc = event.getTo(); + final Player player = event.getPlayer(); + final ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null) { + if (plugin.isResAdminOn(player) || ((res.getPermissions().playerHas(player.getName(), "tp", true) || player.hasPermission("residence.admin.tp")) + && (res.getPermissions().playerHas(player.getName(), "move", true) || player.hasPermission("residence.admin.move")))) { + handleNewLocation(player, loc, false); + } else { + final String areaname = res.getName(); + event.setCancelled(true); + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportDeny", areaname)); + } + } + } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerTeleport(final PlayerTeleportEvent event) { - final Location loc = event.getTo(); - final Player player = event.getPlayer(); - final ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) { - if (plugin.isResAdminOn(player) || ((res.getPermissions().playerHas(player.getName(), "tp", true) || player.hasPermission("residence.admin.tp")) - && (res.getPermissions().playerHas(player.getName(), "move", true) || player.hasPermission("residence.admin.move")))) { - handleNewLocation(player, loc, false); - } else { - final String areaname = res.getName(); - event.setCancelled(true); - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportDeny", areaname)); - return; - } - } - } + public void tooglePlayerResidenceChat(final Player player) { + final String pname = player.getName(); + if (playerToggleChat.contains(pname)) { + playerToggleChat.remove(pname); + player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); + } else { + playerToggleChat.add(pname); + player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); + } + } - public void tooglePlayerResidenceChat(final Player player) { - final String pname = player.getName(); - if (playerToggleChat.contains(pname)) { - playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); - } else { - playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); - } - } + private boolean isCanUseEntity(final Material mat, final Block block) { + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + } - private boolean isCanUseEntity(final Material mat, final Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); - } + private boolean isCanUseEntity_BothClick(final Material mat, final Block block) { + return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE + || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG + || plugin.getConfigManager().getCustomBothClick().contains(block.getTypeId()) + || (plugin.isGt1_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)); + } - private boolean isCanUseEntity_BothClick(final Material mat, final Block block) { - return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE - || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG - || plugin.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())) - || (plugin.isGt1_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)); - } + private boolean isCanUseEntity_RClickOnly(final Material mat, final 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 || plugin.getConfigManager().getCustomRightClick().contains(block.getTypeId()); + } - private boolean isCanUseEntity_RClickOnly(final Material mat, final 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 || plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); - } - - private boolean isContainer(final Material mat, final Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") - || plugin.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId())); - } + private boolean isContainer(final Material mat, final Block block) { + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") + || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); + } } 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 092e4c0..70a7610 100644 --- a/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/main/java/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -33,930 +33,929 @@ import cn.citycraft.Residence.text.help.InformationPager; */ public class ClaimedResidence { - protected Map areas; + protected Map areas; + protected ResidenceBank bank; + protected ResidenceItemList blacklist; + protected String enterMessage; + protected ResidenceItemList ignorelist; + protected String leaveMessage; + protected ClaimedResidence parent; + protected ResidencePermissions perms; + protected ResidenceMain plugin; + protected Map subzones; + protected Location tpLoc; - protected ResidenceBank bank; - protected ResidenceItemList blacklist; - protected String enterMessage; - protected ResidenceItemList ignorelist; - protected String leaveMessage; - protected ClaimedResidence parent; - protected ResidencePermissions perms; - protected ResidenceMain plugin; - protected Map subzones; - protected Location tpLoc; + public ClaimedResidence(final ResidenceMain plugin, final String creationWorld) { + this(plugin, "Server Land", creationWorld); + } - public ClaimedResidence(final ResidenceMain plugin, final String creationWorld) { - this(plugin, "Server Land", creationWorld); - } + public ClaimedResidence(final ResidenceMain plugin, final String creator, final String creationWorld) { + this(plugin); + perms = new ResidencePermissions(plugin, this, creator, creationWorld); + } - public ClaimedResidence(final ResidenceMain plugin, final String creator, final String creationWorld) { - this(plugin); - perms = new ResidencePermissions(plugin, this, creator, creationWorld); - } + public ClaimedResidence(final ResidenceMain plugin, final String creator, final String creationWorld, final ClaimedResidence parentResidence) { + this(plugin, creator, creationWorld); + parent = parentResidence; + } - public ClaimedResidence(final ResidenceMain plugin, final String creator, final String creationWorld, final ClaimedResidence parentResidence) { - this(plugin, creator, creationWorld); - parent = parentResidence; - } + private ClaimedResidence(final ResidenceMain plugin) { + this.plugin = plugin; + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(plugin, this); + blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); + } - private ClaimedResidence(final ResidenceMain plugin) { - this.plugin = plugin; - subzones = new HashMap(); - areas = new HashMap(); - bank = new ResidenceBank(plugin, this); - blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); - } + @SuppressWarnings({"unchecked", "rawtypes"}) + public static ClaimedResidence load(final ResidenceMain plugin, final Map root, final ClaimedResidence parent) throws Exception { + final ClaimedResidence res = new ClaimedResidence(plugin); + 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(plugin, res, (Map) root.get("BlackList")); + } + if (root.containsKey("IgnoreList")) { + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); + } + final Map areamap = (Map) root.get("Areas"); + res.perms = ResidencePermissions.load(plugin, res, (Map) root.get("Permissions")); + final World world = Bukkit.getServer().getWorld(res.perms.getWorld()); + if (world == null) { + throw new Exception("Cant Find World: " + res.perms.getWorld()); + } + for (final Entry map : areamap.entrySet()) { + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } + final Map subzonemap = (Map) root.get("Subzones"); + for (final Entry map : subzonemap.entrySet()) { + final ClaimedResidence subres = ClaimedResidence.load(plugin, (Map) map.getValue(), res); + if (plugin.getConfigManager().flagsInherit()) { + subres.getPermissions().setParent(res.getPermissions()); + } + res.subzones.put(map.getKey(), subres); + } + res.parent = parent; + final 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; + } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static ClaimedResidence load(final ResidenceMain plugin, final Map root, final ClaimedResidence parent) throws Exception { - final ClaimedResidence res = new ClaimedResidence(plugin); - 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(plugin, res, (Map) root.get("BlackList")); - } - if (root.containsKey("IgnoreList")) { - res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); - } - final Map areamap = (Map) root.get("Areas"); - res.perms = ResidencePermissions.load(plugin, res, (Map) root.get("Permissions")); - final World world = Bukkit.getServer().getWorld(res.perms.getWorld()); - if (world == null) { - throw new Exception("Cant Find World: " + res.perms.getWorld()); - } - for (final Entry map : areamap.entrySet()) { - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); - } - final Map subzonemap = (Map) root.get("Subzones"); - for (final Entry map : subzonemap.entrySet()) { - final ClaimedResidence subres = ClaimedResidence.load(plugin, (Map) map.getValue(), res); - if (plugin.getConfigManager().flagsInherit()) { - subres.getPermissions().setParent(res.getPermissions()); - } - res.subzones.put(map.getKey(), subres); - } - res.parent = parent; - final 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(final CuboidArea area, final String name) { + return addArea(null, area, name, true); + } - public boolean addArea(final CuboidArea area, final String name) { - return addArea(null, area, name, true); - } + public boolean addArea(final Player player, final CuboidArea area, final String name, final boolean resadmin) { + if (!plugin.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (areas.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaExists")); + } + return false; + } + if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && getParent() == null) { + boolean inside = false; + for (final 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 + plugin.getLanguage().getPhrase("AreaDiffWorld")); + } + return false; + } + if (parent == null) { + final String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); + if (collideResidence != null) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + } + return false; + } + } else { + final String[] szs = parent.listSubzones(); + for (final String sz : szs) { + final ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + } + return false; + } + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + if (parent != null) { + if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNotWithinParent")); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ParentNoPermission")); + return false; + } + } + final PermissionGroup group = plugin.getPermissionManager().getGroup(player); + if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaMaxPhysical")); + return false; + } + if (!group.inLimits(area)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSizeLimit")); + return false; + } + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + return false; + } + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + return false; + } + if (parent == null && plugin.getConfigManager().enableEconomy()) { + final int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); + if (!TransactionManager.chargeEconomyMoney(plugin, player, chargeamount)) { + return false; + } + } + } + plugin.getResidenceManager().removeChunkList(getName()); + areas.put(name, area); + plugin.getResidenceManager().calculateChunks(getName()); + if (player != null) { + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); + } + return true; + } - public boolean addArea(final Player player, final CuboidArea area, final String name, final boolean resadmin) { - if (!plugin.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (areas.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaExists")); - } - return false; - } - if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && getParent() == null) { - boolean inside = false; - for (final 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 + plugin.getLanguage().getPhrase("AreaDiffWorld")); - } - return false; - } - if (parent == null) { - final String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); - if (collideResidence != null) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); - } - return false; - } - } else { - final String[] szs = parent.listSubzones(); - for (final String sz : szs) { - final ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); - } - return false; - } - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNotWithinParent")); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ParentNoPermission")); - return false; - } - } - final PermissionGroup group = plugin.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaMaxPhysical")); - return false; - } - if (!group.inLimits(area)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSizeLimit")); - return false; - } - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); - return false; - } - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); - return false; - } - if (parent == null && plugin.getConfigManager().enableEconomy()) { - final int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); - if (!TransactionManager.chargeEconomyMoney(plugin, player, chargeamount)) { - return false; - } - } - } - plugin.getResidenceManager().removeChunkList(getName()); - areas.put(name, area); - plugin.getResidenceManager().calculateChunks(getName()); - if (player != null) { - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); - } - return true; - } + public boolean addSubzone(final Player player, final Location loc1, final Location loc2, final String name, final boolean resadmin) { + if (player == null) { + return this.addSubzone(null, "Server Land", loc1, loc2, name, resadmin); + } else { + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + } - public boolean addSubzone(final Player player, final Location loc1, final Location loc2, final String name, final boolean resadmin) { - if (player == null) { - return this.addSubzone(null, "Server Land", loc1, loc2, name, resadmin); - } else { - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - } + public boolean addSubzone(final Player player, final String owner, final Location loc1, final Location loc2, final String name, final boolean resadmin) { + if (!plugin.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (!(containsLoc(loc1) && containsLoc(loc2))) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneSelectInside")); + } + return false; + } + if (subzones.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.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 + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + } + final PermissionGroup group = plugin.getPermissionManager().getGroup(player); + if (getZoneDepth() >= group.getMaxSubzoneDepth()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneMaxDepth")); + return false; + } + } + final CuboidArea newArea = new CuboidArea(loc1, loc2); + final Set> set = subzones.entrySet(); + for (final Entry resEntry : set) { + final ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); + } + return false; + } + } + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(plugin, owner, perms.getWorld(), this); + newres.addArea(player, newArea, name, resadmin); + } else { + newres = new ClaimedResidence(plugin, owner, perms.getWorld(), this); + newres.addArea(newArea, name); + } + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + final PermissionGroup group = plugin.getPermissionManager().getGroup(player); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (plugin.getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } + subzones.put(name, newres); + if (player != null) { + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); + } + return true; + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); + } + return false; + } + } - public boolean addSubzone(final Player player, final String owner, final Location loc1, final Location loc2, final String name, final boolean resadmin) { - if (!plugin.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (!(containsLoc(loc1) && containsLoc(loc2))) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneSelectInside")); - } - return false; - } - if (subzones.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.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 + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - } - final PermissionGroup group = plugin.getPermissionManager().getGroup(player); - if (getZoneDepth() >= group.getMaxSubzoneDepth()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneMaxDepth")); - return false; - } - } - final CuboidArea newArea = new CuboidArea(loc1, loc2); - final Set> set = subzones.entrySet(); - for (final Entry resEntry : set) { - final ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); - } - return false; - } - } - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(plugin, owner, perms.getWorld(), this); - newres.addArea(player, newArea, name, resadmin); - } else { - newres = new ClaimedResidence(plugin, owner, perms.getWorld(), this); - newres.addArea(newArea, name); - } - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - final PermissionGroup group = plugin.getPermissionManager().getGroup(player); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (plugin.getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } - subzones.put(name, newres); - if (player != null) { - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); - } - return true; - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); - } - return false; - } - } + public boolean addSubzone(final String name, final Location loc1, final Location loc2) { + return this.addSubzone(null, loc1, loc2, name, true); + } - public boolean addSubzone(final String name, final Location loc1, final Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); - } + public boolean checkCollision(final CuboidArea area) { + final Set set = areas.keySet(); + for (final String key : set) { + final CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; + } - public boolean checkCollision(final CuboidArea area) { - final Set set = areas.keySet(); - for (final String key : set) { - final CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; - } + public boolean containsLoc(final Location loc) { + final Collection keys = areas.values(); + for (final CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (parent != null) { + return parent.containsLoc(loc); + } + return true; + } + } + return false; + } - public boolean containsLoc(final Location loc) { - final Collection keys = areas.values(); - for (final CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (parent != null) { - return parent.containsLoc(loc); - } - return true; - } - } - return false; - } + public CuboidArea getArea(final String name) { + return areas.get(name); + } - public CuboidArea getArea(final String name) { - return areas.get(name); - } + public CuboidArea[] getAreaArray() { + final CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (final CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; + } - public CuboidArea[] getAreaArray() { - final CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (final CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; - } + public CuboidArea getAreaByLoc(final Location loc) { + for (final CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; + } - public CuboidArea getAreaByLoc(final Location loc) { - for (final CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; - } + public int getAreaCount() { + return areas.size(); + } - public int getAreaCount() { - return areas.size(); - } + public String getAreaIDbyLoc(final Location loc) { + for (final Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) { + return area.getKey(); + } + } + return null; + } - public String getAreaIDbyLoc(final Location loc) { - for (final Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) { - return area.getKey(); - } - } - return null; - } + public String[] getAreaList() { + final String arealist[] = new String[areas.size()]; + int i = 0; + for (final Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; + } + return arealist; + } - public String[] getAreaList() { - final String arealist[] = new String[areas.size()]; - int i = 0; - for (final Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; - } + public ResidenceBank getBank() { + return bank; + } - public ResidenceBank getBank() { - return bank; - } + public String getEnterMessage() { + return enterMessage; + } - public String getEnterMessage() { - return enterMessage; - } + public ResidenceItemList getItemBlacklist() { + return blacklist; + } - public ResidenceItemList getItemBlacklist() { - return blacklist; - } + public ResidenceItemList getItemIgnoreList() { + return ignorelist; + } - public ResidenceItemList getItemIgnoreList() { - return ignorelist; - } + public String getLeaveMessage() { + return leaveMessage; + } - public String getLeaveMessage() { - return leaveMessage; - } + public String getName() { + return plugin.getResidenceManager().getNameByRes(this); + } - public String getName() { - return plugin.getResidenceManager().getNameByRes(this); - } + @SuppressWarnings("deprecation") + public Location getOutsideFreeLoc(final Location insideLoc) { + final int maxIt = 100; + final CuboidArea area = getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + final Location highLoc = area.getHighLoc(); + final Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); + boolean found = false; + int it = 0; + while (!found && it < maxIt) { + it++; + Location lowLoc; + newLoc.setX(newLoc.getBlockX() + 1); + 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) { + newLoc.setY(newLoc.getY() - 1); + lowLoc.setY(lowLoc.getY() - 1); + } + if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { + found = true; + } + } + if (found) { + return newLoc; + } else { + final World world = Bukkit.getServer().getWorld(perms.getWorld()); + if (world != null) { + return world.getSpawnLocation(); + } + return insideLoc; + } + } - @SuppressWarnings("deprecation") - public Location getOutsideFreeLoc(final Location insideLoc) { - final int maxIt = 100; - final CuboidArea area = getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - final Location highLoc = area.getHighLoc(); - final Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); - boolean found = false; - int it = 0; - while (!found && it < maxIt) { - it++; - Location lowLoc; - newLoc.setX(newLoc.getBlockX() + 1); - 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) { - newLoc.setY(newLoc.getY() - 1); - lowLoc.setY(lowLoc.getY() - 1); - } - if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { - found = true; - } - } - if (found) { - return newLoc; - } else { - final World world = Bukkit.getServer().getWorld(perms.getWorld()); - if (world != null) { - return world.getSpawnLocation(); - } - return insideLoc; - } - } + public String getOwner() { + return perms.getOwner(); + } - public String getOwner() { - return perms.getOwner(); - } + public ClaimedResidence getParent() { + return parent; + } - public ClaimedResidence getParent() { - return parent; - } + public ResidencePermissions getPermissions() { + return perms; + } - public ResidencePermissions getPermissions() { - return perms; - } + public ArrayList getPlayersInResidence() { + final ArrayList within = new ArrayList<>(); + for (final Player player : Bukkit.getServer().getOnlinePlayers()) { + if (containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; + } - public ArrayList getPlayersInResidence() { - final ArrayList within = new ArrayList(); - for (final Player player : Bukkit.getServer().getOnlinePlayers()) { - if (containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; - } + public ClaimedResidence getSubzone(final String subzonename) { + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + final String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; + } - public ClaimedResidence getSubzone(final String subzonename) { - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - final String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzone(split[i]); - } - return get; - } + public ClaimedResidence getSubzoneByLoc(final Location loc) { + final Set> set = subzones.entrySet(); + boolean found = false; + ClaimedResidence res = null; + for (final Entry entry : set) { + res = entry.getValue(); + if (res.containsLoc(loc)) { + found = true; + break; + } + } + if (!found) { + return null; + } + if (res == null) { + return null; + } + final ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; + } - public ClaimedResidence getSubzoneByLoc(final Location loc) { - final Set> set = subzones.entrySet(); - boolean found = false; - ClaimedResidence res = null; - for (final Entry entry : set) { - res = entry.getValue(); - if (res.containsLoc(loc)) { - found = true; - break; - } - } - if (!found) { - return null; - } - if (res == null) { - return null; - } - final ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; - } + public String[] getSubzoneList() { + final ArrayList zones = new ArrayList<>(); + final Set set = subzones.keySet(); + for (final String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); + } - public String[] getSubzoneList() { - final ArrayList zones = new ArrayList(); - final Set set = subzones.keySet(); - for (final String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); - } + public String getSubzoneNameByLoc(final Location loc) { + final Set> set = subzones.entrySet(); + ClaimedResidence res = null; + String key = null; + for (final Entry entry : set) { + res = entry.getValue(); + if (res.containsLoc(loc)) { + key = entry.getKey(); + break; + } + } + if (key == null) { + return null; + } + if (res == null) { + return null; + } + final String subname = res.getSubzoneNameByLoc(loc); + if (subname != null) { + return key + "." + subname; + } + return key; + } - public String getSubzoneNameByLoc(final Location loc) { - final Set> set = subzones.entrySet(); - ClaimedResidence res = null; - String key = null; - for (final Entry entry : set) { - res = entry.getValue(); - if (res.containsLoc(loc)) { - key = entry.getKey(); - break; - } - } - if (key == null) { - return null; - } - if (res == null) { - return null; - } - final String subname = res.getSubzoneNameByLoc(loc); - if (subname != null) { - return key + "." + subname; - } - return key; - } + public String getSubzoneNameByRes(final ClaimedResidence res) { + final Set> set = subzones.entrySet(); + for (final Entry entry : set) { + if (entry.getValue() == res) { + return entry.getKey(); + } + final String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getKey() + "." + n; + } + } + return null; + } - public String getSubzoneNameByRes(final ClaimedResidence res) { - final Set> set = subzones.entrySet(); - for (final Entry entry : set) { - if (entry.getValue() == res) { - return entry.getKey(); - } - final String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getKey() + "." + n; - } - } - return null; - } + public ClaimedResidence getTopParent() { + if (parent == null) { + return this; + } + return parent.getTopParent(); + } - public ClaimedResidence getTopParent() { - if (parent == null) { - return this; - } - return parent.getTopParent(); - } + public long getTotalSize() { + final Collection set = areas.values(); + long size = 0; + for (final CuboidArea entry : set) { + size = size + entry.getSize(); + } + return size; + } - public long getTotalSize() { - final Collection set = areas.values(); - long size = 0; - for (final CuboidArea entry : set) { - size = size + entry.getSize(); - } - return size; - } + public String getWorld() { + return perms.getWorld(); + } - public String getWorld() { - return perms.getWorld(); - } + public int getZoneDepth() { + int count = 0; + ClaimedResidence res = parent; + while (res != null) { + count++; + res = res.getParent(); + } + return count; + } - public int getZoneDepth() { - int count = 0; - ClaimedResidence res = parent; - while (res != null) { - count++; - res = res.getParent(); - } - return count; - } + public String[] listSubzones() { + final String list[] = new String[subzones.size()]; + int i = 0; + for (final String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; + } - public String[] listSubzones() { - final String list[] = new String[subzones.size()]; - int i = 0; - for (final String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; - } + public void printAdvancedAreaList(final Player player, final int page) { + final ArrayList temp = new ArrayList<>(); + for (final Entry entry : areas.entrySet()) { + final CuboidArea a = entry.getValue(); + final Location h = a.getHighLoc(); + final 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:" + + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); + } + InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("PhysicalAreas"), temp, page); + } - public void printAdvancedAreaList(final Player player, final int page) { - final ArrayList temp = new ArrayList(); - for (final Entry entry : areas.entrySet()) { - final CuboidArea a = entry.getValue(); - final Location h = a.getHighLoc(); - final 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:" - + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); - } - InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("PhysicalAreas"), temp, page); - } + public void printAreaList(final Player player, final int page) { + final ArrayList temp = new ArrayList<>(); + for (final String area : areas.keySet()) { + temp.add(area); + } + InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("PhysicalAreas"), temp, page); + } - public void printAreaList(final Player player, final int page) { - final ArrayList temp = new ArrayList(); - for (final String area : areas.keySet()) { - temp.add(area); - } - InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("PhysicalAreas"), temp, page); - } + public void printSubzoneList(final Player player, final int page) { + final ArrayList temp = new ArrayList<>(); + for (final Entry sz : subzones.entrySet()) { + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + plugin.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); + } + InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("Subzones"), temp, page); + } - public void printSubzoneList(final Player player, final int page) { - final ArrayList temp = new ArrayList(); - for (final Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + plugin.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); - } - InformationPager.printInfo(plugin, player, plugin.getLanguage().getPhrase("Subzones"), temp, page); - } + public void remove() { + final String name = getName(); + if (name != null) { + plugin.getResidenceManager().removeResidence(name); + plugin.getResidenceManager().removeChunkList(name); + } + } - public void remove() { - final String name = getName(); - if (name != null) { - plugin.getResidenceManager().removeResidence(name); - plugin.getResidenceManager().removeChunkList(name); - } - } + public void removeArea(final Player player, final String id, final boolean resadmin) { - public void removeArea(final Player player, final String id, final boolean resadmin) { + if (getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNonExist")); + return; + } + if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaRemoveLast")); + return; + } + removeArea(id); + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaRemove")); + } else { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + } + } - if (getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNonExist")); - return; - } - if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaRemoveLast")); - return; - } - removeArea(id); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaRemove")); - } else { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - } - } + public void removeArea(final String id) { + plugin.getResidenceManager().removeChunkList(getName()); + areas.remove(id); + plugin.getResidenceManager().calculateChunks(getName()); + } - public void removeArea(final String id) { - plugin.getResidenceManager().removeChunkList(getName()); - areas.remove(id); - plugin.getResidenceManager().calculateChunks(getName()); - } + public boolean removeSubzone(final Player player, final String name, final boolean resadmin) { + final ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + subzones.remove(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + return true; + } - public boolean removeSubzone(final Player player, final String name, final boolean resadmin) { - final ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - subzones.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - return true; - } + public boolean removeSubzone(final String name) { + return this.removeSubzone(null, name, true); + } - public boolean removeSubzone(final String name) { - return this.removeSubzone(null, name, true); - } + public boolean renameArea(final Player player, final String oldName, final String newName, final boolean resadmin) { + if (!plugin.validName(newName)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaExists")); + } + return false; + } + final CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaInvalidName")); + } + return false; + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) { + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); + } + return true; + } else { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + } - public boolean renameArea(final Player player, final String oldName, final String newName, final boolean resadmin) { - if (!plugin.validName(newName)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - if (player == null || perms.hasResidencePermission(player, true) || resadmin) { - if (areas.containsKey(newName)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaExists")); - } - return false; - } - final CuboidArea area = areas.get(oldName); - if (area == null) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaInvalidName")); - } - return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) { - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); - } - return true; - } else { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - } + public boolean renameArea(final String oldName, final String newName) { + return this.renameArea(null, oldName, newName, true); + } - public boolean renameArea(final String oldName, final String newName) { - return this.renameArea(null, oldName, newName, true); - } + public boolean renameSubzone(final Player player, final String oldName, final String newName, final boolean resadmin) { + if (!plugin.validName(newName)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + final ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidSubzone")); + } + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); + } + return false; + } + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) { + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); + } + return true; + } - public boolean renameSubzone(final Player player, final String oldName, final String newName, final boolean resadmin) { - if (!plugin.validName(newName)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - final ClaimedResidence res = subzones.get(oldName); - if (res == null) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("InvalidSubzone")); - } - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - if (subzones.containsKey(newName)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); - } - return false; - } - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) { - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); - } - return true; - } + public boolean renameSubzone(final String oldName, final String newName) { + return this.renameSubzone(null, oldName, newName, true); + } - public boolean renameSubzone(final String oldName, final String newName) { - return this.renameSubzone(null, oldName, newName, true); - } + public boolean replaceArea(final CuboidArea neware, final String name) { + return this.replaceArea(null, neware, name, true); + } - public boolean replaceArea(final CuboidArea neware, final String name) { - return this.replaceArea(null, neware, name, true); - } + public boolean replaceArea(final Player player, final CuboidArea newarea, final String name, final boolean resadmin) { + if (!areas.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNonExist")); + } + return false; + } + final CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaDiffWorld")); + } + return false; + } + if (parent == null) { + final String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); + if (collideResidence != null) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + } + return false; + } + } else { + final String[] szs = parent.listSubzones(); + for (final String sz : szs) { + final ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + } + return false; + } + } + } + } + // Remove subzones that are not in the area anymore + final String[] szs = listSubzones(); + for (final String sz : szs) { + final ClaimedResidence res = getSubzone(sz); + if (res != null && res != this) { + final String[] areas = res.getAreaList(); + for (final String area : areas) { + if (!newarea.isAreaWithinArea(res.getArea(area))) { + boolean good = false; + for (final CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + res.removeArea(area); + } + } + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + if (parent != null) { + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNotWithinParent")); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ParentNoPermission")); + return false; + } + } + final PermissionGroup group = plugin.getPermissionManager().getGroup(player); + if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return false; + } + if (!group.inLimits(newarea)) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSizeLimit")); + return false; + } + if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + return false; + } + if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + return false; + } + if (parent == null && plugin.getConfigManager().enableEconomy()) { + final int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + if (chargeamount > 0) { + if (!TransactionManager.chargeEconomyMoney(plugin, player, chargeamount)) { + return false; + } + } + } - public boolean replaceArea(final Player player, final CuboidArea newarea, final String name, final boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNonExist")); - } - return false; - } - final CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaDiffWorld")); - } - return false; - } - if (parent == null) { - final String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); - if (collideResidence != null) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); - } - return false; - } - } else { - final String[] szs = parent.listSubzones(); - for (final String sz : szs) { - final ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); - } - return false; - } - } - } - } - // Remove subzones that are not in the area anymore - final String[] szs = listSubzones(); - for (final String sz : szs) { - final ClaimedResidence res = getSubzone(sz); - if (res != null && res != this) { - final String[] areas = res.getAreaList(); - for (final String area : areas) { - if (!newarea.isAreaWithinArea(res.getArea(area))) { - boolean good = false; - for (final CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - res.removeArea(area); - } - } - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaNotWithinParent")); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("ParentNoPermission")); - return false; - } - } - final PermissionGroup group = plugin.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return false; - } - if (!group.inLimits(newarea)) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaSizeLimit")); - return false; - } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); - return false; - } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); - return false; - } - if (parent == null && plugin.getConfigManager().enableEconomy()) { - final int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); - if (chargeamount > 0) { - if (!TransactionManager.chargeEconomyMoney(plugin, player, chargeamount)) { - return false; - } - } - } + } + plugin.getResidenceManager().removeChunkList(getName()); + areas.remove(name); + areas.put(name, newarea); + plugin.getResidenceManager().calculateChunks(getName()); + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaUpdate")); + return true; + } - } - plugin.getResidenceManager().removeChunkList(getName()); - areas.remove(name); - areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(getName()); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("AreaUpdate")); - return true; - } + public Map save() { + final Map root = new HashMap<>(); + final Map areamap = new HashMap<>(); + root.put("EnterMessage", enterMessage); + root.put("LeaveMessage", leaveMessage); + root.put("StoredMoney", bank.getStoredMoney()); + root.put("BlackList", blacklist.save()); + root.put("IgnoreList", ignorelist.save()); + for (final Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + root.put("Areas", areamap); + final Map subzonemap = new HashMap<>(); + for (final Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getKey(), sz.getValue().save()); + } + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save()); + if (tpLoc != null) { + final Map tpmap = new HashMap<>(); + tpmap.put("X", tpLoc.getBlockX()); + tpmap.put("Y", tpLoc.getBlockY()); + tpmap.put("Z", tpLoc.getBlockZ()); + root.put("TPLoc", tpmap); + } + return root; + } - public Map save() { - final Map root = new HashMap(); - final Map areamap = new HashMap(); - root.put("EnterMessage", enterMessage); - root.put("LeaveMessage", leaveMessage); - root.put("StoredMoney", bank.getStoredMoney()); - root.put("BlackList", blacklist.save()); - root.put("IgnoreList", ignorelist.save()); - for (final Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); - } - root.put("Areas", areamap); - final Map subzonemap = new HashMap(); - for (final Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getKey(), sz.getValue().save()); - } - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save()); - if (tpLoc != null) { - final Map tpmap = new HashMap(); - tpmap.put("X", tpLoc.getBlockX()); - tpmap.put("Y", tpLoc.getBlockY()); - tpmap.put("Z", tpLoc.getBlockZ()); - root.put("TPLoc", tpmap); - } - return root; - } + public void setEnterLeaveMessage(final Player player, String message, final boolean enter, final boolean resadmin) { + if (message != null) { + if (message.equals("")) { + message = null; + } + } + final PermissionGroup group = plugin.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("OwnerNoPermission")); + return; + } + if (!perms.hasResidencePermission(player, false) && !resadmin) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return; + } + if (enter) { + setEnterMessage(message); + } else { + setLeaveMessage(message); + } + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("MessageChange")); + } - public void setEnterLeaveMessage(final Player player, String message, final boolean enter, final boolean resadmin) { - if (message != null) { - if (message.equals("")) { - message = null; - } - } - final PermissionGroup group = plugin.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("OwnerNoPermission")); - return; - } - if (!perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return; - } - if (enter) { - setEnterMessage(message); - } else { - setLeaveMessage(message); - } - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("MessageChange")); - } + public void setEnterMessage(final String message) { + enterMessage = message; + } - public void setEnterMessage(final String message) { - enterMessage = message; - } + public void setLeaveMessage(final String message) { + leaveMessage = message; + } - public void setLeaveMessage(final String message) { - leaveMessage = message; - } + public void setTpLoc(final Player player, final boolean resadmin) { + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return; + } + if (!containsLoc(player.getLocation())) { + player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotInResidence")); + return; + } + tpLoc = player.getLocation(); + player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SetTeleportLocation")); + } - public void setTpLoc(final Player player, final boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return; - } - if (!containsLoc(player.getLocation())) { - player.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NotInResidence")); - return; - } - tpLoc = player.getLocation(); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SetTeleportLocation")); - } - - public void tpToResidence(final Player reqPlayer, final Player targetPlayer, final boolean resadmin) { - if (!resadmin && !reqPlayer.hasPermission("residence.admin.tp")) { - final PermissionGroup group = plugin.getPermissionManager().getGroup(reqPlayer); - if (!group.hasTpAccess()) { - reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportDeny")); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); - return; - } - if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { - reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportNoFlag")); - return; - } - } - if (tpLoc != null) { - final ResidenceTPEvent tpevent = new ResidenceTPEvent(this, tpLoc, targetPlayer, reqPlayer); - Bukkit.getServer().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.teleport(tpLoc); - targetPlayer.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("TeleportSuccess")); - } - } else { - final CuboidArea area = areas.values().iterator().next(); - if (area == null) { - reqPlayer.sendMessage(ChatColor.RED + "未找到可传送的区域..."); - return; - } - final Location targloc = getOutsideFreeLoc(area.getHighLoc()); - final ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Bukkit.getServer().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.teleport(targloc); - targetPlayer.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("TeleportNear")); - } - } - } + public void tpToResidence(final Player reqPlayer, final Player targetPlayer, final boolean resadmin) { + if (!resadmin && !(reqPlayer.hasPermission("residence.admin.tp") && reqPlayer.hasPermission("residence.admin.move"))) { + final PermissionGroup group = plugin.getPermissionManager().getGroup(reqPlayer); + if (!group.hasTpAccess()) { + reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportDeny")); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("NoPermission")); + return; + } + if (!this.perms.playerHas(reqPlayer.getName(), "tp", true) || !this.perms.playerHas(reqPlayer.getName(), "move", true)) { + reqPlayer.sendMessage(ChatColor.RED + plugin.getLanguage().getPhrase("TeleportNoFlag")); + return; + } + } + if (tpLoc != null) { + final ResidenceTPEvent tpevent = new ResidenceTPEvent(this, tpLoc, targetPlayer, reqPlayer); + Bukkit.getServer().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.teleport(tpLoc); + targetPlayer.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("TeleportSuccess")); + } + } else { + final CuboidArea area = areas.values().iterator().next(); + if (area == null) { + reqPlayer.sendMessage(ChatColor.RED + "未找到可传送的区域..."); + return; + } + final Location targloc = getOutsideFreeLoc(area.getHighLoc()); + final ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + Bukkit.getServer().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.teleport(targloc); + targetPlayer.sendMessage(ChatColor.YELLOW + plugin.getLanguage().getPhrase("TeleportNear")); + } + } + } }