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;
- }
-}