mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2025-11-24 21:46:16 +00:00
33
pom.xml
33
pom.xml
@@ -23,6 +23,32 @@
|
|||||||
<target>1.7</target>
|
<target>1.7</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>2.3</version>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
|
<artifactSet>
|
||||||
|
<includes>
|
||||||
|
<include>cn.citycraft:PluginHelper</include>
|
||||||
|
</includes>
|
||||||
|
</artifactSet>
|
||||||
|
<relocation>
|
||||||
|
<pattern>cn.citycraft.PluginHelper</pattern>
|
||||||
|
<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<repositories>
|
<repositories>
|
||||||
@@ -59,8 +85,15 @@
|
|||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${project.basedir}/lib/WorldEdit.jar</systemPath>
|
<systemPath>${project.basedir}/lib/WorldEdit.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.citycraft</groupId>
|
||||||
|
<artifactId>PluginHelper</artifactId>
|
||||||
|
<type>jar</type>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
<description>Cuboid Residence Plugin</description>
|
||||||
</project>
|
</project>
|
||||||
@@ -32,7 +32,6 @@ import org.bukkit.plugin.PluginManager;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.bekvon.bukkit.residence.chat.ChatManager;
|
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.EconomyInterface;
|
||||||
import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter;
|
import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter;
|
||||||
import com.bekvon.bukkit.residence.economy.TransactionManager;
|
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.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
|
||||||
import com.earth2me.essentials.Essentials;
|
import com.earth2me.essentials.Essentials;
|
||||||
|
|
||||||
|
import cn.citycraft.PluginHelper.config.FileConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Gary Smoak - bekvon
|
* @author Gary Smoak - bekvon
|
||||||
@@ -96,11 +97,52 @@ public class Residence extends JavaPlugin {
|
|||||||
protected static boolean initsuccess = false;
|
protected static boolean initsuccess = false;
|
||||||
protected static List<String> resadminToggle;
|
protected static List<String> resadminToggle;
|
||||||
protected static FileConfig config;
|
protected static FileConfig config;
|
||||||
private final static String[] validLanguages = {
|
private final static String[] validLanguages = { "English", "Chinese" };
|
||||||
"English",
|
|
||||||
"Chinese"
|
protected boolean firstenable = true;
|
||||||
|
|
||||||
|
protected Map<String, String> 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() {
|
public static ResidenceBlockListener getBlockListener() {
|
||||||
return blistener;
|
return blistener;
|
||||||
}
|
}
|
||||||
@@ -130,9 +172,8 @@ public class Residence extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Language getLanguage() {
|
public static Language getLanguage() {
|
||||||
if (language == null) {
|
if (language == null)
|
||||||
language = new Language();
|
language = new Language();
|
||||||
}
|
|
||||||
return language;
|
return language;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,13 +201,11 @@ public class Residence extends JavaPlugin {
|
|||||||
ClaimedResidence res = rmanager.getByLoc(loc);
|
ClaimedResidence res = rmanager.getByLoc(loc);
|
||||||
if (res != null)
|
if (res != null)
|
||||||
return res.getPermissions();
|
return res.getPermissions();
|
||||||
else {
|
else if (player != null)
|
||||||
if (player != null)
|
|
||||||
return wmanager.getPerms(player);
|
return wmanager.getPerms(player);
|
||||||
else
|
else
|
||||||
return wmanager.getPerms(loc.getWorld().getName());
|
return wmanager.getPerms(loc.getWorld().getName());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static ResidencePlayerListener getPlayerListener() {
|
public static ResidencePlayerListener getPlayerListener() {
|
||||||
return plistener;
|
return plistener;
|
||||||
@@ -229,51 +268,212 @@ public class Residence extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean firstenable = true;
|
public void consoleMessage(String message) {
|
||||||
|
this.getLogger().info(message);
|
||||||
|
}
|
||||||
|
|
||||||
protected Map<String, String> deleteConfirm;
|
public void consoleMessage(String[] msg) {
|
||||||
|
for (String s : msg)
|
||||||
|
consoleMessage(s);
|
||||||
|
}
|
||||||
|
|
||||||
private Runnable doHeals = new Runnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public FileConfiguration getConfig() {
|
||||||
plistener.doHeals();
|
return config;
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
private Runnable rentExpire = new Runnable() {
|
public void loadLang(File langFile) throws FileNotFoundException, IOException, InvalidConfigurationException {
|
||||||
@Override
|
FileConfig langconfig = new FileConfig(this, langFile);
|
||||||
public void run() {
|
helppages = HelpEntry.parseHelp(langconfig, "CommandHelp");
|
||||||
rentmanager.checkCurrentRents();
|
HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7));
|
||||||
if (cmanager.showIntervalMessages()) {
|
InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7));
|
||||||
getLog().info(" - Rent Expirations checked!");
|
language = Language.parseText(langconfig, "Language");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Runnable leaseExpire = new Runnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void onDisable() {
|
||||||
leasemanager.doExpirations();
|
server.getScheduler().cancelTask(autosaveBukkitId);
|
||||||
if (cmanager.showIntervalMessages()) {
|
server.getScheduler().cancelTask(healBukkitId);
|
||||||
getLog().info(" - Lease Expirations checked!");
|
if (cmanager.useLeases())
|
||||||
}
|
server.getScheduler().cancelTask(leaseBukkitId);
|
||||||
}
|
if (cmanager.enabledRentSystem())
|
||||||
};
|
server.getScheduler().cancelTask(rentBukkitId);
|
||||||
|
if (initsuccess)
|
||||||
private Runnable autoSave = new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
try {
|
||||||
if (initsuccess) {
|
|
||||||
saveYml();
|
saveYml();
|
||||||
}
|
DataBackup.run();
|
||||||
} catch (Exception ex) {
|
} 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<String, String>();
|
||||||
|
resadminToggle = new ArrayList<String>();
|
||||||
|
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 {
|
private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException {
|
||||||
@@ -287,48 +487,23 @@ public class Residence extends JavaPlugin {
|
|||||||
FileConfig testconfig2 = new FileConfig(this, checkFile);
|
FileConfig testconfig2 = new FileConfig(this, checkFile);
|
||||||
testconfig2.load(checkFile);
|
testconfig2.load(checkFile);
|
||||||
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
|
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
|
||||||
if (checkFile.isFile()) {
|
if (checkFile.isFile())
|
||||||
checkFile.delete();
|
checkFile.delete();
|
||||||
}
|
|
||||||
if (newversion > oldversion)
|
if (newversion > oldversion)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
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() {
|
private void loadEssentialsEconomy() {
|
||||||
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
|
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
|
||||||
if (p != null) {
|
if (p != null) {
|
||||||
economy = new EssentialsEcoAdapter((Essentials) p);
|
economy = new EssentialsEcoAdapter((Essentials) p);
|
||||||
this.getLogger().info("成功关联Essentials Economy!");
|
this.getLogger().info("成功关联Essentials Economy!");
|
||||||
} else {
|
} else
|
||||||
this.getLogger().info("Essentials Economy 未找到!");
|
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() {
|
private void loadVaultEconomy() {
|
||||||
Plugin p = getServer().getPluginManager().getPlugin("Vault");
|
Plugin p = getServer().getPluginManager().getPlugin("Vault");
|
||||||
@@ -337,12 +512,161 @@ public class Residence extends JavaPlugin {
|
|||||||
if (vault.economyOK()) {
|
if (vault.economyOK()) {
|
||||||
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
|
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
|
||||||
economy = vault;
|
economy = vault;
|
||||||
} else {
|
} else
|
||||||
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
|
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
|
||||||
}
|
} else
|
||||||
} else {
|
|
||||||
this.getLogger().info("Vault 未找到!");
|
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<String, Object> save = rmanager.save();
|
||||||
|
for (Entry<String, Object> 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")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -401,375 +725,4 @@ public class Residence extends JavaPlugin {
|
|||||||
throw ex;
|
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<String, String>();
|
|
||||||
resadminToggle = new ArrayList<String>();
|
|
||||||
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<String, Object> save = rmanager.save();
|
|
||||||
for (Entry<String, Object> 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 + " 语言文件...");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user