diff --git a/pom.xml b/pom.xml index fcfbf76..f92b1b9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,6 +6,7 @@ 2.7.0.1-SNAPSHOT Residence + ${project.name} src diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 0662742..71a6b75 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -58,76 +58,208 @@ import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.bekvon.bukkit.residence.vaultinterface.ZipLibrary; import com.earth2me.essentials.Essentials; -import com.residence.mcstats.Metrics; -import com.residence.zip.ZipLibrary; /** - * + * * @author Gary Smoak - bekvon - * + * */ public class Residence extends JavaPlugin { - public static String bukkitver; - protected static ResidenceManager rmanager; - protected static SelectionManager smanager; - protected static PermissionManager gmanager; - protected static ConfigManager cmanager; - protected static ResidenceBlockListener blistener; - protected static ResidencePlayerListener plistener; - protected static ResidenceEntityListener elistener; - protected static TransactionManager tmanager; - protected static PermissionListManager pmanager; - protected static LeaseManager leasemanager; - protected static WorldItemManager imanager; - protected static WorldFlagManager wmanager; - protected static RentManager rentmanager; - protected static ChatManager chatmanager; - protected static Server server; - protected static HelpEntry helppages; - protected static Language language; - protected boolean firstenable = true; - protected static EconomyInterface economy; - public final static int saveVersion = 1; - protected static File dataFolder; - protected static int leaseBukkitId = -1; - protected static int rentBukkitId = -1; - protected static int healBukkitId = -1; - protected static int autosaveBukkitId = -1; - protected static boolean initsuccess = false; - protected Map deleteConfirm; - protected static List resadminToggle; - private final static String[] validLanguages = { "English", "Chinese" }; - private Runnable doHeals = new Runnable() { + public static String bukkitver; + protected static ResidenceManager rmanager; + protected static SelectionManager smanager; + protected static PermissionManager gmanager; + protected static ConfigManager cmanager; + protected static ResidenceBlockListener blistener; + protected static ResidencePlayerListener plistener; + protected static ResidenceEntityListener elistener; + protected static TransactionManager tmanager; + protected static PermissionListManager pmanager; + protected static LeaseManager leasemanager; + protected static WorldItemManager imanager; + protected static WorldFlagManager wmanager; + protected static RentManager rentmanager; + protected static ChatManager chatmanager; + protected static Server server; + protected static HelpEntry helppages; + protected static Language language; + protected static EconomyInterface economy; + public final static int saveVersion = 1; + protected static File dataFolder; + protected static int leaseBukkitId = -1; + protected static int rentBukkitId = -1; + protected static int healBukkitId = -1; + protected static int autosaveBukkitId = -1; + protected static boolean initsuccess = false; + protected static List resadminToggle; + private final static String[] validLanguages = { "English", "Chinese" }; + + public static ResidenceBlockListener getBlockListener() { + return blistener; + } + + public static ChatManager getChatManager() { + return chatmanager; + } + + public static ConfigManager getConfigManager() { + return cmanager; + } + + public static File getDataLocation() { + return dataFolder; + } + + public static EconomyInterface getEconomyManager() { + return economy; + } + + public static ResidenceEntityListener getEntityListener() { + return elistener; + } + + public static WorldItemManager getItemManager() { + return imanager; + } + + public static Language getLanguage() { + if (language == null) { + language = new Language(); + } + return language; + } + + public static LeaseManager getLeaseManager() { + return leasemanager; + } + + public static PermissionManager getPermissionManager() { + return gmanager; + } + + public static FlagPermissions getPermsByLoc(Location loc) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) + return res.getPermissions(); + else + return wmanager.getPerms(loc.getWorld().getName()); + } + + public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) + return res.getPermissions(); + else { + if (player != null) + return wmanager.getPerms(player); + else + return wmanager.getPerms(loc.getWorld().getName()); + } + } + + public static ResidencePlayerListener getPlayerListener() { + return plistener; + } + + public static RentManager getRentManager() { + return rentmanager; + } + + public static ResidenceManager getResidenceManager() { + return rmanager; + } + + public static SelectionManager getSelectionManager() { + return smanager; + } + + public static Server getServ() { + return server; + } + + public static TransactionManager getTransactionManager() { + return tmanager; + } + + public static WorldFlagManager getWorldFlags() { + return wmanager; + } + + public static boolean isResAdminOn(Player player) { + if (resadminToggle.contains(player.getName())) + return true; + return false; + } + + public static boolean isResAdminOn(String player) { + if (resadminToggle.contains(player.toLowerCase())) + return true; + return false; + } + + public static void turnResAdminOn(Player player) { + resadminToggle.add(player.getName()); + } + + public static boolean validName(String name) { + if (name.contains(":") || name.contains(".")) + return false; + if (cmanager.getResidenceNameRegex() == null) + return true; + else { + String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + if (!name.equals(namecheck)) + return false; + return true; + } + } + + protected boolean firstenable = true; + + protected Map deleteConfirm; + + private Runnable doHeals = new Runnable() { + @Override public void run() { plistener.doHeals(); } }; - private Runnable rentExpire = new Runnable() { + + private Runnable rentExpire = new Runnable() { + @Override public void run() { rentmanager.checkCurrentRents(); if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Rent Expirations checked!"); + System.out + .println("[Residence] - Rent Expirations checked!"); } } }; - private Runnable leaseExpire = new Runnable() { + + private Runnable leaseExpire = new Runnable() { + @Override public void run() { leasemanager.doExpirations(); if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Lease Expirations checked!"); + System.out + .println("[Residence] - Lease Expirations checked!"); } } }; - private Runnable autoSave = new Runnable() { + + private Runnable autoSave = new Runnable() { + @Override public void run() { try { if (initsuccess) { saveYml(); } } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, + Logger.getLogger("Minecraft").log( + Level.SEVERE, "[Residence] 插件数据 保存 错误", ex); } } @@ -136,11 +268,33 @@ public class Residence extends JavaPlugin { public Residence() { } - public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); + private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, + InvalidConfigurationException { + File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); + File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + + ".yml"); + if (outFile.isFile()) { + FileConfig testconfig = new FileConfig(); + testconfig.load(outFile); + int oldversion = testconfig.getInt("FieldsVersion", 0); + if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) + return false; + FileConfig testconfig2 = new FileConfig(); + testconfig2.load(checkFile); + int newversion = testconfig2.getInt("FieldsVersion", oldversion); + if (checkFile.isFile()) { + checkFile.delete(); + } + if (newversion > oldversion) + return true; + return false; + } + return true; + } + public void consoleMessage(String message) { + ConsoleCommandSender console = Bukkit.getConsoleSender(); + console.sendMessage("[Residence] " + message); } @Override @@ -151,14 +305,89 @@ public class Residence extends JavaPlugin { return Config.getInstance(); } - @Override - public void saveConfig() { - Config.save(); + private void loadEssentialsEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Essentials"); + if (p != null) { + economy = new EssentialsEcoAdapter((Essentials) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] 成功关联Essentials Economy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy 未找到!"); + } } - @Override - public void reloadConfig() { - Config.load(this); + private void loadVaultEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); + if (vault.economyOK()) { + Logger.getLogger("Minecraft").log(Level.INFO, + "[Residence] 发现 Vault 使用经济系统: " + vault.getEconomyName()); + economy = vault; + } else { + Logger.getLogger("Minecraft").log(Level.INFO, + "[Residence] 发现 Vault, 但是 Vault 未找到经济系统..."); + } + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault 未找到!"); + } + } + + @SuppressWarnings("unchecked") + protected boolean loadYml() throws Exception { + File saveFolder = new File(dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("保存目录不存在..."); + this.getLogger().warning("请重新启动服务器"); + return true; + } + YMLSaveHelper yml; + File loadFile; + HashMap worlds = new HashMap(); + for (World world : server.getWorlds()) { + loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + worlds.put(world.getName(), yml.getRoot().get("Residences")); + } + } + rmanager = ResidenceManager.load(worlds); + loadFile = new File(saveFolder, "forsale.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), + gmanager, rmanager); + } + loadFile = new File(saveFolder, "leases.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), + rmanager); + } + loadFile = new File(saveFolder, "permlists.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + pmanager = PermissionListManager.load((Map) yml.getRoot().get( + "PermissionLists")); + } + loadFile = new File(saveFolder, "rent.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + rentmanager = RentManager.load((Map) yml.getRoot() + .get("RentSystem")); + } + // System.out.print("[Residence] Loaded..."); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } } @Override @@ -176,11 +405,9 @@ public class Residence extends JavaPlugin { saveYml(); ZipLibrary.backup(); } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, - "[Residence] 插件数据保存失败", ex); + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] 插件数据保存失败", ex); } - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] Disabled!"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); } } @@ -211,8 +438,7 @@ public class Residence extends JavaPlugin { Plugin plugin = server.getPluginManager().getPlugin(multiworld); if (plugin != null) { if (!plugin.isEnabled()) { - System.out.println("[Residence] - 加载多世界插件: " - + multiworld); + System.out.println("[Residence] - 加载多世界插件: " + multiworld); server.getPluginManager().enablePlugin(plugin); } } @@ -228,33 +454,28 @@ public class Residence extends JavaPlugin { this.writeDefaultLanguageFile(lang); } } catch (Exception ex) { - System.out - .println("[Residence] 语言文件升级失败: " + lang + ".yml"); + System.out.println("[Residence] 语言文件升级失败: " + lang + ".yml"); helppages = new HelpEntry(""); language = new Language(); } } try { - File langFile = new File(new File(dataFolder, "Language"), - cmanager.getLanguage() + ".yml"); + File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + + ".yml"); if (langFile.isFile()) { FileConfig langconfig = new FileConfig(); langconfig.load(langFile); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - HelpEntry.setLinesPerPage(langconfig.getInt( - "HelpLinesPerPage", 7)); - InformationPager.setLinesPerPage(langconfig.getInt( - "HelpLinesPerPage", 7)); + HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); language = Language.parseText(langconfig, "Language"); } else { System.out.println("[Residence] 语言文件不存在..."); } } catch (Exception ex) { - System.out.println("[Residence] 语言文件载入失败: " - + cmanager.getLanguage() + ".yml, 错误: " + System.out.println("[Residence] 语言文件载入失败: " + cmanager.getLanguage() + ".yml, 错误: " + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, - null, ex); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); helppages = new HelpEntry(""); language = new Language(); } @@ -266,8 +487,8 @@ public class Residence extends JavaPlugin { .getPermissionsPlugin(); if (vault.economyOK()) { economy = vault; - System.out.println("[Residence] 发现 Vault 使用经济系统: " - + vault.getEconomyName()); + System.out + .println("[Residence] 发现 Vault 使用经济系统: " + vault.getEconomyName()); } } if (economy == null) { @@ -299,19 +520,16 @@ public class Residence extends JavaPlugin { pmanager = new PermissionListManager(); } if (firstenable) { - if (!this.isEnabled()) { + if (!this.isEnabled()) return; - } FlagPermissions.initValidFlags(); Plugin p = server.getPluginManager().getPlugin("WorldEdit"); if (p != null) { smanager = new WorldEditSelectionManager(server); - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] 发现 WorldEdit"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] 发现 WorldEdit"); } else { smanager = new SelectionManager(server); - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] WorldEdit 未找到!"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit 未找到!"); } blistener = new ResidenceBlockListener(); @@ -331,19 +549,17 @@ public class Residence extends JavaPlugin { autosaveInt = 1; } autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask( - this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask( - this, doHeals, 20, 20); + autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, + autosaveInt, autosaveInt); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); if (cmanager.useLeases()) { int leaseInterval = cmanager.getLeaseCheckInterval(); if (leaseInterval < 1) { leaseInterval = 1; } leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler() - .scheduleSyncRepeatingTask(this, leaseExpire, - leaseInterval, leaseInterval); + leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, + leaseInterval, leaseInterval); } if (cmanager.enabledRentSystem()) { int rentint = cmanager.getRentCheckInterval(); @@ -351,197 +567,40 @@ public class Residence extends JavaPlugin { rentint = 1; } rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask( - this, rentExpire, rentint, rentint); + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, + rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (Residence.getPermissionManager().isResidenceAdmin(player)) { turnResAdminOn(player); } } - try { - Metrics metrics = new Metrics(this); - metrics.start(); - } catch (IOException e) { - // Failed to submit the stats :-( - } - Logger.getLogger("Minecraft") - .log(Level.INFO, - "[Residence] 载入完成! 版本: " - + this.getDescription().getVersion() - + " 重制 by 喵♂呜"); + Logger.getLogger("Minecraft").log(Level.INFO, + "[Residence] 载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜"); initsuccess = true; } catch (Exception ex) { initsuccess = false; getServer().getPluginManager().disablePlugin(this); System.out.println("[Residence] - 初始化失败! 卸载插件! 错误:"); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, - ex); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } } - public void consoleMessage(String message) { - ConsoleCommandSender console = Bukkit.getConsoleSender(); - console.sendMessage("[Residence] " + message); + @Override + public void reloadConfig() { + Config.load(this); } - public static boolean validName(String name) { - if (name.contains(":") || name.contains(".")) { - return false; - } - if (cmanager.getResidenceNameRegex() == null) { - return true; - } else { - String namecheck = name.replaceAll( - cmanager.getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; - } + public void reloadPlugin() { + this.onDisable(); + this.reloadConfig(); + this.onEnable(); + } - public static File getDataLocation() { - return dataFolder; - } - - public static ResidenceManager getResidenceManager() { - return rmanager; - } - - public static SelectionManager getSelectionManager() { - return smanager; - } - - public static PermissionManager getPermissionManager() { - return gmanager; - } - - public static EconomyInterface getEconomyManager() { - return economy; - } - - public static Server getServ() { - return server; - } - - public static LeaseManager getLeaseManager() { - return leasemanager; - } - - public static ConfigManager getConfigManager() { - return cmanager; - } - - public static TransactionManager getTransactionManager() { - return tmanager; - } - - public static WorldItemManager getItemManager() { - return imanager; - } - - public static WorldFlagManager getWorldFlags() { - return wmanager; - } - - public static RentManager getRentManager() { - return rentmanager; - } - - public static ResidencePlayerListener getPlayerListener() { - return plistener; - } - - public static ResidenceBlockListener getBlockListener() { - return blistener; - } - - public static ResidenceEntityListener getEntityListener() { - return elistener; - } - - public static ChatManager getChatManager() { - return chatmanager; - } - - public static Language getLanguage() { - if (language == null) { - language = new Language(); - } - return language; - } - - public static FlagPermissions getPermsByLoc(Location loc) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - return wmanager.getPerms(loc.getWorld().getName()); - } - } - - public static FlagPermissions getPermsByLocForPlayer(Location loc, - Player player) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - if (player != null) - return wmanager.getPerms(player); - else - return wmanager.getPerms(loc.getWorld().getName()); - } - } - - private void loadEssentialsEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Essentials"); - if (p != null) { - economy = new EssentialsEcoAdapter((Essentials) p); - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] 成功关联Essentials Economy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] Essentials Economy 未找到!"); - } - } - - private void loadVaultEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); - if (vault.economyOK()) { - Logger.getLogger("Minecraft").log( - Level.INFO, - "[Residence] 发现 Vault 使用经济系统: " - + vault.getEconomyName()); - economy = vault; - } else { - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] 发现 Vault, 但是 Vault 未找到经济系统..."); - } - } else { - Logger.getLogger("Minecraft").log(Level.INFO, - "[Residence] Vault 未找到!"); - } - } - - public static boolean isResAdminOn(Player player) { - if (resadminToggle.contains(player.getName())) { - return true; - } - return false; - } - - public static void turnResAdminOn(Player player) { - resadminToggle.add(player.getName()); - } - - public static boolean isResAdminOn(String player) { - if (resadminToggle.contains(player.toLowerCase())) { - return true; - } - return false; + @Override + public void saveConfig() { + Config.save(); } private void saveYml() throws IOException { @@ -551,22 +610,20 @@ public class Residence extends JavaPlugin { YMLSaveHelper yml; Map save = rmanager.save(); for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() - + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() - + ".yml"); + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); yml = new YMLSaveHelper(tmpFile); yml.getRoot().put("Version", saveVersion); World world = server.getWorld(entry.getKey()); - if (world != null) + if (world != null) { yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("Residences", (Map) entry.getValue()); + } + yml.getRoot().put("Residences", entry.getValue()); yml.save(); if (ymlSaveLoc.isFile()) { File backupFolder = new File(worldFolder, "Backup"); backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" - + entry.getKey() + ".yml"); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); if (backupFile.isFile()) { backupFile.delete(); } @@ -653,119 +710,19 @@ public class Residence extends JavaPlugin { } } - @SuppressWarnings("unchecked") - protected boolean loadYml() throws Exception { - File saveFolder = new File(dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - this.getLogger().warning("保存目录不存在..."); - this.getLogger().warning("请重新启动服务器"); - return true; - } - YMLSaveHelper yml; - File loadFile; - HashMap worlds = new HashMap(); - for (World world : server.getWorlds()) { - loadFile = new File(worldFolder, "res_" + world.getName() - + ".yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - worlds.put(world.getName(), yml.getRoot().get("Residences")); - } - } - rmanager = ResidenceManager.load(worlds); - loadFile = new File(saveFolder, "forsale.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - tmanager = TransactionManager.load((Map) yml.getRoot() - .get("Economy"), gmanager, rmanager); - } - loadFile = new File(saveFolder, "leases.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - leasemanager = LeaseManager.load((Map) yml - .getRoot().get("Leases"), rmanager); - } - loadFile = new File(saveFolder, "permlists.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - pmanager = PermissionListManager.load((Map) yml - .getRoot().get("PermissionLists")); - } - loadFile = new File(saveFolder, "rent.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - rentmanager = RentManager.load((Map) yml - .getRoot().get("RentSystem")); - } - // System.out.print("[Residence] Loaded..."); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, - ex); - throw ex; - } - } - private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), - "config.yml"), "config.yml", true)) { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), + "config.yml", true)) { System.out.println("[Residence] 保存默认配置文件..."); } } - private void writeDefaultLanguageFile(String lang) { - File outFile = new File(new File(this.getDataFolder(), "Language"), - lang + ".yml"); - outFile.getParentFile().mkdirs(); - if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang - + ".yml", true)) { - System.out.println("[Residence] 保存默认 " + lang + " 语言文件..."); - } - } - - private boolean checkNewLanguageVersion(String lang) throws IOException, - FileNotFoundException, InvalidConfigurationException { - File outFile = new File(new File(this.getDataFolder(), "Language"), - lang + ".yml"); - File checkFile = new File(new File(this.getDataFolder(), "Language"), - "temp-" + lang + ".yml"); - if (outFile.isFile()) { - FileConfig testconfig = new FileConfig(); - testconfig.load(outFile); - int oldversion = testconfig.getInt("FieldsVersion", 0); - if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" - + lang + ".yml", false)) { - return false; - } - FileConfig testconfig2 = new FileConfig(); - testconfig2.load(checkFile); - int newversion = testconfig2.getInt("FieldsVersion", oldversion); - if (checkFile.isFile()) { - checkFile.delete(); - } - if (newversion > oldversion) { - return true; - } - return false; - } - return true; - } - @SuppressWarnings("resource") - private boolean writeDefaultFileFromJar(File writeName, String jarPath, - boolean backupOld) { + private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { try { - File fileBackup = new File(this.getDataFolder(), "backup-" - + writeName); - File jarloc = new File(getClass().getProtectionDomain() - .getCodeSource().getLocation().toURI()).getCanonicalFile(); + File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); + File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation() + .toURI()).getCanonicalFile(); if (jarloc.isFile()) { JarFile jar = new JarFile(jarloc); JarEntry entry = jar.getJarEntry(jarPath); @@ -801,4 +758,12 @@ public class Residence extends JavaPlugin { return false; } } + + private void writeDefaultLanguageFile(String lang) { + File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); + outFile.getParentFile().mkdirs(); + if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { + System.out.println("[Residence] 保存默认 " + lang + " 语言文件..."); + } + } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 5ec614b..9996c8b 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,1800 +1,1751 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.bekvon.bukkit.residence; - -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; - -public class ResidenceCommandListener extends Residence { - - public boolean onCommand(CommandSender sender, Command command, - String label, String[] args) { - ResidenceCommandEvent cevent = new ResidenceCommandEvent( - command.getName(), args, sender); - server.getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) { - return true; - } - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - this.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN - + "[Residence] 重载配置文件."); - System.out.println("[Residence] 重载 by " - + player.getName() + "."); - } - } else { - this.reloadPlugin(); - System.out.println("[Residence] 重载 by 控制台."); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player - && gmanager.isResidenceAdmin((Player) sender)) { - try { - this.loadYml(); - sender.sendMessage(ChatColor.GREEN - + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED - + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log( - Level.SEVERE, null, ex); - } - } - return true; - } else if (command.getName().equals("resworld")) { - if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { - if (sender instanceof ConsoleCommandSender) { - rmanager.removeAllFromWorld(sender, args[1]); - return true; - } else { - sender.sendMessage(ChatColor.RED - + "MUST be run from console."); - } - } - return false; - } else if (command.getName().equals("rc")) { - if (sender instanceof Player) { - Player player = (Player) sender; - String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { - plistener.tooglePlayerResidenceChat(player); - } else { - String area = plistener.getCurrentResidenceName(pname); - if (area != null) { - ChatChannel channel = chatmanager.getChannel(area); - if (channel != null) { - String message = ""; - for (String arg : args) { - message = message + " " + arg; - } - channel.chat(pname, message); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidChannel")); - } - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("NotInResidence")); - } - } - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("ChatDisabled")); - } - } - return true; - } else if (command.getName().equals("res") - || command.getName().equals("residence") - || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") - && gmanager.isResidenceAdmin((Player) sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") - && !gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED - + language.getPhrase("NonAdmin")); - return true; - } - } else { - resadmin = true; - } - return commandRes(args, resadmin, command, sender); - } - return super.onCommand(sender, command, label, args); - } - - @SuppressWarnings("deprecation") - private boolean commandRes(String[] args, boolean resadmin, - Command command, CommandSender sender) { - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") - || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender); - } - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - Player player = null; - PermissionGroup group = null; - String pname = null; - if (sender instanceof Player) { - player = (Player) sender; - group = Residence.getPermissionManager().getGroup(player); - pname = player.getName(); - } else { - resadmin = true; - } - if (cmanager.allowAdminsOnly()) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("AdminOnly")); - return true; - } - } - if (args.length == 0) { - return false; - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - String cmd = args[0].toLowerCase(); - if (cmd.equals("remove") || cmd.equals("delete")) { - return commandResRemove(args, resadmin, sender, page); - } - if (cmd.equals("confirm")) { - return commandResConfirm(args, resadmin, sender, page); - } - if (cmd.equals("version")) { - sender.sendMessage(ChatColor.GRAY - + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " - + ChatColor.GOLD + "Residence" + ChatColor.RED - + " version: " + ChatColor.BLUE - + this.getDescription().getVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " - + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " - + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.RED + "Updated to 2.7.0.0 by: " - + ChatColor.YELLOW + "喵♂呜"); - String names = null; - List authlist = this.getDescription().getAuthors(); - for (String auth : authlist) { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW - + names); - sender.sendMessage(ChatColor.DARK_AQUA - + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN - + "http://residencebukkitmod.wikispaces.com/"); - sender.sendMessage(ChatColor.AQUA - + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE - + "http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/"); - sender.sendMessage(ChatColor.GRAY - + "------------------------------------"); - return true; - } - if (cmd.equals("setowner") && args.length == 3) { - if (!resadmin) { - sender.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setOwner(args[2], true); - if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN - + language.getPhrase("ResidenceOwnerChange", - ChatColor.YELLOW + " " + args[1] + " " - + ChatColor.GREEN + "." - + ChatColor.YELLOW + args[2] - + ChatColor.GREEN)); - } else { - sender.sendMessage(ChatColor.GREEN - + language.getPhrase( - "SubzoneOwnerChange", - ChatColor.YELLOW - + " " - + args[1].split("\\.")[args[1] - .split("\\.").length - 1] - + " " + ChatColor.GREEN + "." - + ChatColor.YELLOW + args[2] - + ChatColor.GREEN)); - } - } else { - sender.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - if (player == null) { - return true; - } - if (command.getName().equals("resadmin")) { - if (args.length == 1 && args[0].equals("on")) { - resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("AdminToggle", - language.getPhrase("TurnOn"))); - return true; - } else if (args.length == 1 && args[0].equals("off")) { - resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("AdminToggle", - language.getPhrase("TurnOff"))); - return true; - } - } - if (!resadmin && resadminToggle.contains(player.getName())) { - if (!gmanager.isResidenceAdmin(player)) { - resadminToggle.remove(player.getName()); - } - } - if (cmd.equals("select")) { - return commandResSelect(args, resadmin, player, page); - } - if (cmd.equals("create")) { - return commandResCreate(args, resadmin, player, page); - } - if (cmd.equals("subzone") || cmd.equals("sz")) { - return commandResSubzone(args, resadmin, player, page); - } - if (cmd.equals("sublist")) { - return commandResSublist(args, resadmin, player, page); - } - if (cmd.equals("removeall")) { - if (args.length != 2) { - return false; - } - if (resadmin || args[1].endsWith(pname)) { - rmanager.removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("RemovePlayersResidences", - ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - } - return true; - } - if (cmd.equals("compass")) { - return commandResCompass(args, resadmin, player, page); - } - if (cmd.equals("area")) { - return commandResArea(args, resadmin, player, page); - } - if (cmd.equals("lists")) { - return commandResList(args, resadmin, player, page); - } - if (cmd.equals("default")) { - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - res.getPermissions().applyDefaultFlags(player, resadmin); - return true; - } - return false; - } - if (cmd.equals("limits")) { - if (args.length == 1) { - gmanager.getGroup(player).printLimits(player); - return true; - } - return false; - } - if (cmd.equals("info")) { - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.printAreaInfo(area, player); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 2) { - rmanager.printAreaInfo(args[1], player); - return true; - } - return false; - } - if (cmd.equals("check")) { - if (args.length == 3 || args.length == 4) { - if (args.length == 4) { - pname = args[3]; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", - ChatColor.YELLOW + args[2] + ChatColor.RED + "." - + ChatColor.YELLOW + pname + ChatColor.RED - + "." + ChatColor.YELLOW + args[1] - + ChatColor.RED)); - } else { - player.sendMessage(language - .getPhrase( - "FlagCheckTrue", - ChatColor.GREEN - + args[2] - + ChatColor.YELLOW - + "." - + ChatColor.GREEN - + pname - + ChatColor.YELLOW - + "." - + ChatColor.YELLOW - + args[1] - + ChatColor.RED - + "." - + (res.getPermissions().playerHas( - pname, - res.getPermissions() - .getWorld(), - args[2], false) ? ChatColor.GREEN - + "TRUE" - : ChatColor.RED + "FALSE"))); - } - return true; - } - return false; - } - if (cmd.equals("current")) { - if (args.length != 1) { - return false; - } - String res = rmanager.getNameByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.GREEN - + language.getPhrase("InResidence", ChatColor.YELLOW - + res + ChatColor.GREEN)); - } - return true; - } - if (cmd.equals("set")) { - return commandResSet(args, resadmin, player, page); - } - if (cmd.equals("pset")) { - return commandResPset(args, resadmin, player, page); - } - if (cmd.equals("gset")) { - return commandResGset(args, resadmin, player, page); - } - if (cmd.equals("lset")) { - return commandResLset(args, resadmin, player, page); - } - if (cmd.equals("list")) { - if (args.length == 1) { - rmanager.listResidences(player); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page); - } catch (Exception ex) { - rmanager.listResidences(player, args[1]); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page); - return true; - } - return false; - } - if (cmd.equals("listhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listResidences(player, 1, true); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page, true); - } catch (Exception ex) { - rmanager.listResidences(player, args[1], 1, true); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page, true); - return true; - } - return false; - } - if (cmd.equals("rename")) { - if (args.length == 3) { - rmanager.renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; - } - if (cmd.equals("renamearea")) { - if (args.length == 4) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - res.renameArea(player, args[2], args[3], resadmin); - return true; - } - return false; - } - if (cmd.equals("unstuck")) { - if (args.length != 1) { - return false; - } - group = gmanager.getGroup(player); - if (!group.hasUnstuckAccess()) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("Moved") + "..."); - player.teleport(res.getOutsideFreeLoc(player.getLocation())); - } - return true; - } - if (cmd.equals("kick")) { - if (args.length != 2) { - return false; - } - Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - - } - group = gmanager.getGroup(player); - if (!group.hasKickAccess()) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = rmanager - .getByLoc(targetplayer.getLocation()); - if (res.getOwner().equals(player.getName())) { - if (res.getPlayersInResidence().contains(targetplayer)) { - targetplayer.teleport(res.getOutsideFreeLoc(player - .getLocation())); - targetplayer.sendMessage(ChatColor.RED - + language.getPhrase("Kicked") + "!"); - } - } - - } - if (cmd.equals("mirror")) { - if (args.length != 3) { - return false; - } - rmanager.mirrorPerms(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("listall")) { - if (args.length == 1) { - rmanager.listAllResidences(player, 1); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("listallhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listAllResidences(player, 1, true); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page, true); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("material")) { - if (args.length != 2) { - return false; - } - try { - player.sendMessage(ChatColor.GREEN - + language.getPhrase( - "MaterialGet", - ChatColor.GOLD - + args[1] - + ChatColor.GREEN - + "." - + ChatColor.RED - + Material.getMaterial( - Integer.parseInt(args[1])) - .name() + ChatColor.GREEN)); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMaterial")); - } - return true; - } - if (cmd.equals("tpset")) { - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setTpLoc(player, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tp")) { - if (args.length != 2) { - return false; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - res.tpToResidence(player, player, resadmin); - return true; - } - if (cmd.equals("lease")) { - return commandResLease(args, resadmin, player, page); - } - if (cmd.equals("bank")) { - return commandResBank(args, resadmin, player, page); - } - if (cmd.equals("market")) { - return commandResMarket(args, resadmin, player, page); - } - if (cmd.equals("message")) { - return commandResMessage(args, resadmin, player, page); - } - if (cmd.equals("give") && args.length == 3) { - rmanager.giveResidence(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("server")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - res.getPermissions().setOwner("Server Land", false); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("ResidenceOwnerChange", - ChatColor.YELLOW + args[1] + ChatColor.GREEN - + "." + ChatColor.YELLOW - + "Server Land" + ChatColor.GREEN)); - return true; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - } - if (cmd.equals("clearflags")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().clearFlags(); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("FlagsCleared")); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("SelectionTool") + ":" - + ChatColor.GREEN - + Material.getMaterial(cmanager.getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN - + Material.getMaterial(cmanager.getInfoToolID())); - return true; - } - return false; - } - - private boolean commandHelp(String[] args, boolean resadmin, - CommandSender sender) { - if (helppages != null) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED - + language.getPhrase("InvalidHelp")); - } - } - if (helppages.containesEntry(helppath)) { - helppages.printHelp(sender, page, helppath); - return true; - } - } - return false; - } - - private boolean commandResSelect(String[] args, boolean resadmin, - Player player, int page) { - PermissionGroup group = Residence.getPermissionManager().getGroup( - player); - if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectDiabled")); - return true; - } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 - && !resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectDiabled")); - return true; - } - if ((!player.hasPermission("residence.create") - && player.isPermissionSet("residence.create") - && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectDiabled")); - return true; - } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { - if (smanager.hasPlacedBoth(player.getName())) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log( - Level.SEVERE, null, ex); - return true; - } - } else if (smanager.worldEdit(player)) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log( - Level.SEVERE, null, ex); - return true; - } - } - } else if (args[1].equals("vert")) { - smanager.vert(player, resadmin); - return true; - } else if (args[1].equals("sky")) { - smanager.sky(player, resadmin); - return true; - } else if (args[1].equals("bedrock")) { - smanager.bedrock(player, resadmin); - return true; - } else if (args[1].equals("coords")) { - Location playerLoc1 = smanager.getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN - + language.getPhrase("Primary.Selection") + ":" - + ChatColor.AQUA + " (" + playerLoc1.getBlockX() - + ", " + playerLoc1.getBlockY() + ", " - + playerLoc1.getBlockZ() + ")"); - } - Location playerLoc2 = smanager.getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN - + language.getPhrase("Secondary.Selection") + ":" - + ChatColor.AQUA + " (" + playerLoc2.getBlockX() - + ", " + playerLoc2.getBlockY() + ", " - + playerLoc2.getBlockZ() + ")"); - } - return true; - } else if (args[1].equals("chunk")) { - smanager.selectChunk(player); - return true; - } else if (args[1].equals("worldedit")) { - if (smanager.worldEdit(player)) { - player.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase( - "SelectionSuccess")); - } - return true; - } - } else if (args.length == 3) { - if (args[1].equals("expand")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, false, amount); - return true; - } else if (args[1].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, true, amount); - return true; - } - } - if (args.length > 1 && args[1].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 2) { - res = rmanager.getByName(args[2]); - } else { - res = rmanager.getByLoc(player.getLocation()); - } - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("SelectionArea", ChatColor.GOLD - + areaName + ChatColor.GREEN + "." - + ChatColor.GOLD + resName + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("AreaNonExist")); - } - return true; - } else { - try { - smanager.selectBySize(player, Integer.parseInt(args[1]), - Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectionFail")); - return true; - } - } - } - - private boolean commandResCreate(String[] args, boolean resadmin, - Player player, int page) { - if (args.length != 2) { - return false; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager() - .getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence - .getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - rmanager.addResidence(player, args[1], - smanager.getPlayerLoc1(player.getName()), - smanager.getPlayerLoc2(player.getName()), resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectPoints")); - return true; - } - } - - private boolean commandResSubzone(String[] args, boolean resadmin, - Player player, int page) { - if (args.length != 2 && args.length != 3) { - return false; - } - String zname; - String parent; - if (args.length == 2) { - parent = rmanager.getNameByLoc(player.getLocation()); - zname = args[1]; - } else { - parent = args[1]; - zname = args[2]; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager() - .getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence - .getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(parent); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - res.addSubzone(player, smanager.getPlayerLoc1(player.getName()), - smanager.getPlayerLoc2(player.getName()), zname, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectPoints")); - return true; - } - } - - private boolean commandResArea(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.removeArea(player, args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) server - .getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence - .getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.addArea( - player, - new CuboidArea(smanager.getPlayerLoc1(player - .getName()), smanager - .getPlayerLoc2(player.getName())), - args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectPoints")); - } - return true; - } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) server - .getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence - .getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.replaceArea( - player, - new CuboidArea(smanager.getPlayerLoc1(player - .getName()), smanager - .getPlayerLoc2(player.getName())), - args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("SelectPoints")); - } - return true; - } - } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if ((args.length == 3 || args.length == 4) - && args[1].equals("listall")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResRemove(String[] args, boolean resadmin, - CommandSender sender, int page) { - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - ClaimedResidence res = rmanager.getByName(area); - if (res.getParent() != null) { - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) - || !area.equalsIgnoreCase(deleteConfirm - .get(player.getName()))) { - player.sendMessage(ChatColor.RED - + language.getPhrase( - "DeleteSubzoneConfirm", - ChatColor.YELLOW + words - + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } else { - if (!deleteConfirm.containsKey(player.getName()) - || !area.equalsIgnoreCase(deleteConfirm - .get(player.getName()))) { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteConfirm", - ChatColor.YELLOW + area - + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } - } - return false; - } - } - if (args.length != 2) { - return false; - } - if (player != null) { - if (!deleteConfirm.containsKey(player.getName()) - || !args[1].equalsIgnoreCase(deleteConfirm.get(player - .getName()))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteConfirm", - ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("DeleteSubzoneConfirm", - ChatColor.YELLOW + words + ChatColor.RED)); - } - deleteConfirm.put(player.getName(), args[1]); - } else { - rmanager.removeResidence(player, args[1], resadmin); - } - } else { - if (!deleteConfirm.containsKey("Console") - || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - server.getConsoleSender().sendMessage( - ChatColor.RED - + language.getPhrase("DeleteConfirm", - ChatColor.YELLOW + args[1] - + ChatColor.RED)); - } else { - server.getConsoleSender().sendMessage( - ChatColor.RED - + language.getPhrase( - "DeleteSubzoneConfirm", - ChatColor.YELLOW + words - + ChatColor.RED)); - } - deleteConfirm.put("Console", args[1]); - } else { - rmanager.removeResidence(args[1]); - } - } - return true; - } - - private boolean commandResConfirm(String[] args, boolean resadmin, - CommandSender sender, int page) { - Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } - if (args.length == 1) { - String area = deleteConfirm.get(name); - if (area == null) { - sender.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } else { - rmanager.removeResidence(player, area, resadmin); - deleteConfirm.remove(name); - if (player == null) { - sender.sendMessage(ChatColor.GREEN - + Residence.getLanguage().getPhrase( - "ResidenceRemove", - ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } - } - return true; - } - - private boolean commandResSet(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 3) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.getByName(area).getPermissions() - .setFlag(player, args[1], args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setFlag(player, args[2], args[3], - resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResPset(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[1], - resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[2], - resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[1], args[2], - args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[2], args[3], - args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResGset(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], - args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidArea")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], - args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResLset(String[] args, boolean resadmin, - Player player, int page) { - ClaimedResidence res = null; - Material mat = null; - String listtype = null; - boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { - res = rmanager.getByLoc(player.getLocation()); - showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = rmanager.getByName(args[1]); - showinfo = true; - } - if (showinfo) { - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - player.sendMessage(ChatColor.RED + "Blacklist:"); - res.getItemBlacklist().printList(player); - player.sendMessage(ChatColor.GREEN + "Ignorelist:"); - res.getItemIgnoreList().printList(player); - return true; - } else if (args.length == 4) { - res = rmanager.getByName(args[1]); - listtype = args[2]; - try { - mat = Material.valueOf(args[3].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMaterial")); - return true; - } - } else if (args.length == 3) { - res = rmanager.getByLoc(player.getLocation()); - listtype = args[1]; - try { - mat = Material.valueOf(args[2].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMaterial")); - return true; - } - } - if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { - res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { - res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidList")); - } - return true; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - return true; - } - } - - private boolean commandResBank(String[] args, boolean resadmin, - Player player, int page) { - if (args.length != 3) { - return false; - } - ClaimedResidence res = rmanager.getByName(plistener - .getCurrentResidenceName(player.getName())); - if (res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NotInResidence")); - return true; - } - int amount = 0; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidAmount")); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(player, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(player, amount, resadmin); - } else { - return false; - } - return true; - } - - private boolean commandResLease(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 2 || args.length == 3) { - if (args[1].equals("renew")) { - if (args.length == 3) { - leasemanager.renewArea(args[2], player); - } else { - leasemanager - .renewArea( - rmanager.getNameByLoc(player.getLocation()), - player); - } - return true; - } else if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager() - .getByName(args[2]); - if (res == null || leasemanager.leaseExpires(args[2])) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("LeaseRenewalCost", - ChatColor.RED + args[2] - + ChatColor.YELLOW + "." - + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - String area = rmanager.getNameByLoc(player.getLocation()); - ClaimedResidence res = rmanager.getByName(area); - if (area == null || res == null) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidArea")); - return true; - } - if (leasemanager.leaseExpires(area)) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW - + language.getPhrase("LeaseRenewalCost", - ChatColor.RED + area + ChatColor.YELLOW - + "." + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("LeaseNotExpire")); - } - return true; - } - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED - + language.getPhrase("NoPermission")); - return true; - } - if (args[3].equals("infinite")) { - if (leasemanager.leaseExpires(args[2])) { - leasemanager.removeExpireTime(args[2]); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("LeaseInfinite")); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidDays")); - return true; - } - leasemanager.setExpireTime(player, args[2], days); - return true; - } - } - } - return false; - } - - private boolean commandResMarket(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 1) { - return false; - } - String command = args[1].toLowerCase(); - if (command.equals("list")) { - return commandResMarketList(args, resadmin, player, page); - } - if (command.equals("autorenew")) { - return commandResMarketAutorenew(args, resadmin, player, page); - } - if (command.equals("rentable")) { - return commandResMarketRentable(args, resadmin, player, page); - } - if (command.equals("rent")) { - return commandResMarketRent(args, resadmin, player, page); - } - if (command.equals("release")) { - if (args.length != 3) { - return false; - } - if (rentmanager.isRented(args[2])) { - rentmanager.removeFromForRent(player, args[2], resadmin); - } else { - rentmanager.unrent(player, args[2], resadmin); - } - return true; - } - if (command.equals("info")) { - if (args.length == 2) { - String areaname = rmanager.getNameByLoc(player.getLocation()); - tmanager.viewSaleInfo(areaname, player); - if (cmanager.enabledRentSystem() - && rentmanager.isForRent(areaname)) { - rentmanager.printRentInfo(player, areaname); - } - } else if (args.length == 3) { - tmanager.viewSaleInfo(args[2], player); - if (cmanager.enabledRentSystem() - && rentmanager.isForRent(args[2])) { - rentmanager.printRentInfo(player, args[2]); - } - } else { - return false; - } - return true; - } - if (command.equals("buy")) { - if (args.length != 3) { - return false; - } - tmanager.buyPlot(args[2], player, resadmin); - return true; - } - if (command.equals("unsell")) { - if (args.length != 3) { - return false; - } - tmanager.removeFromSale(player, args[2], resadmin); - return true; - } - if (command.equals("sell")) { - if (args.length != 4) { - return false; - } - int amount; - try { - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidAmount")); - return true; - } - tmanager.putForSale(args[2], player, amount, resadmin); - return true; - } - return false; - } - - private boolean commandResMarketRent(String[] args, boolean resadmin, - Player player, int page) { - if (args.length < 3 || args.length > 4) { - return false; - } - boolean repeat = false; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") - || args[3].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[3].equalsIgnoreCase("f") - && !args[3].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.rent(player, args[2], repeat, resadmin); - return true; - } - - private boolean commandResMarketRentable(String[] args, boolean resadmin, - Player player, int page) { - if (args.length < 5 || args.length > 6) { - return false; - } - if (!cmanager.enabledRentSystem()) { - player.sendMessage(ChatColor.RED - + language.getPhrase("RentDisabled")); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidCost")); - return true; - } - try { - days = Integer.parseInt(args[4]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidDays")); - return true; - } - boolean repeat = false; - if (args.length == 6) { - if (args[5].equalsIgnoreCase("t") - || args[5].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[5].equalsIgnoreCase("f") - && !args[5].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); - return true; - } - - private boolean commandResMarketAutorenew(String[] args, boolean resadmin, - Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED - + language.getPhrase("MarketDisabled")); - return true; - } - if (args.length != 4) { - return false; - } - boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { - value = true; - } else if (args[3].equalsIgnoreCase("false") - || args[3].equalsIgnoreCase("f")) { - value = false; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidBoolean")); - return true; - } - if (rentmanager.isRented(args[2]) - && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase( - player.getName())) { - rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (rentmanager.isForRent(args[2])) { - rentmanager.setRentRepeatable(player, args[2], value, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW - + args[2] + ChatColor.RED)); - } - return true; - } - - private boolean commandResMarketList(String[] args, boolean resadmin, - Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED - + language.getPhrase("MarketDisabled")); - return true; - } - player.sendMessage(ChatColor.BLUE + "---" - + language.getPhrase("MarketList") + "---"); - tmanager.printForSaleResidences(player); - if (cmanager.enabledRentSystem()) { - rentmanager.printRentableResidences(player); - } - return true; - } - - private boolean commandResMessage(String[] args, boolean resadmin, - Player player, int page) { - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMessageType")); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = rmanager.getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } - return true; - } - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMessageType")); - return true; - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidMessageType")); - return true; - } - if (start == 0) { - return false; - } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; - } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResSublist(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 1 || args.length == 2 || args.length == 3) { - ClaimedResidence res; - if (args.length == 1) { - res = rmanager.getByLoc(player.getLocation()); - } else { - res = rmanager.getByName(args[1]); - } - if (res != null) { - res.printSubzoneList(player, page); - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResCompass(String[] args, boolean resadmin, - Player player, int page) { - if (args.length != 2) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("CompassTargetReset")); - return true; - } - if (rmanager.getByName(args[1]) != null) { - if (rmanager.getByName(args[1]).getWorld() - .equalsIgnoreCase(player.getWorld().getName())) { - Location low = rmanager.getByName(args[1]).getArea("main") - .getLowLoc(); - Location high = rmanager.getByName(args[1]).getArea("main") - .getHighLoc(); - Location mid = new Location(low.getWorld(), - (low.getBlockX() + high.getBlockX()) / 2, - (low.getBlockY() + high.getBlockY()) / 2, - (low.getBlockZ() + high.getBlockZ()) / 2); - player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("CompassTargetSet", - ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } - } else { - player.sendMessage(ChatColor.RED - + language.getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResList(String[] args, boolean resadmin, - Player player, int page) { - if (args.length == 2) { - if (args[1].equals("list")) { - pmanager.printLists(player); - return true; - } - } else if (args.length == 3) { - if (args[1].equals("view")) { - pmanager.printList(player, args[2]); - return true; - } else if (args[1].equals("remove")) { - pmanager.removeList(player, args[2]); - return true; - } else if (args[1].equals("add")) { - pmanager.makeList(player, args[2]); - return true; - } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - pmanager.applyListToResidence(player, args[2], args[3], - resadmin); - return true; - } - } else if (args.length == 5) { - if (args[1].equals("set")) { - pmanager.getList(player.getName(), args[2]).setFlag(args[3], - FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("FlagSet")); - return true; - } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - pmanager.getList(player.getName(), args[2]).setGroupFlag( - args[3], args[4], - FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("FlagSet")); - return true; - } else if (args[1].equals("pset")) { - pmanager.getList(player.getName(), args[2]).setPlayerFlag( - args[3], args[4], - FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN - + language.getPhrase("FlagSet")); - return true; - } - } - return false; - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.bekvon.bukkit.residence; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; + +public class ResidenceCommandListener extends Residence { + + private boolean commandHelp(String[] args, boolean resadmin, + CommandSender sender) { + if (helppages != null) { + String helppath = "res"; + for (String arg : args) { + if (arg.equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + arg; + } + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + + language.getPhrase("InvalidHelp")); + } + } + if (helppages.containesEntry(helppath)) { + helppages.printHelp(sender, page, helppath); + return true; + } + } + return false; + } + + @SuppressWarnings("deprecation") + private boolean commandRes(String[] args, boolean resadmin, + Command command, CommandSender sender) { + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") + || args.length > 1 && args[args.length - 2].equals("?")) + return commandHelp(args, resadmin, sender); + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + Player player = null; + PermissionGroup group = null; + String pname = null; + if (sender instanceof Player) { + player = (Player) sender; + group = Residence.getPermissionManager().getGroup(player); + pname = player.getName(); + } else { + resadmin = true; + } + if (cmanager.allowAdminsOnly()) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("AdminOnly")); + return true; + } + } + if (args.length == 0) + return false; + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; + } + String cmd = args[0].toLowerCase(); + if (cmd.equals("remove") || cmd.equals("delete")) + return commandResRemove(args, resadmin, sender, page); + if (cmd.equals("confirm")) + return commandResConfirm(args, resadmin, sender, page); + if (cmd.equals("version")) { + sender.sendMessage(ChatColor.GRAY + + "------------------------------------"); + sender.sendMessage(ChatColor.RED + "This server running " + + ChatColor.GOLD + "Residence" + ChatColor.RED + + " version: " + ChatColor.BLUE + + this.getDescription().getVersion()); + sender.sendMessage(ChatColor.GREEN + "Created by: " + + ChatColor.YELLOW + "bekvon"); + sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + + ChatColor.YELLOW + "DartCZ"); + sender.sendMessage(ChatColor.RED + "Updated to 2.7.0.0 by: " + + ChatColor.YELLOW + "喵♂呜"); + String names = null; + List authlist = this.getDescription().getAuthors(); + for (String auth : authlist) { + if (names == null) { + names = auth; + } else { + names = names + ", " + auth; + } + } + sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + + names); + sender.sendMessage(ChatColor.DARK_AQUA + + "For a command list, and help, see the wiki:"); + sender.sendMessage(ChatColor.GREEN + + "http://residencebukkitmod.wikispaces.com/"); + sender.sendMessage(ChatColor.AQUA + + "Visit the Spigot Resource page at:"); + sender.sendMessage(ChatColor.BLUE + + "http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/"); + sender.sendMessage(ChatColor.GRAY + + "------------------------------------"); + return true; + } + if (cmd.equals("setowner") && args.length == 3) { + if (!resadmin) { + sender.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setOwner(args[2], true); + if (area.getParent() == null) { + sender.sendMessage(ChatColor.GREEN + + language.getPhrase("ResidenceOwnerChange", + ChatColor.YELLOW + " " + args[1] + " " + + ChatColor.GREEN + "." + + ChatColor.YELLOW + args[2] + + ChatColor.GREEN)); + } else { + sender.sendMessage(ChatColor.GREEN + + language.getPhrase( + "SubzoneOwnerChange", + ChatColor.YELLOW + + " " + + args[1].split("\\.")[args[1] + .split("\\.").length - 1] + + " " + ChatColor.GREEN + "." + + ChatColor.YELLOW + args[2] + + ChatColor.GREEN)); + } + } else { + sender.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + if (player == null) + return true; + if (command.getName().equals("resadmin")) { + if (args.length == 1 && args[0].equals("on")) { + resadminToggle.add(player.getName()); + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("AdminToggle", + language.getPhrase("TurnOn"))); + return true; + } else if (args.length == 1 && args[0].equals("off")) { + resadminToggle.remove(player.getName()); + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("AdminToggle", + language.getPhrase("TurnOff"))); + return true; + } + } + if (!resadmin && resadminToggle.contains(player.getName())) { + if (!gmanager.isResidenceAdmin(player)) { + resadminToggle.remove(player.getName()); + } + } + if (cmd.equals("select")) + return commandResSelect(args, resadmin, player, page); + if (cmd.equals("create")) + return commandResCreate(args, resadmin, player, page); + if (cmd.equals("subzone") || cmd.equals("sz")) + return commandResSubzone(args, resadmin, player, page); + if (cmd.equals("sublist")) + return commandResSublist(args, resadmin, player, page); + if (cmd.equals("removeall")) { + if (args.length != 2) + return false; + if (resadmin || args[1].endsWith(pname)) { + rmanager.removeAllByOwner(player, args[1]); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("RemovePlayersResidences", + ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + } + return true; + } + if (cmd.equals("compass")) + return commandResCompass(args, resadmin, player, page); + if (cmd.equals("area")) + return commandResArea(args, resadmin, player, page); + if (cmd.equals("lists")) + return commandResList(args, resadmin, player, page); + if (cmd.equals("default")) { + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + res.getPermissions().applyDefaultFlags(player, resadmin); + return true; + } + return false; + } + if (cmd.equals("limits")) { + if (args.length == 1) { + gmanager.getGroup(player).printLimits(player); + return true; + } + return false; + } + if (cmd.equals("info")) { + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.printAreaInfo(area, player); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 2) { + rmanager.printAreaInfo(args[1], player); + return true; + } + return false; + } + if (cmd.equals("check")) { + if (args.length == 3 || args.length == 4) { + if (args.length == 4) { + pname = args[3]; + } + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { + player.sendMessage(language.getPhrase("FlagCheckFalse", + ChatColor.YELLOW + args[2] + ChatColor.RED + "." + + ChatColor.YELLOW + pname + ChatColor.RED + + "." + ChatColor.YELLOW + args[1] + + ChatColor.RED)); + } else { + player.sendMessage(language + .getPhrase( + "FlagCheckTrue", + ChatColor.GREEN + + args[2] + + ChatColor.YELLOW + + "." + + ChatColor.GREEN + + pname + + ChatColor.YELLOW + + "." + + ChatColor.YELLOW + + args[1] + + ChatColor.RED + + "." + + (res.getPermissions().playerHas( + pname, + res.getPermissions() + .getWorld(), + args[2], false) ? ChatColor.GREEN + + "TRUE" + : ChatColor.RED + "FALSE"))); + } + return true; + } + return false; + } + if (cmd.equals("current")) { + if (args.length != 1) + return false; + String res = rmanager.getNameByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.GREEN + + language.getPhrase("InResidence", ChatColor.YELLOW + + res + ChatColor.GREEN)); + } + return true; + } + if (cmd.equals("set")) + return commandResSet(args, resadmin, player, page); + if (cmd.equals("pset")) + return commandResPset(args, resadmin, player, page); + if (cmd.equals("gset")) + return commandResGset(args, resadmin, player, page); + if (cmd.equals("lset")) + return commandResLset(args, resadmin, player, page); + if (cmd.equals("list")) { + if (args.length == 1) { + rmanager.listResidences(player); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page); + } catch (Exception ex) { + rmanager.listResidences(player, args[1]); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page); + return true; + } + return false; + } + if (cmd.equals("listhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listResidences(player, 1, true); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page, true); + } catch (Exception ex) { + rmanager.listResidences(player, args[1], 1, true); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page, true); + return true; + } + return false; + } + if (cmd.equals("rename")) { + if (args.length == 3) { + rmanager.renameResidence(player, args[1], args[2], resadmin); + return true; + } + return false; + } + if (cmd.equals("renamearea")) { + if (args.length == 4) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + res.renameArea(player, args[2], args[3], resadmin); + return true; + } + return false; + } + if (cmd.equals("unstuck")) { + if (args.length != 1) + return false; + group = gmanager.getGroup(player); + if (!group.hasUnstuckAccess()) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("Moved") + "..."); + player.teleport(res.getOutsideFreeLoc(player.getLocation())); + } + return true; + } + if (cmd.equals("kick")) { + if (args.length != 2) + return false; + Player targetplayer = Bukkit.getPlayer(args[1]); + if (targetplayer == null) { + + } + group = gmanager.getGroup(player); + if (!group.hasKickAccess()) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence res = rmanager + .getByLoc(targetplayer.getLocation()); + if (res.getOwner().equals(player.getName())) { + if (res.getPlayersInResidence().contains(targetplayer)) { + targetplayer.teleport(res.getOutsideFreeLoc(player + .getLocation())); + targetplayer.sendMessage(ChatColor.RED + + language.getPhrase("Kicked") + "!"); + } + } + + } + if (cmd.equals("mirror")) { + if (args.length != 3) + return false; + rmanager.mirrorPerms(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("listall")) { + if (args.length == 1) { + rmanager.listAllResidences(player, 1); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page); + } catch (Exception ex) { + } + } else + return false; + return true; + } + if (cmd.equals("listallhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listAllResidences(player, 1, true); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page, true); + } catch (Exception ex) { + } + } else + return false; + return true; + } + if (cmd.equals("material")) { + if (args.length != 2) + return false; + try { + player.sendMessage(ChatColor.GREEN + + language.getPhrase( + "MaterialGet", + ChatColor.GOLD + + args[1] + + ChatColor.GREEN + + "." + + ChatColor.RED + + Material.getMaterial( + Integer.parseInt(args[1])) + .name() + ChatColor.GREEN)); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMaterial")); + } + return true; + } + if (cmd.equals("tpset")) { + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setTpLoc(player, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tp")) { + if (args.length != 2) + return false; + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + res.tpToResidence(player, player, resadmin); + return true; + } + if (cmd.equals("lease")) + return commandResLease(args, resadmin, player, page); + if (cmd.equals("bank")) + return commandResBank(args, resadmin, player, page); + if (cmd.equals("market")) + return commandResMarket(args, resadmin, player, page); + if (cmd.equals("message")) + return commandResMessage(args, resadmin, player, page); + if (cmd.equals("give") && args.length == 3) { + rmanager.giveResidence(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("server")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + res.getPermissions().setOwner("Server Land", false); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("ResidenceOwnerChange", + ChatColor.YELLOW + args[1] + ChatColor.GREEN + + "." + ChatColor.YELLOW + + "Server Land" + ChatColor.GREEN)); + return true; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + } + if (cmd.equals("clearflags")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().clearFlags(); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("FlagsCleared")); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tool")) { + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("SelectionTool") + ":" + + ChatColor.GREEN + + Material.getMaterial(cmanager.getSelectionTooldID())); + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + + Material.getMaterial(cmanager.getInfoToolID())); + return true; + } + return false; + } + + private boolean commandResArea(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 4) { + if (args[1].equals("remove")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.removeArea(player, args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args[1].equals("add")) { + WorldEditPlugin wep = (WorldEditPlugin) server + .getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence + .getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (smanager.hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.addArea( + player, + new CuboidArea(smanager.getPlayerLoc1(player + .getName()), smanager + .getPlayerLoc2(player.getName())), + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectPoints")); + } + return true; + } else if (args[1].equals("replace")) { + WorldEditPlugin wep = (WorldEditPlugin) server + .getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence + .getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (smanager.hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.replaceArea( + player, + new CuboidArea(smanager.getPlayerLoc1(player + .getName()), smanager + .getPlayerLoc2(player.getName())), + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectPoints")); + } + return true; + } + } + if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if ((args.length == 3 || args.length == 4) + && args[1].equals("listall")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAdvancedAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResBank(String[] args, boolean resadmin, + Player player, int page) { + if (args.length != 3) + return false; + ClaimedResidence res = rmanager.getByName(plistener + .getCurrentResidenceName(player.getName())); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NotInResidence")); + return true; + } + int amount = 0; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidAmount")); + return true; + } + if (args[1].equals("deposit")) { + res.getBank().deposit(player, amount, resadmin); + } else if (args[1].equals("withdraw")) { + res.getBank().withdraw(player, amount, resadmin); + } else + return false; + return true; + } + + private boolean commandResCompass(String[] args, boolean resadmin, + Player player, int page) { + if (args.length != 2) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("CompassTargetReset")); + return true; + } + if (rmanager.getByName(args[1]) != null) { + if (rmanager.getByName(args[1]).getWorld() + .equalsIgnoreCase(player.getWorld().getName())) { + Location low = rmanager.getByName(args[1]).getArea("main") + .getLowLoc(); + Location high = rmanager.getByName(args[1]).getArea("main") + .getHighLoc(); + Location mid = new Location(low.getWorld(), + (low.getBlockX() + high.getBlockX()) / 2, + (low.getBlockY() + high.getBlockY()) / 2, + (low.getBlockZ() + high.getBlockZ()) / 2); + player.setCompassTarget(mid); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("CompassTargetSet", + ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + + private boolean commandResConfirm(String[] args, boolean resadmin, + CommandSender sender, int page) { + Player player = null; + String name = "Console"; + if (sender instanceof Player) { + player = (Player) sender; + name = player.getName(); + } + if (args.length == 1) { + String area = deleteConfirm.get(name); + if (area == null) { + sender.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } else { + rmanager.removeResidence(player, area, resadmin); + deleteConfirm.remove(name); + if (player == null) { + sender.sendMessage(ChatColor.GREEN + + Residence.getLanguage().getPhrase( + "ResidenceRemove", + ChatColor.YELLOW + name + ChatColor.GREEN)); + } + } + } + return true; + } + + private boolean commandResCreate(String[] args, boolean resadmin, + Player player, int page) { + if (args.length != 2) + return false; + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager() + .getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence + .getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (smanager.hasPlacedBoth(player.getName())) { + rmanager.addResidence(player, args[1], + smanager.getPlayerLoc1(player.getName()), + smanager.getPlayerLoc2(player.getName()), resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectPoints")); + return true; + } + } + + private boolean commandResGset(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[1], args[2], + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidArea")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[2], args[3], + args[4], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResLease(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 2 || args.length == 3) { + if (args[1].equals("renew")) { + if (args.length == 3) { + leasemanager.renewArea(args[2], player); + } else { + leasemanager + .renewArea( + rmanager.getNameByLoc(player.getLocation()), + player); + } + return true; + } else if (args[1].equals("cost")) { + if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager() + .getByName(args[2]); + if (res == null || leasemanager.leaseExpires(args[2])) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("LeaseRenewalCost", + ChatColor.RED + args[2] + + ChatColor.YELLOW + "." + + ChatColor.RED + cost + + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + String area = rmanager.getNameByLoc(player.getLocation()); + ClaimedResidence res = rmanager.getByName(area); + if (area == null || res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidArea")); + return true; + } + if (leasemanager.leaseExpires(area)) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + + language.getPhrase("LeaseRenewalCost", + ChatColor.RED + area + ChatColor.YELLOW + + "." + ChatColor.RED + cost + + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("LeaseNotExpire")); + } + return true; + } + } + } else if (args.length == 4) { + if (args[1].equals("set")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("NoPermission")); + return true; + } + if (args[3].equals("infinite")) { + if (leasemanager.leaseExpires(args[2])) { + leasemanager.removeExpireTime(args[2]); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("LeaseInfinite")); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidDays")); + return true; + } + leasemanager.setExpireTime(player, args[2], days); + return true; + } + } + } + return false; + } + + private boolean commandResList(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 2) { + if (args[1].equals("list")) { + pmanager.printLists(player); + return true; + } + } else if (args.length == 3) { + if (args[1].equals("view")) { + pmanager.printList(player, args[2]); + return true; + } else if (args[1].equals("remove")) { + pmanager.removeList(player, args[2]); + return true; + } else if (args[1].equals("add")) { + pmanager.makeList(player, args[2]); + return true; + } + } else if (args.length == 4) { + if (args[1].equals("apply")) { + pmanager.applyListToResidence(player, args[2], args[3], + resadmin); + return true; + } + } else if (args.length == 5) { + if (args[1].equals("set")) { + pmanager.getList(player.getName(), args[2]).setFlag(args[3], + FlagPermissions.stringToFlagState(args[4])); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("FlagSet")); + return true; + } + } else if (args.length == 6) { + if (args[1].equals("gset")) { + pmanager.getList(player.getName(), args[2]).setGroupFlag( + args[3], args[4], + FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("FlagSet")); + return true; + } else if (args[1].equals("pset")) { + pmanager.getList(player.getName(), args[2]).setPlayerFlag( + args[3], args[4], + FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("FlagSet")); + return true; + } + } + return false; + } + + private boolean commandResLset(String[] args, boolean resadmin, + Player player, int page) { + ClaimedResidence res = null; + Material mat = null; + String listtype = null; + boolean showinfo = false; + if (args.length == 2 && args[1].equals("info")) { + res = rmanager.getByLoc(player.getLocation()); + showinfo = true; + } else if (args.length == 3 && args[2].equals("info")) { + res = rmanager.getByName(args[1]); + showinfo = true; + } + if (showinfo) { + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + player.sendMessage(ChatColor.RED + "Blacklist:"); + res.getItemBlacklist().printList(player); + player.sendMessage(ChatColor.GREEN + "Ignorelist:"); + res.getItemIgnoreList().printList(player); + return true; + } else if (args.length == 4) { + res = rmanager.getByName(args[1]); + listtype = args[2]; + try { + mat = Material.valueOf(args[3].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMaterial")); + return true; + } + } else if (args.length == 3) { + res = rmanager.getByLoc(player.getLocation()); + listtype = args[1]; + try { + mat = Material.valueOf(args[2].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMaterial")); + return true; + } + } + if (res != null) { + if (listtype.equalsIgnoreCase("blacklist")) { + res.getItemBlacklist().playerListChange(player, mat, resadmin); + } else if (listtype.equalsIgnoreCase("ignorelist")) { + res.getItemIgnoreList().playerListChange(player, mat, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidList")); + } + return true; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + } + + private boolean commandResMarket(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 1) + return false; + String command = args[1].toLowerCase(); + if (command.equals("list")) + return commandResMarketList(args, resadmin, player, page); + if (command.equals("autorenew")) + return commandResMarketAutorenew(args, resadmin, player, page); + if (command.equals("rentable")) + return commandResMarketRentable(args, resadmin, player, page); + if (command.equals("rent")) + return commandResMarketRent(args, resadmin, player, page); + if (command.equals("release")) { + if (args.length != 3) + return false; + if (rentmanager.isRented(args[2])) { + rentmanager.removeFromForRent(player, args[2], resadmin); + } else { + rentmanager.unrent(player, args[2], resadmin); + } + return true; + } + if (command.equals("info")) { + if (args.length == 2) { + String areaname = rmanager.getNameByLoc(player.getLocation()); + tmanager.viewSaleInfo(areaname, player); + if (cmanager.enabledRentSystem() + && rentmanager.isForRent(areaname)) { + rentmanager.printRentInfo(player, areaname); + } + } else if (args.length == 3) { + tmanager.viewSaleInfo(args[2], player); + if (cmanager.enabledRentSystem() + && rentmanager.isForRent(args[2])) { + rentmanager.printRentInfo(player, args[2]); + } + } else + return false; + return true; + } + if (command.equals("buy")) { + if (args.length != 3) + return false; + tmanager.buyPlot(args[2], player, resadmin); + return true; + } + if (command.equals("unsell")) { + if (args.length != 3) + return false; + tmanager.removeFromSale(player, args[2], resadmin); + return true; + } + if (command.equals("sell")) { + if (args.length != 4) + return false; + int amount; + try { + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidAmount")); + return true; + } + tmanager.putForSale(args[2], player, amount, resadmin); + return true; + } + return false; + } + + private boolean commandResMarketAutorenew(String[] args, boolean resadmin, + Player player, int page) { + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + + language.getPhrase("MarketDisabled")); + return true; + } + if (args.length != 4) + return false; + boolean value; + if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + value = true; + } else if (args[3].equalsIgnoreCase("false") + || args[3].equalsIgnoreCase("f")) { + value = false; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidBoolean")); + return true; + } + if (rentmanager.isRented(args[2]) + && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase( + player.getName())) { + rentmanager.setRentedRepeatable(player, args[2], value, resadmin); + } else if (rentmanager.isForRent(args[2])) { + rentmanager.setRentRepeatable(player, args[2], value, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + + args[2] + ChatColor.RED)); + } + return true; + } + + private boolean commandResMarketList(String[] args, boolean resadmin, + Player player, int page) { + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + + language.getPhrase("MarketDisabled")); + return true; + } + player.sendMessage(ChatColor.BLUE + "---" + + language.getPhrase("MarketList") + "---"); + tmanager.printForSaleResidences(player); + if (cmanager.enabledRentSystem()) { + rentmanager.printRentableResidences(player); + } + return true; + } + + private boolean commandResMarketRent(String[] args, boolean resadmin, + Player player, int page) { + if (args.length < 3 || args.length > 4) + return false; + boolean repeat = false; + if (args.length == 4) { + if (args[3].equalsIgnoreCase("t") + || args[3].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[3].equalsIgnoreCase("f") + && !args[3].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.rent(player, args[2], repeat, resadmin); + return true; + } + + private boolean commandResMarketRentable(String[] args, boolean resadmin, + Player player, int page) { + if (args.length < 5 || args.length > 6) + return false; + if (!cmanager.enabledRentSystem()) { + player.sendMessage(ChatColor.RED + + language.getPhrase("RentDisabled")); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidCost")); + return true; + } + try { + days = Integer.parseInt(args[4]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidDays")); + return true; + } + boolean repeat = false; + if (args.length == 6) { + if (args[5].equalsIgnoreCase("t") + || args[5].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[5].equalsIgnoreCase("f") + && !args[5].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); + return true; + } + + private boolean commandResMessage(String[] args, boolean resadmin, + Player player, int page) { + ClaimedResidence res = null; + int start = 0; + boolean enter = false; + if (args.length < 2) + return false; + if (args[1].equals("enter")) { + enter = true; + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("remove")) { + if (args.length > 2 && args[2].equals("enter")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMessageType")); + return true; + } else if (args.length > 2 && args[2].equals("enter")) { + enter = true; + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("remove")) { + res = rmanager.getByName(args[1]); + if (args.length != 4) + return false; + if (args[3].equals("enter")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } + return true; + } else if (args[3].equals("leave")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } + return true; + } + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMessageType")); + return true; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidMessageType")); + return true; + } + if (start == 0) + return false; + String message = ""; + for (int i = start; i < args.length; i++) { + message = message + args[i] + " "; + } + if (res != null) { + res.setEnterLeaveMessage(player, message, enter, resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + + private boolean commandResPset(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[1], + resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[2], + resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[1], args[2], + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[2], args[3], + args[4], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResRemove(String[] args, boolean resadmin, + CommandSender sender, int page) { + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + ClaimedResidence res = rmanager.getByName(area); + if (res.getParent() != null) { + String[] split = area.split("\\."); + String words = split[split.length - 1]; + if (!deleteConfirm.containsKey(player.getName()) + || !area.equalsIgnoreCase(deleteConfirm + .get(player.getName()))) { + player.sendMessage(ChatColor.RED + + language.getPhrase( + "DeleteSubzoneConfirm", + ChatColor.YELLOW + words + + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } else { + if (!deleteConfirm.containsKey(player.getName()) + || !area.equalsIgnoreCase(deleteConfirm + .get(player.getName()))) { + player.sendMessage(ChatColor.RED + + language.getPhrase("DeleteConfirm", + ChatColor.YELLOW + area + + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } + } + return false; + } + } + if (args.length != 2) + return false; + if (player != null) { + if (!deleteConfirm.containsKey(player.getName()) + || !args[1].equalsIgnoreCase(deleteConfirm.get(player + .getName()))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + player.sendMessage(ChatColor.RED + + language.getPhrase("DeleteConfirm", + ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("DeleteSubzoneConfirm", + ChatColor.YELLOW + words + ChatColor.RED)); + } + deleteConfirm.put(player.getName(), args[1]); + } else { + rmanager.removeResidence(player, args[1], resadmin); + } + } else { + if (!deleteConfirm.containsKey("Console") + || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + server.getConsoleSender().sendMessage( + ChatColor.RED + + language.getPhrase("DeleteConfirm", + ChatColor.YELLOW + args[1] + + ChatColor.RED)); + } else { + server.getConsoleSender().sendMessage( + ChatColor.RED + + language.getPhrase( + "DeleteSubzoneConfirm", + ChatColor.YELLOW + words + + ChatColor.RED)); + } + deleteConfirm.put("Console", args[1]); + } else { + rmanager.removeResidence(args[1]); + } + } + return true; + } + + private boolean commandResSelect(String[] args, boolean resadmin, + Player player, int page) { + PermissionGroup group = Residence.getPermissionManager().getGroup( + player); + if (!group.selectCommandAccess() && !resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectDiabled")); + return true; + } + if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 + && !resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectDiabled")); + return true; + } + if ((!player.hasPermission("residence.create") + && player.isPermissionSet("residence.create") + && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectDiabled")); + return true; + } + if (args.length == 2) { + if (args[1].equals("size") || args[1].equals("cost")) { + if (smanager.hasPlacedBoth(player.getName())) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log( + Level.SEVERE, null, ex); + return true; + } + } else if (smanager.worldEdit(player)) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log( + Level.SEVERE, null, ex); + return true; + } + } + } else if (args[1].equals("vert")) { + smanager.vert(player, resadmin); + return true; + } else if (args[1].equals("sky")) { + smanager.sky(player, resadmin); + return true; + } else if (args[1].equals("bedrock")) { + smanager.bedrock(player, resadmin); + return true; + } else if (args[1].equals("coords")) { + Location playerLoc1 = smanager.getPlayerLoc1(player.getName()); + if (playerLoc1 != null) { + player.sendMessage(ChatColor.GREEN + + language.getPhrase("Primary.Selection") + ":" + + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + + ", " + playerLoc1.getBlockY() + ", " + + playerLoc1.getBlockZ() + ")"); + } + Location playerLoc2 = smanager.getPlayerLoc2(player.getName()); + if (playerLoc2 != null) { + player.sendMessage(ChatColor.GREEN + + language.getPhrase("Secondary.Selection") + ":" + + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + + ", " + playerLoc2.getBlockY() + ", " + + playerLoc2.getBlockZ() + ")"); + } + return true; + } else if (args[1].equals("chunk")) { + smanager.selectChunk(player); + return true; + } else if (args[1].equals("worldedit")) { + if (smanager.worldEdit(player)) { + player.sendMessage(ChatColor.GREEN + + Residence.getLanguage().getPhrase( + "SelectionSuccess")); + } + return true; + } + } else if (args.length == 3) { + if (args[1].equals("expand")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, false, amount); + return true; + } else if (args[1].equals("shift")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, true, amount); + return true; + } + } + if (args.length > 1 && args[1].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 2) { + res = rmanager.getByName(args[2]); + } else { + res = rmanager.getByLoc(player.getLocation()); + } + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 3) { + area = res.getArea(args[3]); + areaName = args[3]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + + language.getPhrase("SelectionArea", ChatColor.GOLD + + areaName + ChatColor.GREEN + "." + + ChatColor.GOLD + resName + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("AreaNonExist")); + } + return true; + } else { + try { + smanager.selectBySize(player, Integer.parseInt(args[1]), + Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectionFail")); + return true; + } + } + } + + private boolean commandResSet(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 3) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.getByName(area).getPermissions() + .setFlag(player, args[1], args[2], resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setFlag(player, args[2], args[3], + resadmin); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResSublist(String[] args, boolean resadmin, + Player player, int page) { + if (args.length == 1 || args.length == 2 || args.length == 3) { + ClaimedResidence res; + if (args.length == 1) { + res = rmanager.getByLoc(player.getLocation()); + } else { + res = rmanager.getByName(args[1]); + } + if (res != null) { + res.printSubzoneList(player, page); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResSubzone(String[] args, boolean resadmin, + Player player, int page) { + if (args.length != 2 && args.length != 3) + return false; + String zname; + String parent; + if (args.length == 2) { + parent = rmanager.getNameByLoc(player.getLocation()); + zname = args[1]; + } else { + parent = args[1]; + zname = args[2]; + } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager() + .getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence + .getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (smanager.hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(parent); + if (res == null) { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidResidence")); + return true; + } + res.addSubzone(player, smanager.getPlayerLoc1(player.getName()), + smanager.getPlayerLoc2(player.getName()), zname, resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("SelectPoints")); + return true; + } + } + + @Override + public boolean onCommand(CommandSender sender, Command command, + String label, String[] args) { + ResidenceCommandEvent cevent = new ResidenceCommandEvent( + command.getName(), args, sender); + server.getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) + return true; + if (command.getName().equals("resreload") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + this.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + + "[Residence] 重载配置文件."); + System.out.println("[Residence] 重载 by " + + player.getName() + "."); + } + } else { + this.reloadPlugin(); + System.out.println("[Residence] 重载 by 控制台."); + } + return true; + } + if (command.getName().equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player + && gmanager.isResidenceAdmin((Player) sender)) { + try { + this.loadYml(); + sender.sendMessage(ChatColor.GREEN + + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log( + Level.SEVERE, null, ex); + } + } + return true; + } else if (command.getName().equals("resworld")) { + if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { + if (sender instanceof ConsoleCommandSender) { + rmanager.removeAllFromWorld(sender, args[1]); + return true; + } else { + sender.sendMessage(ChatColor.RED + + "MUST be run from console."); + } + } + return false; + } else if (command.getName().equals("rc")) { + if (sender instanceof Player) { + Player player = (Player) sender; + String pname = player.getName(); + if (cmanager.chatEnabled()) { + if (args.length == 0) { + plistener.tooglePlayerResidenceChat(player); + } else { + String area = plistener.getCurrentResidenceName(pname); + if (area != null) { + ChatChannel channel = chatmanager.getChannel(area); + if (channel != null) { + String message = ""; + for (String arg : args) { + message = message + " " + arg; + } + channel.chat(pname, message); + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("InvalidChannel")); + } + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("NotInResidence")); + } + } + } else { + player.sendMessage(ChatColor.RED + + language.getPhrase("ChatDisabled")); + } + } + return true; + } else if (command.getName().equals("res") + || command.getName().equals("residence") + || command.getName().equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (command.getName().equals("resadmin") + && gmanager.isResidenceAdmin((Player) sender)) { + resadmin = true; + } + if (command.getName().equals("resadmin") + && !gmanager.isResidenceAdmin((Player) sender)) { + ((Player) sender).sendMessage(ChatColor.RED + + language.getPhrase("NonAdmin")); + return true; + } + } else { + resadmin = true; + } + return commandRes(args, resadmin, command, sender); + } + return super.onCommand(sender, command, label, args); + } +} diff --git a/src/com/bekvon/bukkit/residence/config/FileConfig.java b/src/com/bekvon/bukkit/residence/config/FileConfig.java index ada5623..2d7d171 100644 --- a/src/com/bekvon/bukkit/residence/config/FileConfig.java +++ b/src/com/bekvon/bukkit/residence/config/FileConfig.java @@ -30,15 +30,9 @@ import com.google.common.io.Files; */ public class FileConfig extends YamlConfiguration { - protected final DumperOptions yamlOptions = new DumperOptions(); - protected final Representer yamlRepresenter = new YamlRepresenter(); - protected final Yaml yaml = new Yaml(new YamlConstructor(), - yamlRepresenter, yamlOptions); - public static FileConfig init(File file) { return FileConfig.loadConfiguration(file); } - public static FileConfig loadConfiguration(File file) { Validate.notNull(file, "File cannot be null"); FileConfig config = new FileConfig(); @@ -52,6 +46,34 @@ public class FileConfig extends YamlConfiguration { } return config; } + protected final DumperOptions yamlOptions = new DumperOptions(); + + protected final Representer yamlRepresenter = new YamlRepresenter(); + + protected final Yaml yaml = new Yaml(new YamlConstructor(), + yamlRepresenter, yamlOptions); + + @Override + public void load(File file) throws FileNotFoundException, IOException, + InvalidConfigurationException { + Validate.notNull(file, "File cannot be null"); + final FileInputStream stream = new FileInputStream(file); + load(new InputStreamReader(stream, Charsets.UTF_8)); + } + + @Override + public void save(File file) throws IOException { + Validate.notNull(file, "File cannot be null"); + Files.createParentDirs(file); + String data = saveToString(); + Writer writer = new OutputStreamWriter(new FileOutputStream(file), + Charsets.UTF_8); + try { + writer.write(data); + } finally { + writer.close(); + } + } @Override public String saveToString() { @@ -65,24 +87,4 @@ public class FileConfig extends YamlConfiguration { } return header + dump; } - - public void load(File file) throws FileNotFoundException, IOException, - InvalidConfigurationException { - Validate.notNull(file, "File cannot be null"); - final FileInputStream stream = new FileInputStream(file); - load(new InputStreamReader(stream, Charsets.UTF_8)); - } - - public void save(File file) throws IOException { - Validate.notNull(file, "File cannot be null"); - Files.createParentDirs(file); - String data = saveToString(); - Writer writer = new OutputStreamWriter(new FileOutputStream(file), - Charsets.UTF_8); - try { - writer.write(data); - } finally { - writer.close(); - } - } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java index 07da3b1..6cccc8a 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java @@ -5,28 +5,31 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.Cancellable; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + /** * * @author Administrator */ public class CancellableResidenceEvent extends ResidenceEvent implements Cancellable { - protected boolean cancelled; + protected boolean cancelled; - public CancellableResidenceEvent(String eventName, ClaimedResidence resref) - { - super(eventName,resref); - } - - public boolean isCancelled() { - return cancelled; - } + public CancellableResidenceEvent(String eventName, ClaimedResidence resref) + { + super(eventName,resref); + } - public void setCancelled(boolean bln) { - cancelled = bln; - } + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java index 0c3cd9d..bce7a30 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java @@ -5,30 +5,33 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + /** * * @author Administrator */ public class CancellableResidencePlayerEvent extends ResidencePlayerEvent implements Cancellable { - protected boolean cancelled; + protected boolean cancelled; - public CancellableResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) - { - super(eventName, resref, player); - cancelled = false; - } + public CancellableResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) + { + super(eventName, resref, player); + cancelled = false; + } - public boolean isCancelled() { - return cancelled; - } + @Override + public boolean isCancelled() { + return cancelled; + } - public void setCancelled(boolean bln) { - cancelled = bln; - } + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java index df0cf8f..99da572 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java @@ -5,29 +5,32 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + /** * * @author Administrator */ public class CancellableResidencePlayerFlagEvent extends ResidencePlayerFlagEvent implements Cancellable { - protected boolean cancelled; + protected boolean cancelled; - public CancellableResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Player player, String flag, FlagType type, String target) - { - super(eventName, resref, player, flag, type, target); - } + public CancellableResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Player player, String flag, FlagType type, String target) + { + super(eventName, resref, player, flag, type, target); + } - public boolean isCancelled() { - return cancelled; - } + @Override + public boolean isCancelled() { + return cancelled; + } - public void setCancelled(boolean bln) { - cancelled = bln; - } + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java index 31dd5d4..e36f7c2 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java @@ -16,51 +16,53 @@ import org.bukkit.event.HandlerList; */ public class ResidenceCommandEvent extends Event implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } + private static final HandlerList handlers = new HandlerList(); + public static HandlerList getHandlerList() { + return handlers; + } - public static HandlerList getHandlerList() { - return handlers; - } + protected boolean cancelled; - protected boolean cancelled; - protected String cmd; - protected String arglist[]; - CommandSender commandsender; + protected String cmd; + protected String arglist[]; + CommandSender commandsender; + public ResidenceCommandEvent(String command, String args[], CommandSender sender) + { + super(); + cancelled = false; + arglist = args; + cmd = command; + commandsender = sender; + } - public ResidenceCommandEvent(String command, String args[], CommandSender sender) - { - super(); - cancelled = false; - arglist = args; - cmd = command; - commandsender = sender; - } + public String[] getArgs() + { + return arglist; + } - public boolean isCancelled() { - return cancelled; - } + public String getCommand() + { + return cmd; + } - public void setCancelled(boolean bln) { - cancelled = bln; - } + @Override + public HandlerList getHandlers() { + return handlers; + } - public String getCommand() - { - return cmd; - } + public CommandSender getSender() + { + return commandsender; + } - public String[] getArgs() - { - return arglist; - } + @Override + public boolean isCancelled() { + return cancelled; + } - public CommandSender getSender() - { - return commandsender; - } + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index a2bc64a..c63567e 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -5,10 +5,11 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + /** * * @author Administrator @@ -16,30 +17,31 @@ import org.bukkit.event.HandlerList; public class ResidenceEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private String message; - - public HandlerList getHandlers() { - return handlers; - } - public static HandlerList getHandlerList() { - return handlers; + return handlers; } - ClaimedResidence res; + private String message; - public ResidenceEvent(String eventName, ClaimedResidence resref) - { - message = eventName; - res = resref; - } - - public String getMessage() { - return message; - } + ClaimedResidence res; - public ClaimedResidence getResidence() - { - return res; - } + public ResidenceEvent(String eventName, ClaimedResidence resref) + { + message = eventName; + res = resref; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public String getMessage() { + return message; + } + + public ClaimedResidence getResidence() + { + return res; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index a0b00fd..3952420 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -5,53 +5,55 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.HandlerList; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + /** * * @author Administrator */ public class ResidenceFlagCheckEvent extends ResidenceFlagEvent { -private static final HandlerList handlers = new HandlerList(); + private static final HandlerList handlers = new HandlerList(); - public HandlerList getHandlers() { - return handlers; - } + public static HandlerList getHandlerList() { + return handlers; + } - public static HandlerList getHandlerList() { - return handlers; - } + private boolean override; - private boolean override; - private boolean overridevalue; - boolean defaultvalue; + private boolean overridevalue; + boolean defaultvalue; + public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) + { + super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); + defaultvalue = defaultValue; + override = false; + } - public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) - { - super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); - defaultvalue = defaultValue; - override = false; - } + public boolean getDefaultValue() + { + return defaultvalue; + } - public boolean isOverriden() - { - return override; - } + @Override + public HandlerList getHandlers() { + return handlers; + } - public void overrideCheck(boolean flagval) - { - overridevalue = flagval; - override=true; - } + public boolean getOverrideValue() + { + return overridevalue; + } - public boolean getOverrideValue() - { - return overridevalue; - } + public boolean isOverriden() + { + return override; + } - public boolean getDefaultValue() - { - return defaultvalue; - } + public void overrideCheck(boolean flagval) + { + overridevalue = flagval; + override=true; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java index ac38e44..8e6a02c 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java @@ -5,9 +5,10 @@ package com.bekvon.bukkit.residence.event; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.entity.Player; /** * @@ -15,30 +16,31 @@ import org.bukkit.entity.Player; */ public class ResidencePlayerEvent extends ResidenceEvent implements ResidencePlayerEventInterface { - Player p; + Player p; - public ResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) - { - super(eventName, resref); - res = resref; - p = player; - } + public ResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) + { + super(eventName, resref); + res = resref; + p = player; + } - public boolean isPlayer() - { - return p!=null; - } + @Override + public Player getPlayer() + { + return p; + } - public boolean isAdmin() - { - if(isPlayer()) - { - return Residence.getPermissionManager().isResidenceAdmin(p); - } - return true; - } - public Player getPlayer() - { - return p; - } + @Override + public boolean isAdmin() + { + if(isPlayer()) + return Residence.getPermissionManager().isResidenceAdmin(p); + return true; + } + @Override + public boolean isPlayer() + { + return p!=null; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java index 6cf9d6d..ca108f9 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java @@ -5,38 +5,40 @@ package com.bekvon.bukkit.residence.event; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.entity.Player; /** * * @author Administrator */ public class ResidencePlayerFlagEvent extends ResidenceFlagEvent implements ResidencePlayerEventInterface { - Player p; + Player p; - public ResidencePlayerFlagEvent(String eventName,ClaimedResidence resref, Player player, String flag, FlagType type, String target) - { - super(eventName, resref, flag, type, target); - p = player; - } + public ResidencePlayerFlagEvent(String eventName,ClaimedResidence resref, Player player, String flag, FlagType type, String target) + { + super(eventName, resref, flag, type, target); + p = player; + } - public boolean isPlayer() - { - return p!=null; - } + @Override + public Player getPlayer() { + return p; + } - public boolean isAdmin() - { - if(isPlayer()) - { - return Residence.getPermissionManager().isResidenceAdmin(p); - } - return true; - } + @Override + public boolean isAdmin() + { + if(isPlayer()) + return Residence.getPermissionManager().isResidenceAdmin(p); + return true; + } - public Player getPlayer() { - return p; - } + @Override + public boolean isPlayer() + { + return p!=null; + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java index 74df940..f6030ed 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java @@ -1,24 +1,25 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class ResidenceRenameEvent extends ResidenceEvent { - protected String NewResName; - protected String OldResName; - protected ClaimedResidence res; - public ResidenceRenameEvent(ClaimedResidence resref, String NewName, String OldName) { - super("RESIDENCE_RENAME", resref); - NewResName = NewName; - OldResName = OldName; - res = resref; - } - public String getNewResidenceName() { - return NewResName; - } - public String getOldResidenceName() { - return OldResName; - } - public ClaimedResidence getResidence() { - return res; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResidenceRenameEvent extends ResidenceEvent { + protected String NewResName; + protected String OldResName; + protected ClaimedResidence res; + public ResidenceRenameEvent(ClaimedResidence resref, String NewName, String OldName) { + super("RESIDENCE_RENAME", resref); + NewResName = NewName; + OldResName = OldName; + res = resref; + } + public String getNewResidenceName() { + return NewResName; + } + public String getOldResidenceName() { + return OldResName; + } + @Override + public ClaimedResidence getResidence() { + return res; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a41e497..1d3c435 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -32,695 +32,679 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; /** - * + * * @author Administrator */ public class ResidenceManager { - protected Map residences; - protected Map>> chunkResidences; + public static final class ChunkRef { - public ResidenceManager() { - residences = new HashMap(); - chunkResidences = new HashMap>>(); - } + public static int getChunkCoord(final int val) { + // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) + return val >> 4; + } + private final int z; + private final int x; - public ClaimedResidence getByLoc(Location loc) { - if (loc == null) { - return null; - } - ClaimedResidence res = null; - boolean found = false; - String world = loc.getWorld().getName(); - ChunkRef chunk = new ChunkRef( loc ); - if (chunkResidences.get(world) != null) { - if (chunkResidences.get(world).get(chunk) != null) { - for (String key : chunkResidences.get(world).get(chunk)) { - ClaimedResidence entry = residences.get(key); - if (entry.containsLoc(loc)) { - res = entry; - found = true; - break; - } - } - } - } - if (!found) { - return null; - } - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) { - return res; - } - return subres; - } + public ChunkRef(int x, int z) { + this.x = x; + this.z = z; + } + public ChunkRef(Location loc) { + this.x = getChunkCoord(loc.getBlockX()); + this.z = getChunkCoord(loc.getBlockZ()); + } - public ClaimedResidence getByName(String name) { - if (name == null) { - return null; - } - String[] split = name.split("\\."); - if (split.length == 1) { - return residences.get(name); - } - ClaimedResidence res = residences.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i]); - } else { - return null; - } - } - return res; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ChunkRef other = (ChunkRef) obj; + return this.x == other.x && this.z == other.z; + } - public String getNameByLoc(Location loc) { - if (loc == null) { - return null; - } - ClaimedResidence res = null; - String name = null; - boolean found = false; - String world = loc.getWorld().getName(); - ChunkRef chunk = new ChunkRef( loc ); - if (chunkResidences.get(world) != null) { - if (chunkResidences.get(world).get(chunk) != null) { - for (String key : chunkResidences.get(world).get(chunk)) { - ClaimedResidence entry = residences.get(key); - if (entry.containsLoc(loc)) { - res = entry; - found = true; - break; - } - } - } - } - if (!found) { - return null; - } - name = res.getName(); - if (name == null) - return null; - String szname = res.getSubzoneNameByLoc(loc); - if (szname != null) { - return name + "." + szname; - } - return name; - } + @Override + public int hashCode() { + return x ^ z; + } - public String getNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) { - return check.getKey(); - } - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) { - return check.getKey() + "." + n; - } - } - return null; - } + /** + * Useful for debug + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append( "{ x: " ).append(x).append( ", z: " ).append( z ).append( " }" ); + return sb.toString(); + } + } + private static List getChunks(ClaimedResidence res) { + List chunks = new ArrayList(); + for (CuboidArea area : res.getAreaArray()) { + chunks.addAll(area.getChunks()); + } + return chunks; + } - public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, "Server Land", loc1, loc2); - } - - public boolean addResidence(String name, String owner, Location loc1, Location loc2) { - return this.addResidence(null, owner, name, loc1, loc2, true); - } - - public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { - return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); - } - - public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return false; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); - if (!createpermission && !resadmin) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } - if (player != null) { - if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); - return false; - } - } - CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); - newRes.getPermissions().applyDefaultFlags(); - newRes.setEnterMessage(group.getDefaultEnterMessage()); - newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { - return false; - } - newArea = resevent.getPhysicalArea(); - name = resevent.getResidenceName(); - if (residences.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); - } - return false; - } - if (player != null) { - newRes.addArea(player, newArea, "main", resadmin); - } else { - newRes.addArea(newArea, "main"); - } - if (newRes.getAreaCount() != 0) { - residences.put(name, newRes); - calculateChunks(name); - Residence.getLeaseManager().removeExpireTime(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - if (Residence.getConfigManager().useLeases()) { - if (player != null) { - Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); - } else { - Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } - } - return true; - } - return false; - } - - public void listResidences(Player player) { - this.listResidences(player, player.getName(), 1); - } - - public void listResidences(Player player, int page) { - this.listResidences(player, player.getName(), page); - } - - public void listResidences(Player player, String targetplayer) { - this.listResidences(player, targetplayer, 1); - } - - public void listResidences(Player player, String targetplayer, int page) { - this.listResidences(player, targetplayer, page, false); - } - - public void listResidences(Player player, int page, boolean showhidden) { - this.listResidences(player, player.getName(), page, showhidden); - } - - public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { - this.listResidences(player, targetplayer, page, showhidden, false); - } - - public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); - } - - public void listAllResidences(Player player, int page) { - this.listAllResidences(player, page, false); - } - - public void listAllResidences(Player player, int page, boolean showhidden) { - this.listAllResidences(player, page, showhidden, false); - } - - public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); - } - - public String[] getResidenceList() { - return this.getResidenceList(true, true).toArray(new String[0]); - } - - public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { - return this.getResidenceList(null, showhidden, showsubzones, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { - ArrayList list = new ArrayList(); - for (Entry res : residences.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); - } - return list; - } - - private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, boolean formattedOutput) { - boolean hidden = res.getPermissions().has("hidden", false); - if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { - if (formattedOutput) { - list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); - } else { - list.add(parentzone + resname); - } - } - if (showsubzones) { - for (Entry sz : res.subzones.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); - } - } - } - } - - public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check != parentResidence && check.checkCollision(newarea)) { - return entry.getKey(); - } - } - return null; - } - - public void removeResidence(String name) { - this.removeResidence(null, name, true); - } - - public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); - if (res != null) { - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { - return; - } - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - residences.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } - } - // Residence.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now - Residence.getRentManager().removeRentable(name); - - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - } - } - - public void removeAllByOwner(String owner) { - this.removeAllByOwner(null, owner, residences); - } - - public void removeAllByOwner(Player player, String owner) { - this.removeAllByOwner(player, owner, residences); - } - - private void removeAllByOwner(Player player, String owner, Map resholder) { - Iterator it = resholder.values().iterator(); - while (it.hasNext()) { - ClaimedResidence res = it.next(); - if (res.getOwner().equalsIgnoreCase(owner)) { - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - removeChunkList(res.getName()); - it.remove(); - } else { - this.removeAllByOwner(player, owner, res.subzones); - } - } - } - - public int getOwnedZoneCount(String player) { - Collection set = residences.values(); - int count = 0; - for (ClaimedResidence res : set) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { - count++; - } - } - return count; - } - - public void printAreaInfo(String areaname, Player player) { - ClaimedResidence res = this.getByName(areaname); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - ResidencePermissions perms = res.getPermissions(); - if (Residence.getConfigManager().enableEconomy()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); - } - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); - String aid = res.getAreaIDbyLoc(player.getLocation()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); - } - if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager().getExpireTime(areaname)); - } - } - - public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { - ClaimedResidence reciever = this.getByName(targetArea); - ClaimedResidence source = this.getByName(sourceArea); - if (source == null || reciever == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!resadmin) { - if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); - } - - public Map save() { - Map worldmap = new LinkedHashMap(); - for (World world : Residence.getServ().getWorlds()) { - Map resmap = new LinkedHashMap(); - for (Entry res : residences.entrySet()) { - if (res.getValue().getWorld().equals(world.getName())) { - try { - resmap.put(res.getKey(), res.getValue().save()); - } catch (Exception ex) { - System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - worldmap.put(world.getName(), resmap); - } - return worldmap; - } - - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public static ResidenceManager load(Map root) throws Exception { - ResidenceManager resm = new ResidenceManager(); - if (root == null) { - return resm; - } - for (World world : Residence.getServ().getWorlds()) { + ResidenceManager resm = new ResidenceManager(); + if (root == null) + return resm; + for (World world : Residence.getServ().getWorlds()) { Map reslist = (Map) root.get(world .getName()); - if (reslist != null) { - try { - resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); - } catch (Exception ex) { - System.out.println("Error in loading save file for world: " + world.getName()); - if (Residence.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - } - return resm; - } + if (reslist != null) { + try { + resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); + } catch (Exception ex) { + System.out.println("Error in loading save file for world: " + world.getName()); + if (Residence.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + } + return resm; + } - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public static Map> loadMap(Map root, ResidenceManager resm) throws Exception { - Map> retRes = new HashMap>(); - if (root != null) { - for (Entry res : root.entrySet()) { - try { + Map> retRes = new HashMap>(); + if (root != null) { + for (Entry res : root.entrySet()) { + try { ClaimedResidence residence = ClaimedResidence.load( (Map) res.getValue(), null); - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(res.getKey()); - retRes.put(chunk, ress); - } - resm.residences.put(res.getKey(), residence); - } catch (Exception ex) { - System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (Residence.getConfigManager().stopOnSaveError()) { - throw (ex); - } - } - } - } - return retRes; - } + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList(); + if (retRes.containsKey(chunk)) { + ress.addAll(retRes.get(chunk)); + } + ress.add(res.getKey()); + retRes.put(chunk, ress); + } + resm.residences.put(res.getKey(), residence); + } catch (Exception ex) { + System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (Residence.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + } + return retRes; + } - private static List getChunks(ClaimedResidence res) { - List chunks = new ArrayList(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } - return chunks; - } + protected Map residences; - public boolean renameResidence(String oldName, String newName) { - return this.renameResidence(null, oldName, newName, true); - } + protected Map>> chunkResidences; - public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - ClaimedResidence res = this.getByName(oldName); - if (res == null) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return false; - } - if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (res.getParent() == null) { - if (residences.containsKey(newName)) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); - return false; - } - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - Residence.getServ().getPluginManager().callEvent(resevent); - removeChunkList(oldName); - residences.put(newName, res); - residences.remove(oldName); - calculateChunks(newName); - if (Residence.getConfigManager().useLeases()) { - Residence.getLeaseManager().updateLeaseName(oldName, newName); - } - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().updateRentableName(oldName, newName); - } - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN)); - } - return true; - } else { - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); - return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - } - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } - } + public ResidenceManager() { + residences = new HashMap(); + chunkResidences = new HashMap>>(); + } - public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - ClaimedResidence res = getByName(residence); - if (res == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - Player giveplayer = Residence.getServ().getPlayer(targPlayer); - if (giveplayer == null || !giveplayer.isOnline()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); - return; - } - CuboidArea[] areas = res.getAreaArray(); - PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); - if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (!resadmin) { - for (CuboidArea area : areas) { - if (!g.inLimits(area)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - } - } - res.getPermissions().setOwner(giveplayer.getName(), true); - // Fix phrases here - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); - giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW)); - } + public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { + return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); + } - public void removeAllFromWorld(CommandSender sender, String world) { - int count = 0; - Iterator it = residences.values().iterator(); - while (it.hasNext()) { - ClaimedResidence next = it.next(); - if (next.getWorld().equals(world)) { - it.remove(); - count++; - } - } - chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); - if (count == 0) { - sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); - } else { - sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); - } - } + public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { + if (!Residence.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } + return false; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); + if (!createpermission && !resadmin) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + return false; + } + if (player != null) { + if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + return false; + } + } + CuboidArea newArea = new CuboidArea(loc1, loc2); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); + newRes.getPermissions().applyDefaultFlags(); + newRes.setEnterMessage(group.getDefaultEnterMessage()); + newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - public int getResidenceCount() { - return residences.size(); - } + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + newArea = resevent.getPhysicalArea(); + name = resevent.getResidenceName(); + if (residences.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + } + return false; + } + if (player != null) { + newRes.addArea(player, newArea, "main", resadmin); + } else { + newRes.addArea(newArea, "main"); + } + if (newRes.getAreaCount() != 0) { + residences.put(name, newRes); + calculateChunks(name); + Residence.getLeaseManager().removeExpireTime(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + if (Residence.getConfigManager().useLeases()) { + if (player != null) { + Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + } else { + Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); + } + } + return true; + } + return false; + } - public void removeChunkList(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) != null) { - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.remove(name); - chunkResidences.get(world).put(chunk, ress); - } - } - } - } + public boolean addResidence(String name, Location loc1, Location loc2) { + return this.addResidence(name, "Server Land", loc1, loc2); + } - public void calculateChunks(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(name); - chunkResidences.get(world).put(chunk, ress); - } - } - } + public boolean addResidence(String name, String owner, Location loc1, Location loc2) { + return this.addResidence(null, owner, name, loc1, loc2, true); + } - public static final class ChunkRef { + public void calculateChunks(String name) { + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(name); + chunkResidences.get(world).put(chunk, ress); + } + } + } - public static int getChunkCoord(final int val) { - // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) - return val >> 4; - } - private final int z; - private final int x; + public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) + return entry.getKey(); + } + return null; + } - public ChunkRef(Location loc) { - this.x = getChunkCoord(loc.getBlockX()); - this.z = getChunkCoord(loc.getBlockZ()); - } - public ChunkRef(int x, int z) { - this.x = x; - this.z = z; - } + public ClaimedResidence getByLoc(Location loc) { + if (loc == null) + return null; + ClaimedResidence res = null; + boolean found = false; + String world = loc.getWorld().getName(); + ChunkRef chunk = new ChunkRef( loc ); + if (chunkResidences.get(world) != null) { + if (chunkResidences.get(world).get(chunk) != null) { + for (String key : chunkResidences.get(world).get(chunk)) { + ClaimedResidence entry = residences.get(key); + if (entry.containsLoc(loc)) { + res = entry; + found = true; + break; + } + } + } + } + if (!found) + return null; + ClaimedResidence subres = res.getSubzoneByLoc(loc); + if (subres == null) + return res; + return subres; + } - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ChunkRef other = (ChunkRef) obj; - return this.x == other.x && this.z == other.z; - } + public ClaimedResidence getByName(String name) { + if (name == null) + return null; + String[] split = name.split("\\."); + if (split.length == 1) + return residences.get(name); + ClaimedResidence res = residences.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i]); + } else + return null; + } + return res; + } - public int hashCode() { - return x ^ z; - } - - /** - * Useful for debug - */ - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append( "{ x: " ).append(x).append( ", z: " ).append( z ).append( " }" ); - return sb.toString(); - } - } + public String getNameByLoc(Location loc) { + if (loc == null) + return null; + ClaimedResidence res = null; + String name = null; + boolean found = false; + String world = loc.getWorld().getName(); + ChunkRef chunk = new ChunkRef( loc ); + if (chunkResidences.get(world) != null) { + if (chunkResidences.get(world).get(chunk) != null) { + for (String key : chunkResidences.get(world).get(chunk)) { + ClaimedResidence entry = residences.get(key); + if (entry.containsLoc(loc)) { + res = entry; + found = true; + break; + } + } + } + } + if (!found) + return null; + name = res.getName(); + if (name == null) + return null; + String szname = res.getSubzoneNameByLoc(loc); + if (szname != null) + return name + "." + szname; + return name; + } + + public String getNameByRes(ClaimedResidence res) { + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) + return check.getKey(); + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) + return check.getKey() + "." + n; + } + return null; + } + + public int getOwnedZoneCount(String player) { + Collection set = residences.values(); + int count = 0; + for (ClaimedResidence res : set) { + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { + count++; + } + } + return count; + } + + public int getResidenceCount() { + return residences.size(); + } + + public String[] getResidenceList() { + return this.getResidenceList(true, true).toArray(new String[0]); + } + + public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { + return this.getResidenceList(null, showhidden, showsubzones, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { + return this.getResidenceList(targetplayer, showhidden, showsubzones, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { + ArrayList list = new ArrayList(); + for (Entry res : residences.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); + } + return list; + } + + private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, boolean formattedOutput) { + boolean hidden = res.getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { + if (formattedOutput) { + list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); + } else { + list.add(parentzone + resname); + } + } + if (showsubzones) { + for (Entry sz : res.subzones.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); + } + } + } + } + + public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { + ClaimedResidence res = getByName(residence); + if (res == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + Player giveplayer = Residence.getServ().getPlayer(targPlayer); + if (giveplayer == null || !giveplayer.isOnline()) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); + return; + } + CuboidArea[] areas = res.getAreaArray(); + PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); + if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (!resadmin) { + for (CuboidArea area : areas) { + if (!g.inLimits(area)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + } + } + res.getPermissions().setOwner(giveplayer.getName(), true); + // Fix phrases here + reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); + giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW)); + } + + public void listAllResidences(Player player, int page) { + this.listAllResidences(player, page, false); + } + + public void listAllResidences(Player player, int page, boolean showhidden) { + this.listAllResidences(player, page, showhidden, false); + } + + public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { + if (showhidden && !Residence.isResAdminOn(player)) { + showhidden = false; + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); + } + + public void listResidences(Player player) { + this.listResidences(player, player.getName(), 1); + } + + public void listResidences(Player player, int page) { + this.listResidences(player, player.getName(), page); + } + + public void listResidences(Player player, int page, boolean showhidden) { + this.listResidences(player, player.getName(), page, showhidden); + } + + public void listResidences(Player player, String targetplayer) { + this.listResidences(player, targetplayer, 1); + } + + public void listResidences(Player player, String targetplayer, int page) { + this.listResidences(player, targetplayer, page, false); + } + + public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { + this.listResidences(player, targetplayer, page, showhidden, false); + } + + public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { + if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { + showhidden = false; + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); + } + + public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { + ClaimedResidence reciever = this.getByName(targetArea); + ClaimedResidence source = this.getByName(sourceArea); + if (source == null || reciever == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!resadmin) { + if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); + } + + public void printAreaInfo(String areaname, Player player) { + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + ResidencePermissions perms = res.getPermissions(); + if (Residence.getConfigManager().enableEconomy()) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); + } else { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); + } + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); + } else { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); + } + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); + String aid = res.getAreaIDbyLoc(player.getLocation()); + if (aid != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); + } + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); + if (aid != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); + } + if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager().getExpireTime(areaname)); + } + } + + public void removeAllByOwner(Player player, String owner) { + this.removeAllByOwner(player, owner, residences); + } + + private void removeAllByOwner(Player player, String owner, Map resholder) { + Iterator it = resholder.values().iterator(); + while (it.hasNext()) { + ClaimedResidence res = it.next(); + if (res.getOwner().equalsIgnoreCase(owner)) { + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + removeChunkList(res.getName()); + it.remove(); + } else { + this.removeAllByOwner(player, owner, res.subzones); + } + } + } + + public void removeAllByOwner(String owner) { + this.removeAllByOwner(null, owner, residences); + } + + public void removeAllFromWorld(CommandSender sender, String world) { + int count = 0; + Iterator it = residences.values().iterator(); + while (it.hasNext()) { + ClaimedResidence next = it.next(); + if (next.getWorld().equals(world)) { + it.remove(); + count++; + } + } + chunkResidences.remove(world); + chunkResidences.put(world, new HashMap>()); + if (count == 0) { + sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); + } else { + sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); + } + } + + public void removeChunkList(String name) { + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) != null) { + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.remove(name); + chunkResidences.get(world).put(chunk, ress); + } + } + } + } + + public void removeResidence(Player player, String name, boolean resadmin) { + ClaimedResidence res = this.getByName(name); + if (res != null) { + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + residences.remove(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + } else { + String[] split = name.split("\\."); + if (player != null) { + parent.removeSubzone(player, split[split.length - 1], true); + } else { + parent.removeSubzone(split[split.length - 1]); + } + } + // Residence.getLeaseManager().removeExpireTime(name); - causing + // concurrent modification exception in lease manager... worked + // around for now + Residence.getRentManager().removeRentable(name); + + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } + } + } + + public void removeResidence(String name) { + this.removeResidence(null, name, true); + } + + public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { + if (!Residence.validName(newName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + ClaimedResidence res = this.getByName(oldName); + if (res == null) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } + return false; + } + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (res.getParent() == null) { + if (residences.containsKey(newName)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); + } + return false; + } + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); + Residence.getServ().getPluginManager().callEvent(resevent); + removeChunkList(oldName); + residences.put(newName, res); + residences.remove(oldName); + calculateChunks(newName); + if (Residence.getConfigManager().useLeases()) { + Residence.getLeaseManager().updateLeaseName(oldName, newName); + } + if (Residence.getConfigManager().enabledRentSystem()) { + Residence.getRentManager().updateRentableName(oldName, newName); + } + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN)); + } + return true; + } else { + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); + return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + } + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + return false; + } + } + + public boolean renameResidence(String oldName, String newName) { + return this.renameResidence(null, oldName, newName, true); + } + + public Map save() { + Map worldmap = new LinkedHashMap(); + for (World world : Residence.getServ().getWorlds()) { + Map resmap = new LinkedHashMap(); + for (Entry res : residences.entrySet()) { + if (res.getValue().getWorld().equals(world.getName())) { + try { + resmap.put(res.getKey(), res.getValue().save()); + } catch (Exception ex) { + System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + worldmap.put(world.getName(), resmap); + } + return worldmap; + } } diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 7e058ac..163af95 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -5,9 +5,6 @@ package com.bekvon.bukkit.residence.vaultinterface; -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.permissions.PermissionsInterface; - import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; @@ -16,32 +13,18 @@ import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.permissions.PermissionsInterface; + /** - * + * * @author Administrator */ -public class ResidenceVaultAdapter implements EconomyInterface, - PermissionsInterface { +public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInterface { - public static Permission permissions = null; - public static Economy economy = null; - public static Chat chat = null; - - public boolean permissionsOK() { - if (permissions != null - && !permissions.getName().equalsIgnoreCase("SuperPerms")) { - return true; - } - return false; - } - - public boolean economyOK() { - return economy != null; - } - - public boolean chatOK() { - return chat != null; - } + public static Permission permissions = null; + public static Economy economy = null; + public static Chat chat = null; public ResidenceVaultAdapter(Server s) { this.setupPermissions(s); @@ -49,58 +32,10 @@ public class ResidenceVaultAdapter implements EconomyInterface, this.setupChat(s); } - private boolean setupPermissions(Server s) { - RegisteredServiceProvider permissionProvider = s - .getServicesManager().getRegistration( - net.milkbowl.vault.permission.Permission.class); - if (permissionProvider != null) { - permissions = permissionProvider.getProvider(); - } - return (permissions != null); - } - - private boolean setupChat(Server s) { - RegisteredServiceProvider chatProvider = s.getServicesManager() - .getRegistration(net.milkbowl.vault.chat.Chat.class); - if (chatProvider != null) { - chat = chatProvider.getProvider(); - } - return (chat != null); - } - - private boolean setupEconomy(Server s) { - RegisteredServiceProvider economyProvider = s - .getServicesManager().getRegistration( - net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - economy = economyProvider.getProvider(); - } - return (economy != null); - } - - public String getPlayerGroup(Player player) { - String group = permissions.getPrimaryGroup(player).toLowerCase(); - if (group == null) { - return group; - } else { - return group.toLowerCase(); - } - } - - @SuppressWarnings("deprecation") - public String getPlayerGroup(String player, String world) { - String group = permissions.getPrimaryGroup(world, player); - if (group == null) { - return group; - } else { - return group.toLowerCase(); - } - } - @SuppressWarnings("deprecation") @Override - public double getBalance(String playerName) { - return economy.getBalance(playerName); + public boolean add(String playerName, double amount) { + return economy.depositPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @@ -109,10 +44,93 @@ public class ResidenceVaultAdapter implements EconomyInterface, return economy.has(playerName, amount); } + public boolean chatOK() { + return chat != null; + } + + public boolean economyOK() { + return economy != null; + } + @SuppressWarnings("deprecation") @Override - public boolean add(String playerName, double amount) { - return economy.depositPlayer(playerName, amount).transactionSuccess(); + public double getBalance(String playerName) { + return economy.getBalance(playerName); + } + + public String getChatName() { + if (chat != null) + return chat.getName(); + return ""; + } + + public String getEconomyName() { + if (economy != null) + return economy.getName(); + return ""; + } + + @Override + public String getName() { + return "Vault"; + } + + public String getPermissionsName() { + if (permissions != null) + return permissions.getName(); + return ""; + } + + @Override + public String getPlayerGroup(Player player) { + String group = permissions.getPrimaryGroup(player).toLowerCase(); + if (group == null) + return group; + else + return group.toLowerCase(); + } + + @Override + @SuppressWarnings("deprecation") + public String getPlayerGroup(String player, String world) { + String group = permissions.getPrimaryGroup(world, player); + if (group == null) + return group; + else + return group.toLowerCase(); + } + + public boolean permissionsOK() { + if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) + return true; + return false; + } + + private boolean setupChat(Server s) { + RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration( + net.milkbowl.vault.chat.Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + return (chat != null); + } + + private boolean setupEconomy(Server s) { + RegisteredServiceProvider economyProvider = s.getServicesManager() + .getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + economy = economyProvider.getProvider(); + } + return (economy != null); + } + + private boolean setupPermissions(Server s) { + RegisteredServiceProvider permissionProvider = s.getServicesManager() + .getRegistration(net.milkbowl.vault.permission.Permission.class); + if (permissionProvider != null) { + permissions = permissionProvider.getProvider(); + } + return (permissions != null); } @SuppressWarnings("deprecation") @@ -125,40 +143,14 @@ public class ResidenceVaultAdapter implements EconomyInterface, @Override public boolean transfer(String playerFrom, String playerTo, double amount) { if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { - if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { + if (economy.depositPlayer(playerTo, amount).transactionSuccess()) return true; - } else { + else { economy.depositPlayer(playerFrom, amount); return false; } - } else { + } else return false; - } - } - - public String getEconomyName() { - if (economy != null) { - return economy.getName(); - } - return ""; - } - - public String getPermissionsName() { - if (permissions != null) { - return permissions.getName(); - } - return ""; - } - - public String getChatName() { - if (chat != null) { - return chat.getName(); - } - return ""; - } - - public String getName() { - return "Vault"; } } \ No newline at end of file