mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2025-11-24 21:46:16 +00:00
Updata VersionChecker and rewrite DataBackup...
Signed-off-by: j502647092 <jtb1@163.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates and open the template in the editor.
|
||||
* To change this template, choose Tools | Templates and open the template in
|
||||
* the editor.
|
||||
*/
|
||||
package com.bekvon.bukkit.residence;
|
||||
|
||||
@@ -55,7 +56,7 @@ import com.bekvon.bukkit.residence.text.Language;
|
||||
import com.bekvon.bukkit.residence.text.help.HelpEntry;
|
||||
import com.bekvon.bukkit.residence.text.help.InformationPager;
|
||||
import com.bekvon.bukkit.residence.utils.VersionChecker;
|
||||
import com.bekvon.bukkit.residence.utils.ZipLibrary;
|
||||
import com.bekvon.bukkit.residence.utils.DataBackup;
|
||||
import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
|
||||
import com.earth2me.essentials.Essentials;
|
||||
|
||||
@@ -82,7 +83,6 @@ public class Residence extends JavaPlugin {
|
||||
protected static RentManager rentmanager;
|
||||
protected static ChatManager chatmanager;
|
||||
protected static Server server;
|
||||
protected static VersionChecker versionChecker;
|
||||
protected static HelpEntry helppages;
|
||||
protected static Language language;
|
||||
protected static Logger log;
|
||||
@@ -96,7 +96,10 @@ public class Residence extends JavaPlugin {
|
||||
protected static int autosaveBukkitId = -1;
|
||||
protected static boolean initsuccess = false;
|
||||
protected static List<String> resadminToggle;
|
||||
private final static String[] validLanguages = { "English", "Chinese" };
|
||||
private final static String[] validLanguages = {
|
||||
"English",
|
||||
"Chinese"
|
||||
};
|
||||
|
||||
public static ResidenceBlockListener getBlockListener() {
|
||||
return blistener;
|
||||
@@ -189,10 +192,6 @@ public class Residence extends JavaPlugin {
|
||||
return tmanager;
|
||||
}
|
||||
|
||||
public static VersionChecker getVersionChecker() {
|
||||
return versionChecker;
|
||||
}
|
||||
|
||||
public static WorldFlagManager getWorldFlags() {
|
||||
return wmanager;
|
||||
}
|
||||
@@ -279,8 +278,7 @@ public class Residence extends JavaPlugin {
|
||||
|
||||
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");
|
||||
File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml");
|
||||
if (outFile.isFile()) {
|
||||
FileConfig testconfig = new FileConfig();
|
||||
testconfig.load(outFile);
|
||||
@@ -379,33 +377,27 @@ public class Residence extends JavaPlugin {
|
||||
if (loadFile.isFile()) {
|
||||
yml = new YMLSaveHelper(loadFile);
|
||||
yml.load();
|
||||
tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"),
|
||||
gmanager, rmanager);
|
||||
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);
|
||||
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"));
|
||||
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"));
|
||||
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
|
||||
}
|
||||
this.getLogger().info(
|
||||
"从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000)
|
||||
+ " 秒)");
|
||||
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
|
||||
// System.out.print("[Residence] Loaded...");
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
@@ -428,7 +420,7 @@ public class Residence extends JavaPlugin {
|
||||
if (initsuccess) {
|
||||
try {
|
||||
saveYml();
|
||||
ZipLibrary.backup();
|
||||
DataBackup.run();
|
||||
} catch (Exception ex) {
|
||||
this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
|
||||
this.getLogger().warning("错误: " + ex);
|
||||
@@ -485,8 +477,7 @@ public class Residence extends JavaPlugin {
|
||||
language = new Language();
|
||||
}
|
||||
}
|
||||
File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage()
|
||||
+ ".yml");
|
||||
File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml");
|
||||
try {
|
||||
if (langFile.isFile()) {
|
||||
loadLang(langFile);
|
||||
@@ -502,8 +493,7 @@ public class Residence extends JavaPlugin {
|
||||
if (this.getConfig().getBoolean("Global.EnableEconomy", false)) {
|
||||
this.getLogger().info("扫描经济系统...");
|
||||
if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) {
|
||||
ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager
|
||||
.getPermissionsPlugin();
|
||||
ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin();
|
||||
if (vault.economyOK()) {
|
||||
economy = vault;
|
||||
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
|
||||
@@ -569,8 +559,7 @@ public class Residence extends JavaPlugin {
|
||||
autosaveInt = 1;
|
||||
}
|
||||
autosaveInt = autosaveInt * 60 * 20;
|
||||
autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave,
|
||||
autosaveInt, autosaveInt);
|
||||
autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt);
|
||||
healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20);
|
||||
if (cmanager.useLeases()) {
|
||||
int leaseInterval = cmanager.getLeaseCheckInterval();
|
||||
@@ -578,8 +567,7 @@ public class Residence extends JavaPlugin {
|
||||
leaseInterval = 1;
|
||||
}
|
||||
leaseInterval = leaseInterval * 60 * 20;
|
||||
leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire,
|
||||
leaseInterval, leaseInterval);
|
||||
leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval);
|
||||
}
|
||||
if (cmanager.enabledRentSystem()) {
|
||||
int rentint = cmanager.getRentCheckInterval();
|
||||
@@ -587,8 +575,7 @@ public class Residence extends JavaPlugin {
|
||||
rentint = 1;
|
||||
}
|
||||
rentint = rentint * 60 * 20;
|
||||
rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire,
|
||||
rentint, rentint);
|
||||
rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint);
|
||||
}
|
||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
if (Residence.getPermissionManager().isResidenceAdmin(player)) {
|
||||
@@ -603,8 +590,7 @@ public class Residence extends JavaPlugin {
|
||||
this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!");
|
||||
this.getLogger().warning("错误: " + ex);
|
||||
}
|
||||
versionChecker = new VersionChecker(this);
|
||||
versionChecker.VersionCheck(null);
|
||||
new VersionChecker(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -726,16 +712,14 @@ public class Residence extends JavaPlugin {
|
||||
ymlSaveLoc.renameTo(backupFile);
|
||||
}
|
||||
tmpFile.renameTo(ymlSaveLoc);
|
||||
this.getLogger().info(
|
||||
"保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
|
||||
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)) {
|
||||
if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) {
|
||||
this.getLogger().info("保存默认配置文件...");
|
||||
}
|
||||
}
|
||||
@@ -744,8 +728,7 @@ public class Residence extends JavaPlugin {
|
||||
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) {
|
||||
try {
|
||||
File fileBackup = new File(this.getDataFolder(), "backup-" + writeName);
|
||||
File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation()
|
||||
.toURI()).getCanonicalFile();
|
||||
File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile();
|
||||
if (jarloc.isFile()) {
|
||||
JarFile jar = new JarFile(jarloc);
|
||||
JarEntry entry = jar.getJarEntry(jarPath);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates and open the template in the editor.
|
||||
* To change this template, choose Tools | Templates and open the template in
|
||||
* the editor.
|
||||
*/
|
||||
|
||||
package com.bekvon.bukkit.residence.listeners;
|
||||
@@ -76,8 +77,7 @@ public class ResidencePlayerListener implements Listener {
|
||||
public void doHeals() {
|
||||
try {
|
||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
String resname = Residence.getPlayerListener().getCurrentResidenceName(
|
||||
player.getName());
|
||||
String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName());
|
||||
ClaimedResidence res = null;
|
||||
if (resname != null) {
|
||||
res = Residence.getResidenceManager().getByName(resname);
|
||||
@@ -131,12 +131,11 @@ public class ResidencePlayerListener implements Listener {
|
||||
|
||||
if (leave != null && !leave.equals("")) {
|
||||
if (Residence.getConfigManager().useActionBar()) {
|
||||
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW)
|
||||
.append(insertMessages(player, ResOld.getName(), ResOld, leave))
|
||||
ActionBar.send(player,
|
||||
(new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave))
|
||||
.toString());
|
||||
} else {
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ this.insertMessages(player, ResOld.getName(), ResOld, leave));
|
||||
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
|
||||
}
|
||||
}
|
||||
currentRes.remove(pname);
|
||||
@@ -145,8 +144,7 @@ public class ResidencePlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
if (move) {
|
||||
if (!res.getPermissions().playerHas(pname, "move", true)
|
||||
&& !Residence.isResAdminOn(player)
|
||||
if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)
|
||||
&& !player.hasPermission("residence.admin.move")) {
|
||||
Location lastLoc = lastOutsideLoc.get(pname);
|
||||
if (lastLoc != null) {
|
||||
@@ -155,8 +153,7 @@ public class ResidencePlayerListener implements Listener {
|
||||
player.teleport(res.getOutsideFreeLoc(loc));
|
||||
}
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("ResidenceMoveDeny",
|
||||
res.getName().split("\\.")[res.getName().split("\\.").length - 1]));
|
||||
+ Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1]));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -175,12 +172,11 @@ public class ResidencePlayerListener implements Listener {
|
||||
|
||||
if (leave != null && !leave.equals("") && ResOld != res.getParent()) {
|
||||
if (Residence.getConfigManager().useActionBar()) {
|
||||
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW)
|
||||
.append(insertMessages(player, ResOld.getName(), ResOld, leave))
|
||||
ActionBar.send(player,
|
||||
(new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave))
|
||||
.toString());
|
||||
} else {
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ this.insertMessages(player, ResOld.getName(), ResOld, leave));
|
||||
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -190,17 +186,12 @@ public class ResidencePlayerListener implements Listener {
|
||||
ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player);
|
||||
Residence.getServ().getPluginManager().callEvent(chgEvent);
|
||||
|
||||
if (enterMessage != null && !enterMessage.equals("")
|
||||
&& !(ResOld != null && res == ResOld.getParent())) {
|
||||
if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) {
|
||||
if (Residence.getConfigManager().useActionBar()) {
|
||||
ActionBar.send(
|
||||
player,
|
||||
(new StringBuilder()).append(ChatColor.YELLOW)
|
||||
.append(insertMessages(player, areaname, res, enterMessage))
|
||||
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage))
|
||||
.toString());
|
||||
} else {
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ this.insertMessages(player, areaname, res, enterMessage));
|
||||
player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -225,53 +216,25 @@ public class ResidencePlayerListener implements Listener {
|
||||
}
|
||||
|
||||
private boolean isCanUseEntity_BothClick(Material mat, Block block) {
|
||||
return mat == Material.LEVER
|
||||
|| mat == Material.STONE_BUTTON
|
||||
|| mat == Material.WOOD_BUTTON
|
||||
|| mat == Material.WOODEN_DOOR
|
||||
|| mat == Material.SPRUCE_DOOR
|
||||
|| mat == Material.BIRCH_DOOR
|
||||
|| mat == Material.JUNGLE_DOOR
|
||||
|| mat == Material.ACACIA_DOOR
|
||||
|| mat == Material.DARK_OAK_DOOR
|
||||
|| mat == Material.SPRUCE_FENCE_GATE
|
||||
|| mat == Material.BIRCH_FENCE_GATE
|
||||
|| mat == Material.JUNGLE_FENCE_GATE
|
||||
|| mat == Material.ACACIA_FENCE_GATE
|
||||
|| mat == Material.DARK_OAK_FENCE_GATE
|
||||
|| mat == Material.TRAP_DOOR
|
||||
|| mat == Material.FENCE_GATE
|
||||
|| mat == Material.PISTON_BASE
|
||||
|| mat == Material.PISTON_STICKY_BASE
|
||||
|| mat == Material.DRAGON_EGG
|
||||
|| Residence.getConfigManager().getCustomBothClick()
|
||||
.contains(Integer.valueOf(block.getTypeId()));
|
||||
return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR
|
||||
|| mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR
|
||||
|| mat == Material.DARK_OAK_DOOR || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE
|
||||
|| mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE || mat == Material.DARK_OAK_FENCE_GATE
|
||||
|| mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE
|
||||
|| mat == Material.DRAGON_EGG || Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()));
|
||||
}
|
||||
|
||||
private boolean isCanUseEntity_RClickOnly(Material mat, Block block) {
|
||||
return mat == Material.ITEM_FRAME
|
||||
|| mat == Material.BEACON
|
||||
|| mat == Material.FLOWER_POT
|
||||
|| mat == Material.COMMAND
|
||||
|| mat == Material.ANVIL
|
||||
|| mat == Material.CAKE_BLOCK
|
||||
|| mat == Material.NOTE_BLOCK
|
||||
|| mat == Material.DIODE
|
||||
|| mat == Material.DIODE_BLOCK_OFF
|
||||
|| mat == Material.DIODE_BLOCK_ON
|
||||
|| mat == Material.BED_BLOCK
|
||||
|| mat == Material.WORKBENCH
|
||||
|| mat == Material.BREWING_STAND
|
||||
return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL
|
||||
|| mat == Material.CAKE_BLOCK || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF
|
||||
|| mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH || mat == Material.BREWING_STAND
|
||||
|| mat == Material.ENCHANTMENT_TABLE
|
||||
|| Residence.getConfigManager().getCustomRightClick()
|
||||
.contains(Integer.valueOf(block.getTypeId()));
|
||||
|| Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()));
|
||||
}
|
||||
|
||||
private boolean isContainer(Material mat, Block block) {
|
||||
return FlagPermissions.getMaterialUseFlagList().containsKey(mat)
|
||||
&& FlagPermissions.getMaterialUseFlagList().get(mat).equals("container")
|
||||
|| Residence.getConfigManager().getCustomContainers()
|
||||
.contains(Integer.valueOf(block.getTypeId()));
|
||||
return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container")
|
||||
|| Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
@@ -280,25 +243,19 @@ public class ResidencePlayerListener implements Listener {
|
||||
if (Residence.isResAdminOn(player))
|
||||
return;
|
||||
String pname = player.getName();
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(
|
||||
event.getBlockClicked().getLocation());
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
|
||||
if (res != null) {
|
||||
if (Residence.getConfigManager().preventRentModify()
|
||||
&& Residence.getConfigManager().enabledRentSystem()) {
|
||||
if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) {
|
||||
if (Residence.getRentManager().isRented(res.getName())) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("RentedModifyDeny"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked()
|
||||
.getLocation(), player);
|
||||
if (!perms.playerHas(pname, player.getWorld().getName(), "bucket",
|
||||
perms.playerHas(pname, player.getWorld().getName(), "build", true))) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
|
||||
if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) {
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -309,26 +266,21 @@ public class ResidencePlayerListener implements Listener {
|
||||
String pname = player.getName();
|
||||
if (Residence.isResAdminOn(player))
|
||||
return;
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(
|
||||
event.getBlockClicked().getLocation());
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
|
||||
if (res != null) {
|
||||
if (Residence.getConfigManager().preventRentModify()
|
||||
&& Residence.getConfigManager().enabledRentSystem()) {
|
||||
if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) {
|
||||
if (Residence.getRentManager().isRented(res.getName())) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("RentedModifyDeny"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked()
|
||||
.getLocation(), player);
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
|
||||
boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket",
|
||||
perms.playerHas(pname, player.getWorld().getName(), "build", true));
|
||||
if (!hasbucket) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -356,13 +308,11 @@ public class ResidencePlayerListener implements Listener {
|
||||
if (block == null)
|
||||
return;
|
||||
Material mat = block.getType();
|
||||
if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block))
|
||||
&& event.getAction() == Action.RIGHT_CLICK_BLOCK
|
||||
if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK
|
||||
|| isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) {
|
||||
int typeId = player.getItemInHand().getTypeId();
|
||||
if (typeId != Residence.getConfigManager().getSelectionTooldID()
|
||||
&& typeId != Residence.getConfigManager().getInfoToolID() && typeId != 351
|
||||
&& typeId != 416)
|
||||
if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID()
|
||||
&& typeId != 351 && typeId != 416)
|
||||
return;
|
||||
}
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player);
|
||||
@@ -373,14 +323,12 @@ public class ResidencePlayerListener implements Listener {
|
||||
if (!resadmin) {
|
||||
boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
|
||||
boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse);
|
||||
if ((!hasuse && !haspressure || !haspressure)
|
||||
&& (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) {
|
||||
if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!perms.playerHas(player.getName(), world, "trample",
|
||||
perms.playerHas(player.getName(), world, "build", true))
|
||||
if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true))
|
||||
&& (mat == Material.SOIL || mat == Material.SOUL_SAND)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@@ -392,39 +340,29 @@ public class ResidencePlayerListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK
|
||||
|| event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
if (player.getItemInHand().getTypeId() == Residence.getConfigManager()
|
||||
.getSelectionTooldID()) {
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getSelectionTooldID()) {
|
||||
Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit");
|
||||
if (wep != null) {
|
||||
if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence
|
||||
.getConfigManager().getSelectionTooldID())
|
||||
if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID())
|
||||
return;
|
||||
}
|
||||
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
|
||||
if (player.hasPermission("residence.select")
|
||||
|| player.hasPermission("residence.create")
|
||||
&& !player.isPermissionSet("residence.select")
|
||||
|| group.canCreateResidences()
|
||||
&& !player.isPermissionSet("residence.create")
|
||||
if (player.hasPermission("residence.select") || player.hasPermission("residence.create")
|
||||
&& !player.isPermissionSet("residence.select") || group.canCreateResidences() && !player.isPermissionSet("residence.create")
|
||||
&& !player.isPermissionSet("residence.select") || resadmin) {
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||
Location loc = block.getLocation();
|
||||
Residence.getSelectionManager().placeLoc1(player, loc);
|
||||
player.sendMessage(ChatColor.GREEN
|
||||
+ Residence.getLanguage().getPhrase("SelectPoint",
|
||||
Residence.getLanguage().getPhrase("Primary"))
|
||||
+ ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY()
|
||||
+ "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
|
||||
+ Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED
|
||||
+ "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
|
||||
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
Location loc = block.getLocation();
|
||||
Residence.getSelectionManager().placeLoc2(player, loc);
|
||||
player.sendMessage(ChatColor.GREEN
|
||||
+ Residence.getLanguage().getPhrase("SelectPoint",
|
||||
Residence.getLanguage().getPhrase("Secondary"))
|
||||
+ ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY()
|
||||
+ "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
|
||||
+ Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED
|
||||
+ "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@@ -447,15 +385,10 @@ public class ResidencePlayerListener implements Listener {
|
||||
if (heldItem != null) {
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
if (player.getItemInHand().getTypeId() == 351) {
|
||||
if (player.getItemInHand().getData().getData() == 15
|
||||
&& block.getType() == Material.GRASS
|
||||
|| player.getItemInHand().getData().getData() == 3
|
||||
&& block.getTypeId() == 17
|
||||
&& (block.getData() == 3 || block.getData() == 7
|
||||
|| block.getData() == 11 || block.getData() == 15)) {
|
||||
perms = Residence.getPermsByLocForPlayer(
|
||||
block.getRelative(event.getBlockFace()).getLocation(),
|
||||
player);
|
||||
if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS
|
||||
|| player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17
|
||||
&& (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) {
|
||||
perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
|
||||
if (!perms.playerHas(player.getName(), world, "build", true)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@@ -463,11 +396,9 @@ public class ResidencePlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
if (heldItem == Material.ARMOR_STAND) {
|
||||
perms = Residence.getPermsByLocForPlayer(
|
||||
block.getRelative(event.getBlockFace()).getLocation(), player);
|
||||
perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
|
||||
if (!perms.playerHas(player.getName(), world, "build", true)) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("NoPermission"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@@ -476,51 +407,40 @@ public class ResidencePlayerListener implements Listener {
|
||||
}
|
||||
if (isContainer(mat, block) || isCanUseEntity(mat, block)) {
|
||||
boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
|
||||
for (Entry<Material, String> checkMat : FlagPermissions
|
||||
.getMaterialUseFlagList().entrySet()) {
|
||||
for (Entry<Material, String> checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) {
|
||||
if (mat == checkMat.getKey()) {
|
||||
if (!perms.playerHas(player.getName(), world, checkMat.getValue(),
|
||||
hasuse)) {
|
||||
if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) {
|
||||
if (hasuse || checkMat.getValue().equals("container")) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny",
|
||||
checkMat.getValue()));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue()));
|
||||
return;
|
||||
} else {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Residence.getConfigManager().getCustomContainers()
|
||||
.contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (!perms.playerHas(player.getName(), world, "container", hasuse)) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (Residence.getConfigManager().getCustomBothClick()
|
||||
.contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (!hasuse) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
if (Residence.getConfigManager().getCustomRightClick()
|
||||
.contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) {
|
||||
if (!hasuse) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -543,11 +463,9 @@ public class ResidencePlayerListener implements Listener {
|
||||
FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player);
|
||||
String world = player.getWorld().getName();
|
||||
|
||||
if (!perms.playerHas(player.getName(), world, "container",
|
||||
perms.playerHas(player.getName(), world, "use", true))) {
|
||||
if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -559,12 +477,10 @@ public class ResidencePlayerListener implements Listener {
|
||||
Entity ent = event.getRightClicked();
|
||||
/* Trade */
|
||||
if (ent.getType() == EntityType.VILLAGER) {
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(
|
||||
event.getPlayer().getLocation());
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation());
|
||||
|
||||
if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) {
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("NoPermission"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -584,11 +500,9 @@ public class ResidencePlayerListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (!perms.playerHas(player.getName(), world, "container",
|
||||
perms.playerHas(player.getName(), world, "use", true))) {
|
||||
if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -600,9 +514,6 @@ public class ResidencePlayerListener implements Listener {
|
||||
Residence.turnResAdminOn(player);
|
||||
}
|
||||
handleNewLocation(player, player.getLocation(), false);
|
||||
if (player.isOp() || player.hasPermission("residence.versioncheck")) {
|
||||
Residence.getVersionChecker().VersionCheck(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
@@ -669,15 +580,13 @@ public class ResidencePlayerListener implements Listener {
|
||||
}
|
||||
|
||||
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc);
|
||||
if (event.getCause() == TeleportCause.ENDER_PEARL
|
||||
|| event.getCause() == TeleportCause.COMMAND
|
||||
if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND
|
||||
|| event.getCause() == TeleportCause.NETHER_PORTAL) {
|
||||
if (res != null) {
|
||||
String areaname = Residence.getResidenceManager().getNameByLoc(loc);
|
||||
if (!res.getPermissions().playerHas(player.getName(), "move", true)) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -685,11 +594,9 @@ public class ResidencePlayerListener implements Listener {
|
||||
if (event.getCause() == TeleportCause.PLUGIN) {
|
||||
if (res != null) {
|
||||
String areaname = Residence.getResidenceManager().getNameByLoc(loc);
|
||||
if (!res.getPermissions().playerHas(player.getName(), "tp", true)
|
||||
&& !player.hasPermission("residence.admin.tp")) {
|
||||
if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(ChatColor.RED
|
||||
+ Residence.getLanguage().getPhrase("TeleportDeny", areaname));
|
||||
player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -713,14 +620,10 @@ public class ResidencePlayerListener implements Listener {
|
||||
String pname = player.getName();
|
||||
if (playerToggleChat.contains(pname)) {
|
||||
playerToggleChat.remove(pname);
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ Residence.getLanguage().getPhrase("ResidenceChat",
|
||||
ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
|
||||
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
|
||||
} else {
|
||||
playerToggleChat.add(pname);
|
||||
player.sendMessage(ChatColor.YELLOW
|
||||
+ Residence.getLanguage().getPhrase("ResidenceChat",
|
||||
ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
|
||||
player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
115
src/com/bekvon/bukkit/residence/utils/DataBackup.java
Normal file
115
src/com/bekvon/bukkit/residence/utils/DataBackup.java
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.bekvon.bukkit.residence.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.zip.Deflater;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import org.bukkit.World;
|
||||
|
||||
import com.bekvon.bukkit.residence.Residence;
|
||||
|
||||
public class DataBackup {
|
||||
private File BackupDir = new File(Residence.getDataLocation(), "Backup");
|
||||
|
||||
public static void run() throws IOException {
|
||||
DataBackup backup = new DataBackup();
|
||||
backup.backup();
|
||||
}
|
||||
|
||||
public void backup() throws IOException {
|
||||
try {
|
||||
BackupDir.mkdir();
|
||||
Date date = new Date();
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
|
||||
File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip");
|
||||
|
||||
// Create the Source List, and add directories/etc to the file.
|
||||
List<File> sources = new ArrayList<File>();
|
||||
|
||||
File saveFolder = new File(Residence.getDataLocation(), "Save");
|
||||
File worldFolder = new File(saveFolder, "Worlds");
|
||||
if (!saveFolder.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
File saveFile;
|
||||
for (World world : Residence.getServ().getWorlds()) {
|
||||
saveFile = new File(worldFolder, "res_" + world.getName() + ".yml");
|
||||
if (saveFile.isFile()) {
|
||||
sources.add(saveFile);
|
||||
}
|
||||
}
|
||||
packZip(fileZip, sources);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void packZip(File output, List<File> sources) throws IOException {
|
||||
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output));
|
||||
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
|
||||
|
||||
for (File source : sources) {
|
||||
if (source.isDirectory()) {
|
||||
zipDir(zipOut, "", source);
|
||||
} else {
|
||||
zipFile(zipOut, "", source);
|
||||
}
|
||||
}
|
||||
|
||||
zipOut.flush();
|
||||
zipOut.close();
|
||||
}
|
||||
|
||||
private String buildPath(String path, String file) {
|
||||
if (path == null || path.isEmpty()) {
|
||||
return file;
|
||||
}
|
||||
|
||||
return path + File.separator + file;
|
||||
}
|
||||
|
||||
private void zipDir(ZipOutputStream zos, String path, File dir) throws IOException {
|
||||
if (!dir.canRead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
File[] files = dir.listFiles();
|
||||
path = buildPath(path, dir.getName());
|
||||
|
||||
for (File source : files) {
|
||||
if (source.isDirectory()) {
|
||||
zipDir(zos, path, source);
|
||||
} else {
|
||||
zipFile(zos, path, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void zipFile(ZipOutputStream zos, String path, File file) throws IOException {
|
||||
if (!file.canRead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
zos.putNextEntry(new ZipEntry(buildPath(path, file.getName())));
|
||||
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
byte[] buffer = new byte[4092];
|
||||
int byteCount = 0;
|
||||
|
||||
while ((byteCount = fis.read(buffer)) != -1) {
|
||||
zos.write(buffer, 0, byteCount);
|
||||
}
|
||||
|
||||
fis.close();
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
@@ -10,45 +10,66 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.bekvon.bukkit.residence.Residence;
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
public class VersionChecker {
|
||||
Residence plugin;
|
||||
public class VersionChecker implements Listener {
|
||||
Plugin plugin;
|
||||
String checkurl = "https://coding.net/u/502647092/p/{0}/git/raw/{1}/src/plugin.yml";
|
||||
String branch = "master";
|
||||
|
||||
public VersionChecker(Residence plugin) {
|
||||
public VersionChecker(Plugin plugin) {
|
||||
this.plugin = plugin;
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
this.VersionCheck(null);
|
||||
}
|
||||
|
||||
// https://coding.net/u/502647092/p/SimpleEssential/git/raw/master/src/plugin.yml
|
||||
public VersionChecker(Plugin plugin, String branch) {
|
||||
this.plugin = plugin;
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
this.checkurl = branch;
|
||||
this.VersionCheck(null);
|
||||
}
|
||||
|
||||
public String getCheckUrl(String pluginName, String branch) {
|
||||
return String.format(checkurl, pluginName, branch);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent e) {
|
||||
if (e.getPlayer().isOp()) {
|
||||
this.VersionCheck(e.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
public void VersionCheck(final Player player) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
String readURL = "http://ci.citycraft.cn:8800/jenkins/job/Residence-Fix/lastSuccessfulBuild/artifact/src/plugin.yml";
|
||||
String readURL = getCheckUrl(plugin.getName(), branch);
|
||||
FileConfiguration config;
|
||||
String currentVersion = plugin.getDescription().getVersion();
|
||||
try {
|
||||
URL url = new URL(readURL);
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),
|
||||
Charsets.UTF_8));
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charsets.UTF_8));
|
||||
config = YamlConfiguration.loadConfiguration(br);
|
||||
String newVersion = config.getString("version");
|
||||
br.close();
|
||||
if (!newVersion.equals(currentVersion)) {
|
||||
String[] msg = new String[] {
|
||||
ChatColor.GREEN + "领地插件最新版本 v" + newVersion,
|
||||
ChatColor.GREEN + plugin.getName() + " 插件最新版本 v" + newVersion,
|
||||
ChatColor.RED + "服务器运行版本: v" + currentVersion,
|
||||
ChatColor.GOLD + "插件更新网站: " + ChatColor.BLUE
|
||||
+ plugin.getDescription().getWebsite(),
|
||||
ChatColor.YELLOW
|
||||
+ "查看最新修改: "
|
||||
+ ChatColor.BLUE
|
||||
+ "http://ci.citycraft.cn:8800/jenkins/job/Residence-Fix/changes" };
|
||||
ChatColor.GOLD + "插件更新网站: " + ChatColor.BLUE + plugin.getDescription().getWebsite()
|
||||
};
|
||||
if (player != null) {
|
||||
player.sendMessage(msg);
|
||||
} else {
|
||||
plugin.consoleMessage(msg);
|
||||
plugin.getServer().getConsoleSender().sendMessage(msg);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
package com.bekvon.bukkit.residence.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.zip.Deflater;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import org.bukkit.World;
|
||||
|
||||
import com.bekvon.bukkit.residence.Residence;
|
||||
|
||||
public class ZipLibrary {
|
||||
private static File BackupDir = new File(Residence.getDataLocation(), "Backup");
|
||||
|
||||
public static void backup() throws IOException {
|
||||
try {
|
||||
BackupDir.mkdir();
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
// Generate the proper date for the backup filename
|
||||
Date date = new Date();
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
|
||||
File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip");
|
||||
|
||||
// Create the Source List, and add directories/etc to the file.
|
||||
List<File> sources = new ArrayList<File>();
|
||||
|
||||
File saveFolder = new File(Residence.getDataLocation(), "Save");
|
||||
File worldFolder = new File(saveFolder, "Worlds");
|
||||
if (!saveFolder.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
File saveFile;
|
||||
for (World world : Residence.getServ().getWorlds()) {
|
||||
saveFile = new File(worldFolder, "res_" + world.getName() + ".yml");
|
||||
if (saveFile.isFile()) {
|
||||
sources.add(saveFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
packZip(fileZip, sources);
|
||||
}
|
||||
|
||||
private static void packZip(File output, List<File> sources) throws IOException {
|
||||
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output));
|
||||
zipOut.setLevel(Deflater.DEFAULT_COMPRESSION);
|
||||
|
||||
for (File source : sources) {
|
||||
if (source.isDirectory()) {
|
||||
zipDir(zipOut, "", source);
|
||||
}
|
||||
else {
|
||||
zipFile(zipOut, "", source);
|
||||
}
|
||||
}
|
||||
|
||||
zipOut.flush();
|
||||
zipOut.close();
|
||||
}
|
||||
|
||||
private static String buildPath(String path, String file) {
|
||||
if (path == null || path.isEmpty()) {
|
||||
return file;
|
||||
}
|
||||
|
||||
return path + File.separator + file;
|
||||
}
|
||||
|
||||
private static void zipDir(ZipOutputStream zos, String path, File dir) throws IOException {
|
||||
if (!dir.canRead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
File[] files = dir.listFiles();
|
||||
path = buildPath(path, dir.getName());
|
||||
|
||||
for (File source : files) {
|
||||
if (source.isDirectory()) {
|
||||
zipDir(zos, path, source);
|
||||
}
|
||||
else {
|
||||
zipFile(zos, path, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void zipFile(ZipOutputStream zos, String path, File file) throws IOException {
|
||||
if (!file.canRead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
zos.putNextEntry(new ZipEntry(buildPath(path, file.getName())));
|
||||
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
byte[] buffer = new byte[4092];
|
||||
int byteCount = 0;
|
||||
|
||||
while ((byteCount = fis.read(buffer)) != -1) {
|
||||
zos.write(buffer, 0, byteCount);
|
||||
}
|
||||
|
||||
fis.close();
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user