1
0
mirror of https://e.coding.net/circlecloud/Residence.git synced 2025-11-24 21:46:16 +00:00

clean up and update...

This commit is contained in:
502647092
2015-09-23 20:55:27 +08:00
parent b8b86f4de9
commit f0db5f19ee
6 changed files with 1005 additions and 1050 deletions

View File

@@ -24,6 +24,8 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@@ -32,10 +34,16 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import com.bekvon.bukkit.residence.chat.ChatManager;
import com.bekvon.bukkit.residence.commandmain.CommandRc;
import com.bekvon.bukkit.residence.commandmain.CommandRes;
import com.bekvon.bukkit.residence.commandmain.CommandResLoad;
import com.bekvon.bukkit.residence.commandmain.CommandResReload;
import com.bekvon.bukkit.residence.commandmain.CommandResWorld;
import com.bekvon.bukkit.residence.economy.EconomyInterface;
import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter;
import com.bekvon.bukkit.residence.economy.TransactionManager;
import com.bekvon.bukkit.residence.economy.rent.RentManager;
import com.bekvon.bukkit.residence.event.ResidenceCommandEvent;
import com.bekvon.bukkit.residence.itemlist.WorldItemManager;
import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener;
import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener;
@@ -49,6 +57,11 @@ import com.bekvon.bukkit.residence.protection.LeaseManager;
import com.bekvon.bukkit.residence.protection.PermissionListManager;
import com.bekvon.bukkit.residence.protection.ResidenceManager;
import com.bekvon.bukkit.residence.protection.WorldFlagManager;
import com.bekvon.bukkit.residence.runnable.AutoSaveTask;
import com.bekvon.bukkit.residence.runnable.HealTask;
import com.bekvon.bukkit.residence.runnable.LeaseTask;
import com.bekvon.bukkit.residence.runnable.RentTask;
import com.bekvon.bukkit.residence.runnable.TaskManager;
import com.bekvon.bukkit.residence.selection.SelectionManager;
import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager;
import com.bekvon.bukkit.residence.text.Language;
@@ -58,6 +71,7 @@ import com.bekvon.bukkit.residence.utils.DataBackup;
import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
import com.earth2me.essentials.Essentials;
import cn.citycraft.PluginHelper.commands.HandlerMainCommand;
import cn.citycraft.PluginHelper.config.FileConfig;
import cn.citycraft.PluginHelper.utils.VersionChecker;
@@ -69,10 +83,13 @@ import cn.citycraft.PluginHelper.utils.VersionChecker;
public class Residence extends JavaPlugin {
public static float bukkitver;
protected static ResidenceManager rmanager;
protected static SelectionManager smanager;
protected static PermissionManager gmanager;
protected static ConfigManager cmanager;
protected static FlagManager fmanager;
protected static TaskManager taskmanager;
protected static ResidenceBlockListener blistener;
protected static ResidencePlayerListener plistener;
protected static ResidenceEntityListener elistener;
@@ -85,7 +102,7 @@ public class Residence extends JavaPlugin {
protected static RentManager rentmanager;
protected static ChatManager chatmanager;
protected static Server server;
protected static HelpEntry helppages;
public static HelpEntry helppages;
protected static Language language;
protected static Logger log;
protected static boolean useWorldEdit;
@@ -96,37 +113,16 @@ public class Residence extends JavaPlugin {
protected static int rentBukkitId = -1;
protected static int healBukkitId = -1;
protected static int autosaveBukkitId = -1;
protected static boolean initsuccess = false;
protected static List<String> resadminToggle;
protected static FileConfig config;
private final static String[] validLanguages = { "English", "Chinese" };
public static boolean initsuccess;
protected HandlerMainCommand hdmcnd;
protected boolean firstenable = true;
protected Map<String, String> deleteConfirm;
private Runnable doHeals = () -> plistener.doHeals();
private Runnable rentExpire = () -> {
rentmanager.checkCurrentRents();
if (cmanager.showIntervalMessages())
getLog().info(" - Rent Expirations checked!");
};
private Runnable leaseExpire = () -> {
leasemanager.doExpirations();
if (cmanager.showIntervalMessages())
getLog().info(" - Lease Expirations checked!");
};
private Runnable autoSave = () -> {
try {
if (initsuccess)
saveYml();
} catch (Exception ex) {
getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
}
};
public Map<String, String> deleteConfirm;
public Residence() {
}
@@ -282,6 +278,71 @@ public class Residence extends JavaPlugin {
language = Language.parseText(langconfig, "Language");
}
@SuppressWarnings("unchecked")
public 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;
long time = System.currentTimeMillis();
HashMap<String, Object> worlds = new HashMap<String, Object>();
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<String, Long>) yml.getRoot().get("Leases"), rmanager);
}
loadFile = new File(saveFolder, "permlists.yml");
if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile);
yml.load();
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists"));
}
loadFile = new File(saveFolder, "rent.yml");
if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile);
yml.load();
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
}
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
return true;
} catch (Exception ex) {
this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: ");
this.getLogger().warning("错误: " + ex);
throw ex;
}
}
@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;
return hdmcnd.onCommand(sender, command, label, args);
}
@Override
public void onDisable() {
server.getScheduler().cancelTask(autosaveBukkitId);
@@ -325,6 +386,7 @@ public class Residence extends JavaPlugin {
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)
@@ -378,6 +440,8 @@ public class Residence extends JavaPlugin {
tmanager = new TransactionManager(rmanager, gmanager);
if (pmanager == null)
pmanager = new PermissionListManager();
if (taskmanager == null)
taskmanager = new TaskManager(this);
if (firstenable) {
if (!this.isEnabled())
return;
@@ -403,28 +467,35 @@ public class Residence extends JavaPlugin {
if (is1_8())
pm.registerEvents(plistener1_8, this);
pm.registerEvents(elistener, this);
firstenable = false;
} else
plistener.reload();
fmanager = new FlagManager(this);
fmanager.init();
taskmanager.add(server.getScheduler().runTaskTimer(this, new HealTask(), 20, 20));
HandlerMainCommand hdmcnd = new HandlerMainCommand(this);
hdmcnd.registerCommand(new CommandRc(this));
hdmcnd.registerCommand(new CommandRes(this));
hdmcnd.registerCommand(new CommandResLoad(this));
hdmcnd.registerCommand(new CommandResReload(this));
hdmcnd.registerCommand(new CommandResWorld(this));
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);
autosaveInt = autosaveInt < 1 ? 1 : autosaveInt * 60 * 20;
taskmanager.add(server.getScheduler().runTaskTimer(this, new AutoSaveTask(this), autosaveInt, autosaveInt));
if (cmanager.useLeases()) {
int leaseInterval = cmanager.getLeaseCheckInterval();
if (leaseInterval < 1)
leaseInterval = 1;
leaseInterval = leaseInterval * 60 * 20;
leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval);
leaseInterval = leaseInterval < 1 ? 1 : leaseInterval * 60 * 20;
taskmanager.add(server.getScheduler().runTaskTimer(this, new LeaseTask(), 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);
rentint = rentint < 1 ? 1 : rentint * 60 * 20;
taskmanager.add(server.getScheduler().runTaskTimer(this, new RentTask(), rentint, rentint));
}
for (Player player : Bukkit.getServer().getOnlinePlayers())
if (Residence.getPermissionManager().isResidenceAdmin(player))
@@ -448,12 +519,12 @@ public class Residence extends JavaPlugin {
@Override
public void reloadConfig() {
config.reload();
}
};
public void reloadPlugin() {
this.onDisable();
this.reloadConfig();
this.onEnable();
PluginManager pm = server.getPluginManager();
pm.disablePlugin(this);
pm.enablePlugin(this);
}
@Override
@@ -461,49 +532,7 @@ public class Residence extends JavaPlugin {
config.save();
}
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(this, outFile);
int oldversion = testconfig.getInt("FieldsVersion", 0);
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false))
return false;
FileConfig testconfig2 = new FileConfig(this, checkFile);
testconfig2.load(checkFile);
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
if (checkFile.isFile())
checkFile.delete();
if (newversion > oldversion)
return true;
return false;
}
return true;
};
private void loadEssentialsEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
if (p != null) {
economy = new EssentialsEcoAdapter((Essentials) p);
this.getLogger().info("成功关联Essentials Economy!");
} else
this.getLogger().info("Essentials Economy 未找到!");
}
private void loadVaultEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Vault");
if (p != null) {
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer());
if (vault.economyOK()) {
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
economy = vault;
} else
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
} else
this.getLogger().info("Vault 未找到!");
}
private void saveYml() throws IOException {
public void saveYml() throws IOException {
File saveFolder = new File(dataFolder, "Save");
File worldFolder = new File(saveFolder, "Worlds");
worldFolder.mkdirs();
@@ -604,6 +633,48 @@ public class Residence extends JavaPlugin {
this.getLogger().info(" - 保存插件数据...");
}
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(this, outFile);
int oldversion = testconfig.getInt("FieldsVersion", 0);
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false))
return false;
FileConfig testconfig2 = new FileConfig(this, checkFile);
testconfig2.load(checkFile);
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
if (checkFile.isFile())
checkFile.delete();
if (newversion > oldversion)
return true;
return false;
}
return true;
}
private void loadEssentialsEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
if (p != null) {
economy = new EssentialsEcoAdapter((Essentials) p);
this.getLogger().info("成功关联Essentials Economy!");
} else
this.getLogger().info("Essentials Economy 未找到!");
}
private void loadVaultEconomy() {
Plugin p = getServer().getPluginManager().getPlugin("Vault");
if (p != null) {
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer());
if (vault.economyOK()) {
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
economy = vault;
} else
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
} else
this.getLogger().info("Vault 未找到!");
}
@SuppressWarnings("resource")
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) {
try {
@@ -648,61 +719,4 @@ public class Residence extends JavaPlugin {
if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true))
this.getLogger().info("保存默认 " + lang + " 语言文件...");
}
@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;
long time = System.currentTimeMillis();
HashMap<String, Object> worlds = new HashMap<String, Object>();
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<String, Long>) yml.getRoot().get("Leases"), rmanager);
}
loadFile = new File(saveFolder, "permlists.yml");
if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile);
yml.load();
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists"));
}
loadFile = new File(saveFolder, "rent.yml");
if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile);
yml.load();
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
}
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
// System.out.print("[Residence] Loaded...");
return true;
} catch (Exception ex) {
this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: ");
this.getLogger().warning("错误: " + ex);
throw ex;
}
}
}