From 710390b5a6586063555ba31944c9c06dfde7ae35 Mon Sep 17 00:00:00 2001 From: 502647092 Date: Tue, 15 Sep 2015 10:01:12 +0800 Subject: [PATCH] update PluginHelper... Signed-off-by: 502647092 --- pom.xml | 45 +- .../bekvon/bukkit/residence/Residence.java | 855 +++++++++--------- .../bukkit/residence/config/FileConfig.java | 198 ---- 3 files changed, 443 insertions(+), 655 deletions(-) delete mode 100644 src/main/java/com/bekvon/bukkit/residence/config/FileConfig.java diff --git a/pom.xml b/pom.xml index a951b7f..1bee92d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,12 +8,12 @@ ${project.name} src - - - src/main/resources - true - - + + + src/main/resources + true + + maven-compiler-plugin @@ -23,6 +23,32 @@ 1.7 + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + false + true + + + cn.citycraft:PluginHelper + + + + cn.citycraft.PluginHelper + ${project.groupId}.${project.artifactId} + + + + + package + + shade + + + + @@ -59,8 +85,15 @@ system ${project.basedir}/lib/WorldEdit.jar + + cn.citycraft + PluginHelper + jar + 1.0 + UTF-8 + Cuboid Residence Plugin \ No newline at end of file diff --git a/src/main/java/com/bekvon/bukkit/residence/Residence.java b/src/main/java/com/bekvon/bukkit/residence/Residence.java index 1c256a6..223a3d7 100644 --- a/src/main/java/com/bekvon/bukkit/residence/Residence.java +++ b/src/main/java/com/bekvon/bukkit/residence/Residence.java @@ -32,7 +32,6 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import com.bekvon.bukkit.residence.chat.ChatManager; -import com.bekvon.bukkit.residence.config.FileConfig; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; import com.bekvon.bukkit.residence.economy.TransactionManager; @@ -59,6 +58,8 @@ import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.earth2me.essentials.Essentials; +import cn.citycraft.PluginHelper.config.FileConfig; + /** * * @author Gary Smoak - bekvon @@ -96,11 +97,52 @@ public class Residence extends JavaPlugin { protected static boolean initsuccess = false; protected static List resadminToggle; protected static FileConfig config; - private final static String[] validLanguages = { - "English", - "Chinese" + private final static String[] validLanguages = { "English", "Chinese" }; + + protected boolean firstenable = true; + + protected Map deleteConfirm; + + private Runnable doHeals = new Runnable() { + @Override + public void run() { + plistener.doHeals(); + } }; + private Runnable rentExpire = new Runnable() { + @Override + public void run() { + rentmanager.checkCurrentRents(); + if (cmanager.showIntervalMessages()) + getLog().info(" - Rent Expirations checked!"); + } + }; + + private Runnable leaseExpire = new Runnable() { + @Override + public void run() { + leasemanager.doExpirations(); + if (cmanager.showIntervalMessages()) + getLog().info(" - Lease Expirations checked!"); + } + }; + + private Runnable autoSave = new Runnable() { + @Override + public void run() { + try { + if (initsuccess) + saveYml(); + } catch (Exception ex) { + getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); + } + } + }; + + public Residence() { + } + public static ResidenceBlockListener getBlockListener() { return blistener; } @@ -130,9 +172,8 @@ public class Residence extends JavaPlugin { } public static Language getLanguage() { - if (language == null) { + if (language == null) language = new Language(); - } return language; } @@ -160,12 +201,10 @@ public class Residence extends JavaPlugin { 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()); - } + else if (player != null) + return wmanager.getPerms(player); + else + return wmanager.getPerms(loc.getWorld().getName()); } public static ResidencePlayerListener getPlayerListener() { @@ -229,51 +268,212 @@ public class Residence extends JavaPlugin { } } - protected boolean firstenable = true; + public void consoleMessage(String message) { + this.getLogger().info(message); + } - protected Map deleteConfirm; + public void consoleMessage(String[] msg) { + for (String s : msg) + consoleMessage(s); + } - private Runnable doHeals = new Runnable() { - @Override - public void run() { - plistener.doHeals(); - } - }; + @Override + public FileConfiguration getConfig() { + return config; + } - private Runnable rentExpire = new Runnable() { - @Override - public void run() { - rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) { - getLog().info(" - Rent Expirations checked!"); - } - } - }; + public void loadLang(File langFile) throws FileNotFoundException, IOException, InvalidConfigurationException { + FileConfig langconfig = new FileConfig(this, langFile); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + language = Language.parseText(langconfig, "Language"); + } - private Runnable leaseExpire = new Runnable() { - @Override - public void run() { - leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) { - getLog().info(" - Lease Expirations checked!"); - } - } - }; - - private Runnable autoSave = new Runnable() { - @Override - public void run() { + @Override + public void onDisable() { + server.getScheduler().cancelTask(autosaveBukkitId); + server.getScheduler().cancelTask(healBukkitId); + if (cmanager.useLeases()) + server.getScheduler().cancelTask(leaseBukkitId); + if (cmanager.enabledRentSystem()) + server.getScheduler().cancelTask(rentBukkitId); + if (initsuccess) try { - if (initsuccess) { - saveYml(); - } + saveYml(); + DataBackup.run(); } catch (Exception ex) { - getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); + this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); + this.getLogger().warning("错误: " + ex); } - } - }; + } - public Residence() { + @Override + public void onEnable() { + try { + log = this.getLogger(); + bukkitver = this.getServer().getBukkitVersion().substring(0, 5); + initsuccess = false; + deleteConfirm = new HashMap(); + resadminToggle = new ArrayList(); + server = this.getServer(); + dataFolder = this.getDataFolder(); + if (!dataFolder.isDirectory()) + dataFolder.mkdirs(); + + if (!new File(dataFolder, "config.yml").isFile()) + this.writeDefaultConfigFromJar(); + if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { + this.writeDefaultConfigFromJar(); + this.getConfig().load("config.yml"); + this.getLogger().warning("配置文件不存在,写入默认配置文件."); + } + cmanager = new ConfigManager(this.getConfig()); + String multiworld = cmanager.getMultiworldPlugin(); + if (multiworld != null) { + Plugin plugin = server.getPluginManager().getPlugin(multiworld); + if (plugin != null) + if (!plugin.isEnabled()) { + this.getLogger().info(" - 加载多世界插件: " + multiworld); + server.getPluginManager().enablePlugin(plugin); + } + } + gmanager = new PermissionManager(this.getConfig()); + imanager = new WorldItemManager(this.getConfig()); + wmanager = new WorldFlagManager(this.getConfig()); + chatmanager = new ChatManager(); + rentmanager = new RentManager(); + for (String lang : validLanguages) + try { + if (this.checkNewLanguageVersion(lang)) + this.writeDefaultLanguageFile(lang); + } catch (Exception ex) { + this.getLogger().warning("语言文件升级失败: " + lang + ".yml"); + helppages = new HelpEntry(""); + language = new Language(); + } + File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + try { + if (langFile.isFile()) + loadLang(langFile); + else + this.getLogger().warning("语言文件不存在..."); + } catch (Exception ex) { + this.getLogger().warning("语言文件载入失败: " + cmanager.getLanguage() + ".yml 写入默认语言文件"); + this.writeDefaultLanguageFile(cmanager.getLanguage()); + loadLang(langFile); + } + economy = null; + if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { + this.getLogger().info("扫描经济系统..."); + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); + } + } + if (economy == null) + this.loadVaultEconomy(); + if (economy == null) + this.loadEssentialsEconomy(); + if (economy == null) + this.getLogger().warning("未找到经济系统..."); + } + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().warning("领地数据载入错误,可能造成插件无法启动,请尝试恢复备份文件!"); + this.getLogger().warning("错误: " + e); + } + if (rmanager == null) + rmanager = new ResidenceManager(); + if (leasemanager == null) + leasemanager = new LeaseManager(rmanager); + if (tmanager == null) + tmanager = new TransactionManager(rmanager, gmanager); + if (pmanager == null) + pmanager = new PermissionListManager(); + if (firstenable) { + if (!this.isEnabled()) + return; + FlagPermissions.initValidFlags(); + Plugin p = server.getPluginManager().getPlugin("WorldEdit"); + if (p != null) { + smanager = new WorldEditSelectionManager(server); + useWorldEdit = true; + this.getLogger().info("发现 WorldEdit"); + } else { + smanager = new SelectionManager(server); + useWorldEdit = false; + this.getLogger().warning("WorldEdit 未找到!"); + } + + blistener = new ResidenceBlockListener(); + plistener = new ResidencePlayerListener(); + elistener = new ResidenceEntityListener(); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(blistener, this); + pm.registerEvents(plistener, this); + pm.registerEvents(elistener, this); + + firstenable = false; + } else + plistener.reload(); + int autosaveInt = cmanager.getAutoSaveInterval(); + if (autosaveInt < 1) + autosaveInt = 1; + autosaveInt = autosaveInt * 60 * 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); + } + if (cmanager.enabledRentSystem()) { + int rentint = cmanager.getRentCheckInterval(); + if (rentint < 1) + rentint = 1; + rentint = rentint * 60 * 20; + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + } + for (Player player : Bukkit.getServer().getOnlinePlayers()) + if (Residence.getPermissionManager().isResidenceAdmin(player)) + turnResAdminOn(player); + this.getLogger().info("载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜"); + initsuccess = true; + } catch (Exception ex) { + initsuccess = false; + getServer().getPluginManager().disablePlugin(this); + this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!"); + this.getLogger().warning("错误: " + ex); + } + new VersionChecker(this); + } + + @Override + public void onLoad() { + config = new FileConfig(this, "config.yml"); + } + + @Override + public void reloadConfig() { + config.reload(); + } + + public void reloadPlugin() { + this.onDisable(); + this.reloadConfig(); + this.onEnable(); + + } + + @Override + public void saveConfig() { + config.save(); } private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { @@ -287,47 +487,22 @@ public class Residence extends JavaPlugin { FileConfig testconfig2 = new FileConfig(this, checkFile); testconfig2.load(checkFile); int newversion = testconfig2.getInt("FieldsVersion", oldversion); - if (checkFile.isFile()) { + if (checkFile.isFile()) checkFile.delete(); - } if (newversion > oldversion) return true; return false; } return true; - } - - public void consoleMessage(String message) { - this.getLogger().info(message); - } - - public void consoleMessage(String[] msg) { - for (String s : msg) { - consoleMessage(s); - } - } - - @Override - public FileConfiguration getConfig() { - return config; - } + }; private void loadEssentialsEconomy() { Plugin p = getServer().getPluginManager().getPlugin("Essentials"); if (p != null) { economy = new EssentialsEcoAdapter((Essentials) p); this.getLogger().info("成功关联Essentials Economy!"); - } else { + } else this.getLogger().info("Essentials Economy 未找到!"); - } - } - - public void loadLang(File langFile) throws FileNotFoundException, IOException, InvalidConfigurationException { - FileConfig langconfig = new FileConfig(this, langFile); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - language = Language.parseText(langconfig, "Language"); } private void loadVaultEconomy() { @@ -337,12 +512,161 @@ public class Residence extends JavaPlugin { if (vault.economyOK()) { this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); economy = vault; - } else { + } else this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统..."); - } - } else { + } else this.getLogger().info("Vault 未找到!"); + } + + private void saveYml() throws IOException { + File saveFolder = new File(dataFolder, "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + worldFolder.mkdirs(); + YMLSaveHelper yml; + long time = System.currentTimeMillis(); + 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"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + yml.getRoot().put("Seed", world.getSeed()); + 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"); + if (backupFile.isFile()) + backupFile.delete(); + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); } + + // For Sale save + File ymlSaveLoc = new File(saveFolder, "forsale.yml"); + File tmpFile = new File(saveFolder, "tmp_forsale.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.save(); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Economy", tmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "forsale.yml"); + if (backupFile.isFile()) + backupFile.delete(); + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // Leases save + ymlSaveLoc = new File(saveFolder, "leases.yml"); + tmpFile = new File(saveFolder, "tmp_leases.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Leases", leasemanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "leases.yml"); + if (backupFile.isFile()) + backupFile.delete(); + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // permlist save + ymlSaveLoc = new File(saveFolder, "permlists.yml"); + tmpFile = new File(saveFolder, "tmp_permlists.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("PermissionLists", pmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "permlists.yml"); + if (backupFile.isFile()) + backupFile.delete(); + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // rent save + ymlSaveLoc = new File(saveFolder, "rent.yml"); + tmpFile = new File(saveFolder, "tmp_rent.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("RentSystem", rentmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "rent.yml"); + if (backupFile.isFile()) + backupFile.delete(); + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + this.getLogger().info("保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)"); + if (cmanager.showIntervalMessages()) + this.getLogger().info(" - 保存插件数据..."); + } + + private void writeDefaultConfigFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) + this.getLogger().info("保存默认配置文件..."); + } + + @SuppressWarnings("resource") + 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(); + if (jarloc.isFile()) { + JarFile jar = new JarFile(jarloc); + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) + if (backupOld) { + if (fileBackup.isFile()) + fileBackup.delete(); + writeName.renameTo(fileBackup); + } else + writeName.delete(); + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + osw.close(); + isr.close(); + return true; + } + } + return false; + } catch (Exception ex) { + this.getLogger().warning("文件写入失败: " + writeName); + 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)) + this.getLogger().info("保存默认 " + lang + " 语言文件..."); } @SuppressWarnings("unchecked") @@ -401,375 +725,4 @@ public class Residence extends JavaPlugin { throw ex; } } - - @Override - public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - if (cmanager.useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); - } - if (cmanager.enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); - } - if (initsuccess) { - try { - saveYml(); - DataBackup.run(); - } catch (Exception ex) { - this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); - this.getLogger().warning("错误: " + ex); - } - } - } - - @Override - public void onEnable() { - try { - log = this.getLogger(); - bukkitver = this.getServer().getBukkitVersion().substring(0, 5); - initsuccess = false; - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); - server = this.getServer(); - dataFolder = this.getDataFolder(); - if (!dataFolder.isDirectory()) { - dataFolder.mkdirs(); - } - - if (!new File(dataFolder, "config.yml").isFile()) { - this.writeDefaultConfigFromJar(); - } - if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { - this.writeDefaultConfigFromJar(); - this.getConfig().load("config.yml"); - this.getLogger().warning("配置文件不存在,写入默认配置文件."); - } - cmanager = new ConfigManager(this.getConfig()); - String multiworld = cmanager.getMultiworldPlugin(); - if (multiworld != null) { - Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null) { - if (!plugin.isEnabled()) { - this.getLogger().info(" - 加载多世界插件: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } - } - } - gmanager = new PermissionManager(this.getConfig()); - imanager = new WorldItemManager(this.getConfig()); - wmanager = new WorldFlagManager(this.getConfig()); - chatmanager = new ChatManager(); - rentmanager = new RentManager(); - for (String lang : validLanguages) { - try { - if (this.checkNewLanguageVersion(lang)) { - this.writeDefaultLanguageFile(lang); - } - } catch (Exception ex) { - this.getLogger().warning("语言文件升级失败: " + lang + ".yml"); - helppages = new HelpEntry(""); - language = new Language(); - } - } - File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); - try { - if (langFile.isFile()) { - loadLang(langFile); - } else { - this.getLogger().warning("语言文件不存在..."); - } - } catch (Exception ex) { - this.getLogger().warning("语言文件载入失败: " + cmanager.getLanguage() + ".yml 写入默认语言文件"); - this.writeDefaultLanguageFile(cmanager.getLanguage()); - loadLang(langFile); - } - economy = null; - if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - this.getLogger().info("扫描经济系统..."); - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { - this.loadEssentialsEconomy(); - } - if (economy == null) { - this.getLogger().warning("未找到经济系统..."); - } - } - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().warning("领地数据载入错误,可能造成插件无法启动,请尝试恢复备份文件!"); - this.getLogger().warning("错误: " + e); - } - if (rmanager == null) { - rmanager = new ResidenceManager(); - } - if (leasemanager == null) { - leasemanager = new LeaseManager(rmanager); - } - if (tmanager == null) { - tmanager = new TransactionManager(rmanager, gmanager); - } - if (pmanager == null) { - pmanager = new PermissionListManager(); - } - if (firstenable) { - if (!this.isEnabled()) - return; - FlagPermissions.initValidFlags(); - Plugin p = server.getPluginManager().getPlugin("WorldEdit"); - if (p != null) { - smanager = new WorldEditSelectionManager(server); - useWorldEdit = true; - this.getLogger().info("发现 WorldEdit"); - } else { - smanager = new SelectionManager(server); - useWorldEdit = false; - this.getLogger().warning("WorldEdit 未找到!"); - } - - blistener = new ResidenceBlockListener(); - plistener = new ResidencePlayerListener(); - elistener = new ResidenceEntityListener(); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(blistener, this); - pm.registerEvents(plistener, this); - pm.registerEvents(elistener, this); - - firstenable = false; - } else { - plistener.reload(); - } - int autosaveInt = cmanager.getAutoSaveInterval(); - if (autosaveInt < 1) { - autosaveInt = 1; - } - autosaveInt = autosaveInt * 60 * 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); - } - if (cmanager.enabledRentSystem()) { - int rentint = cmanager.getRentCheckInterval(); - if (rentint < 1) { - rentint = 1; - } - rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); - } - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - turnResAdminOn(player); - } - } - this.getLogger().info("载入完成! 版本: " + this.getDescription().getVersion() + " 重制 by 喵♂呜"); - initsuccess = true; - } catch (Exception ex) { - initsuccess = false; - getServer().getPluginManager().disablePlugin(this); - this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!"); - this.getLogger().warning("错误: " + ex); - } - new VersionChecker(this); - } - - @Override - public void onLoad() { - config = new FileConfig(this, "config.yml"); - }; - - @Override - public void reloadConfig() { - config.reload(); - } - - public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); - - } - - @Override - public void saveConfig() { - config.save(); - } - - private void saveYml() throws IOException { - File saveFolder = new File(dataFolder, "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - worldFolder.mkdirs(); - YMLSaveHelper yml; - long time = System.currentTimeMillis(); - 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"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) { - yml.getRoot().put("Seed", world.getSeed()); - } - 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"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - } - - // For Sale save - File ymlSaveLoc = new File(saveFolder, "forsale.yml"); - File tmpFile = new File(saveFolder, "tmp_forsale.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.save(); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Economy", tmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "forsale.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // Leases save - ymlSaveLoc = new File(saveFolder, "leases.yml"); - tmpFile = new File(saveFolder, "tmp_leases.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Leases", leasemanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "leases.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // permlist save - ymlSaveLoc = new File(saveFolder, "permlists.yml"); - tmpFile = new File(saveFolder, "tmp_permlists.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("PermissionLists", pmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "permlists.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // rent save - ymlSaveLoc = new File(saveFolder, "rent.yml"); - tmpFile = new File(saveFolder, "tmp_rent.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("RentSystem", rentmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "rent.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - this.getLogger().info("保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)"); - if (cmanager.showIntervalMessages()) { - this.getLogger().info(" - 保存插件数据..."); - } - } - - private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { - this.getLogger().info("保存默认配置文件..."); - } - } - - @SuppressWarnings("resource") - 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(); - if (jarloc.isFile()) { - JarFile jar = new JarFile(jarloc); - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); - } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); - } - } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - osw.close(); - isr.close(); - return true; - } - } - return false; - } catch (Exception ex) { - this.getLogger().warning("文件写入失败: " + writeName); - 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)) { - this.getLogger().info("保存默认 " + lang + " 语言文件..."); - } - } } diff --git a/src/main/java/com/bekvon/bukkit/residence/config/FileConfig.java b/src/main/java/com/bekvon/bukkit/residence/config/FileConfig.java deleted file mode 100644 index e766c7b..0000000 --- a/src/main/java/com/bekvon/bukkit/residence/config/FileConfig.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.bekvon.bukkit.residence.config; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.logging.Logger; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.configuration.Configuration; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.configuration.file.YamlConstructor; -import org.bukkit.configuration.file.YamlRepresenter; -import org.bukkit.plugin.Plugin; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.representer.Representer; - -import com.google.common.base.Charsets; -import com.google.common.io.Files; - -/** - * An implementation of {@link Configuration} which saves all files in Yaml. - * Note that this - * implementation is not synchronized. - */ -public class FileConfig extends YamlConfiguration { - protected File file; - protected Logger loger; - protected Plugin plugin; - - protected final DumperOptions yamlOptions = new DumperOptions(); - - protected final Representer yamlRepresenter = new YamlRepresenter(); - - protected final Yaml yaml = new Yaml(new YamlConstructor(), yamlRepresenter, yamlOptions); - - private FileConfig(File file) { - Validate.notNull(file, "File cannot be null"); - this.file = file; - loger = Bukkit.getLogger(); - init(file); - } - - private FileConfig(InputStream stream) { - loger = Bukkit.getLogger(); - init(stream); - } - - public FileConfig(Plugin plugin, File file) { - Validate.notNull(file, "File cannot be null"); - Validate.notNull(plugin, "Plugin cannot be null"); - this.plugin = plugin; - this.file = file; - loger = plugin.getLogger(); - check(file); - init(file); - } - - public FileConfig(Plugin plugin, String filename) { - this(plugin, new File(plugin.getDataFolder(), filename)); - } - - private void check(File file) { - String filename = file.getName(); - InputStream stream = plugin.getResource(filename); - - try { - if (!file.exists()) { - file.getParentFile().mkdirs(); - if (stream == null) { - file.createNewFile(); - loger.info("配置文件 " + filename + " 不存在 创建新文件..."); - } else { - plugin.saveResource(filename, true); - loger.info("配置文件 " + filename + " 不存在 从插件释放..."); - } - } else { - if (stream == null) { - return; - } - FileConfig newcfg = new FileConfig(stream); - FileConfig oldcfg = new FileConfig(file); - String newver = newcfg.getString("version"); - String oldver = oldcfg.getString("version"); - if (newver != null && newver != oldver) { - loger.warning("配置文件: " + filename + " 版本 " + oldver + " 过低 正在升级到 " + newver + " ..."); - try { - oldcfg.save(new File(file.getParent(), filename + ".backup")); - loger.warning("配置文件: " + filename + " 已备份为 " + filename + ".backup !"); - } catch (IOException e) { - loger.warning("配置文件: " + filename + "备份失败!"); - } - plugin.saveResource(filename, true); - loger.info("配置文件: " + filename + "升级成功!"); - } - } - } catch (IOException e) { - loger.info("配置文件 " + filename + " 创建失败..."); - } - } - - private void init(File file) { - Validate.notNull(file, "File cannot be null"); - FileInputStream stream; - try { - stream = new FileInputStream(file); - init(stream); - } catch (FileNotFoundException e) { - loger.info("配置文件 " + file.getName() + " 不存在..."); - } - } - - private void init(InputStream stream) { - Validate.notNull(stream, "Stream cannot be null"); - try { - this.load(new InputStreamReader(stream, Charsets.UTF_8)); - } catch (IOException ex) { - loger.info("配置文件 " + file.getName() + " 读取错误..."); - } catch (InvalidConfigurationException ex) { - loger.info("配置文件 " + file.getName() + " 格式错误..."); - } - } - - @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 load(Reader reader) throws IOException, InvalidConfigurationException { - BufferedReader input = (reader instanceof BufferedReader) ? (BufferedReader) reader : new BufferedReader(reader); - StringBuilder builder = new StringBuilder(); - try { - String line; - while ((line = input.readLine()) != null) { - builder.append(line); - builder.append('\n'); - } - } finally { - input.close(); - } - loadFromString(builder.toString()); - } - - public void reload() { - init(file); - } - - public void save() { - if (file == null) { - loger.info("未定义配置文件路径 保存失败!"); - } - try { - this.save(file); - } catch (IOException e) { - loger.info("配置文件 " + file.getName() + " 保存错误..."); - e.printStackTrace(); - } - } - - @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() { - yamlOptions.setIndent(options().indent()); - yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - String header = buildHeader(); - String dump = yaml.dump(getValues(false)); - if (dump.equals(BLANK_CONFIG)) { - dump = ""; - } - return header + dump; - } -}