1
0
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:
j502647092
2015-08-14 08:44:08 +08:00
parent d960afd9f1
commit 4540d41eff
5 changed files with 255 additions and 351 deletions

View File

@@ -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; 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.HelpEntry;
import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.text.help.InformationPager;
import com.bekvon.bukkit.residence.utils.VersionChecker; 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.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
import com.earth2me.essentials.Essentials; import com.earth2me.essentials.Essentials;
@@ -82,7 +83,6 @@ public class Residence extends JavaPlugin {
protected static RentManager rentmanager; protected static RentManager rentmanager;
protected static ChatManager chatmanager; protected static ChatManager chatmanager;
protected static Server server; protected static Server server;
protected static VersionChecker versionChecker;
protected static HelpEntry helppages; protected static HelpEntry helppages;
protected static Language language; protected static Language language;
protected static Logger log; protected static Logger log;
@@ -96,7 +96,10 @@ public class Residence extends JavaPlugin {
protected static int autosaveBukkitId = -1; protected static int autosaveBukkitId = -1;
protected static boolean initsuccess = false; protected static boolean initsuccess = false;
protected static List<String> resadminToggle; protected static List<String> resadminToggle;
private final static String[] validLanguages = { "English", "Chinese" }; private final static String[] validLanguages = {
"English",
"Chinese"
};
public static ResidenceBlockListener getBlockListener() { public static ResidenceBlockListener getBlockListener() {
return blistener; return blistener;
@@ -189,10 +192,6 @@ public class Residence extends JavaPlugin {
return tmanager; return tmanager;
} }
public static VersionChecker getVersionChecker() {
return versionChecker;
}
public static WorldFlagManager getWorldFlags() { public static WorldFlagManager getWorldFlags() {
return wmanager; return wmanager;
} }
@@ -279,8 +278,7 @@ public class Residence extends JavaPlugin {
private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException {
File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml");
File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml");
+ ".yml");
if (outFile.isFile()) { if (outFile.isFile()) {
FileConfig testconfig = new FileConfig(); FileConfig testconfig = new FileConfig();
testconfig.load(outFile); testconfig.load(outFile);
@@ -379,33 +377,27 @@ public class Residence extends JavaPlugin {
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"), tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"), gmanager, rmanager);
gmanager, rmanager);
} }
loadFile = new File(saveFolder, "leases.yml"); loadFile = new File(saveFolder, "leases.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
leasemanager = LeaseManager.load((Map<String, Long>) yml.getRoot().get("Leases"), leasemanager = LeaseManager.load((Map<String, Long>) yml.getRoot().get("Leases"), rmanager);
rmanager);
} }
loadFile = new File(saveFolder, "permlists.yml"); loadFile = new File(saveFolder, "permlists.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get( pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists"));
"PermissionLists"));
} }
loadFile = new File(saveFolder, "rent.yml"); loadFile = new File(saveFolder, "rent.yml");
if (loadFile.isFile()) { if (loadFile.isFile()) {
yml = new YMLSaveHelper(loadFile); yml = new YMLSaveHelper(loadFile);
yml.load(); yml.load();
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot() rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
.get("RentSystem"));
} }
this.getLogger().info( this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
"从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000)
+ " 秒)");
// System.out.print("[Residence] Loaded..."); // System.out.print("[Residence] Loaded...");
return true; return true;
} catch (Exception ex) { } catch (Exception ex) {
@@ -428,7 +420,7 @@ public class Residence extends JavaPlugin {
if (initsuccess) { if (initsuccess) {
try { try {
saveYml(); saveYml();
ZipLibrary.backup(); DataBackup.run();
} catch (Exception ex) { } catch (Exception ex) {
this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!"); this.getLogger().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
this.getLogger().warning("错误: " + ex); this.getLogger().warning("错误: " + ex);
@@ -485,8 +477,7 @@ public class Residence extends JavaPlugin {
language = new Language(); language = new Language();
} }
} }
File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml");
+ ".yml");
try { try {
if (langFile.isFile()) { if (langFile.isFile()) {
loadLang(langFile); loadLang(langFile);
@@ -502,8 +493,7 @@ public class Residence extends JavaPlugin {
if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { if (this.getConfig().getBoolean("Global.EnableEconomy", false)) {
this.getLogger().info("扫描经济系统..."); this.getLogger().info("扫描经济系统...");
if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) {
ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin();
.getPermissionsPlugin();
if (vault.economyOK()) { if (vault.economyOK()) {
economy = vault; economy = vault;
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName()); this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
@@ -569,8 +559,7 @@ public class Residence extends JavaPlugin {
autosaveInt = 1; autosaveInt = 1;
} }
autosaveInt = autosaveInt * 60 * 20; autosaveInt = autosaveInt * 60 * 20;
autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt);
autosaveInt, autosaveInt);
healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20);
if (cmanager.useLeases()) { if (cmanager.useLeases()) {
int leaseInterval = cmanager.getLeaseCheckInterval(); int leaseInterval = cmanager.getLeaseCheckInterval();
@@ -578,8 +567,7 @@ public class Residence extends JavaPlugin {
leaseInterval = 1; leaseInterval = 1;
} }
leaseInterval = leaseInterval * 60 * 20; leaseInterval = leaseInterval * 60 * 20;
leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval);
leaseInterval, leaseInterval);
} }
if (cmanager.enabledRentSystem()) { if (cmanager.enabledRentSystem()) {
int rentint = cmanager.getRentCheckInterval(); int rentint = cmanager.getRentCheckInterval();
@@ -587,8 +575,7 @@ public class Residence extends JavaPlugin {
rentint = 1; rentint = 1;
} }
rentint = rentint * 60 * 20; rentint = rentint * 60 * 20;
rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint);
rentint, rentint);
} }
for (Player player : Bukkit.getServer().getOnlinePlayers()) { for (Player player : Bukkit.getServer().getOnlinePlayers()) {
if (Residence.getPermissionManager().isResidenceAdmin(player)) { if (Residence.getPermissionManager().isResidenceAdmin(player)) {
@@ -603,8 +590,7 @@ public class Residence extends JavaPlugin {
this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!"); this.getLogger().warning(" - 初始化失败! 卸载插件! 请报告以下错误给作者,谢谢!");
this.getLogger().warning("错误: " + ex); this.getLogger().warning("错误: " + ex);
} }
versionChecker = new VersionChecker(this); new VersionChecker(this);
versionChecker.VersionCheck(null);
} }
@Override @Override
@@ -726,16 +712,14 @@ public class Residence extends JavaPlugin {
ymlSaveLoc.renameTo(backupFile); ymlSaveLoc.renameTo(backupFile);
} }
tmpFile.renameTo(ymlSaveLoc); tmpFile.renameTo(ymlSaveLoc);
this.getLogger().info( this.getLogger().info("保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
"保存领地数据到文件中,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
if (cmanager.showIntervalMessages()) { if (cmanager.showIntervalMessages()) {
this.getLogger().info(" - 保存插件数据..."); this.getLogger().info(" - 保存插件数据...");
} }
} }
private void writeDefaultConfigFromJar() { private void writeDefaultConfigFromJar() {
if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) {
"config.yml", true)) {
this.getLogger().info("保存默认配置文件..."); this.getLogger().info("保存默认配置文件...");
} }
} }
@@ -744,8 +728,7 @@ public class Residence extends JavaPlugin {
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) {
try { try {
File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); File fileBackup = new File(this.getDataFolder(), "backup-" + writeName);
File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation() File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile();
.toURI()).getCanonicalFile();
if (jarloc.isFile()) { if (jarloc.isFile()) {
JarFile jar = new JarFile(jarloc); JarFile jar = new JarFile(jarloc);
JarEntry entry = jar.getJarEntry(jarPath); JarEntry entry = jar.getJarEntry(jarPath);

View File

@@ -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; package com.bekvon.bukkit.residence.listeners;
@@ -76,8 +77,7 @@ public class ResidencePlayerListener implements Listener {
public void doHeals() { public void doHeals() {
try { try {
for (Player player : Bukkit.getServer().getOnlinePlayers()) { for (Player player : Bukkit.getServer().getOnlinePlayers()) {
String resname = Residence.getPlayerListener().getCurrentResidenceName( String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName());
player.getName());
ClaimedResidence res = null; ClaimedResidence res = null;
if (resname != null) { if (resname != null) {
res = Residence.getResidenceManager().getByName(resname); res = Residence.getResidenceManager().getByName(resname);
@@ -131,12 +131,11 @@ public class ResidencePlayerListener implements Listener {
if (leave != null && !leave.equals("")) { if (leave != null && !leave.equals("")) {
if (Residence.getConfigManager().useActionBar()) { if (Residence.getConfigManager().useActionBar()) {
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW) ActionBar.send(player,
.append(insertMessages(player, ResOld.getName(), ResOld, leave)) (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave))
.toString()); .toString());
} else { } else {
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
+ this.insertMessages(player, ResOld.getName(), ResOld, leave));
} }
} }
currentRes.remove(pname); currentRes.remove(pname);
@@ -145,8 +144,7 @@ public class ResidencePlayerListener implements Listener {
return; return;
} }
if (move) { if (move) {
if (!res.getPermissions().playerHas(pname, "move", true) if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)
&& !Residence.isResAdminOn(player)
&& !player.hasPermission("residence.admin.move")) { && !player.hasPermission("residence.admin.move")) {
Location lastLoc = lastOutsideLoc.get(pname); Location lastLoc = lastOutsideLoc.get(pname);
if (lastLoc != null) { if (lastLoc != null) {
@@ -155,8 +153,7 @@ public class ResidencePlayerListener implements Listener {
player.teleport(res.getOutsideFreeLoc(loc)); player.teleport(res.getOutsideFreeLoc(loc));
} }
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("ResidenceMoveDeny", + Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1]));
res.getName().split("\\.")[res.getName().split("\\.").length - 1]));
return; return;
} }
} }
@@ -175,12 +172,11 @@ public class ResidencePlayerListener implements Listener {
if (leave != null && !leave.equals("") && ResOld != res.getParent()) { if (leave != null && !leave.equals("") && ResOld != res.getParent()) {
if (Residence.getConfigManager().useActionBar()) { if (Residence.getConfigManager().useActionBar()) {
ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW) ActionBar.send(player,
.append(insertMessages(player, ResOld.getName(), ResOld, leave)) (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave))
.toString()); .toString());
} else { } else {
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave));
+ this.insertMessages(player, ResOld.getName(), ResOld, leave));
} }
} }
} }
@@ -190,17 +186,12 @@ public class ResidencePlayerListener implements Listener {
ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player);
Residence.getServ().getPluginManager().callEvent(chgEvent); Residence.getServ().getPluginManager().callEvent(chgEvent);
if (enterMessage != null && !enterMessage.equals("") if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) {
&& !(ResOld != null && res == ResOld.getParent())) {
if (Residence.getConfigManager().useActionBar()) { if (Residence.getConfigManager().useActionBar()) {
ActionBar.send( ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage))
player,
(new StringBuilder()).append(ChatColor.YELLOW)
.append(insertMessages(player, areaname, res, enterMessage))
.toString()); .toString());
} else { } else {
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage));
+ this.insertMessages(player, areaname, res, enterMessage));
} }
} }
} }
@@ -225,53 +216,25 @@ public class ResidencePlayerListener implements Listener {
} }
private boolean isCanUseEntity_BothClick(Material mat, Block block) { private boolean isCanUseEntity_BothClick(Material mat, Block block) {
return mat == Material.LEVER return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR
|| mat == Material.STONE_BUTTON || mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR
|| mat == Material.WOOD_BUTTON || mat == Material.DARK_OAK_DOOR || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE
|| mat == Material.WOODEN_DOOR || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE || mat == Material.DARK_OAK_FENCE_GATE
|| mat == Material.SPRUCE_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE
|| mat == Material.BIRCH_DOOR || mat == Material.DRAGON_EGG || Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()));
|| 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) { private boolean isCanUseEntity_RClickOnly(Material mat, Block block) {
return mat == Material.ITEM_FRAME return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL
|| mat == Material.BEACON || mat == Material.CAKE_BLOCK || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF
|| mat == Material.FLOWER_POT || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH || mat == Material.BREWING_STAND
|| 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 || mat == Material.ENCHANTMENT_TABLE
|| Residence.getConfigManager().getCustomRightClick() || Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()));
.contains(Integer.valueOf(block.getTypeId()));
} }
private boolean isContainer(Material mat, Block block) { private boolean isContainer(Material mat, Block block) {
return FlagPermissions.getMaterialUseFlagList().containsKey(mat) return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container")
&& FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()));
|| Residence.getConfigManager().getCustomContainers()
.contains(Integer.valueOf(block.getTypeId()));
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
@@ -280,25 +243,19 @@ public class ResidencePlayerListener implements Listener {
if (Residence.isResAdminOn(player)) if (Residence.isResAdminOn(player))
return; return;
String pname = player.getName(); String pname = player.getName();
ClaimedResidence res = Residence.getResidenceManager().getByLoc( ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
event.getBlockClicked().getLocation());
if (res != null) { if (res != null) {
if (Residence.getConfigManager().preventRentModify() if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) {
&& Residence.getConfigManager().enabledRentSystem()) {
if (Residence.getRentManager().isRented(res.getName())) { if (Residence.getRentManager().isRented(res.getName())) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
+ Residence.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked() FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
.getLocation(), player); if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) {
if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
perms.playerHas(pname, player.getWorld().getName(), "build", true))) {
player.sendMessage(ChatColor.RED
+ Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
@@ -309,26 +266,21 @@ public class ResidencePlayerListener implements Listener {
String pname = player.getName(); String pname = player.getName();
if (Residence.isResAdminOn(player)) if (Residence.isResAdminOn(player))
return; return;
ClaimedResidence res = Residence.getResidenceManager().getByLoc( ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation());
event.getBlockClicked().getLocation());
if (res != null) { if (res != null) {
if (Residence.getConfigManager().preventRentModify() if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) {
&& Residence.getConfigManager().enabledRentSystem()) {
if (Residence.getRentManager().isRented(res.getName())) { if (Residence.getRentManager().isRented(res.getName())) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny"));
+ Residence.getLanguage().getPhrase("RentedModifyDeny"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked() FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player);
.getLocation(), player);
boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket",
perms.playerHas(pname, player.getWorld().getName(), "build", true)); perms.playerHas(pname, player.getWorld().getName(), "build", true));
if (!hasbucket) { if (!hasbucket) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
+ Residence.getLanguage().getPhrase("FlagDeny", "bucket"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
@@ -356,13 +308,11 @@ public class ResidencePlayerListener implements Listener {
if (block == null) if (block == null)
return; return;
Material mat = block.getType(); Material mat = block.getType();
if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK
&& event.getAction() == Action.RIGHT_CLICK_BLOCK
|| isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) { || isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) {
int typeId = player.getItemInHand().getTypeId(); int typeId = player.getItemInHand().getTypeId();
if (typeId != Residence.getConfigManager().getSelectionTooldID() if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID()
&& typeId != Residence.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 351 && typeId != 416)
&& typeId != 416)
return; return;
} }
FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player);
@@ -373,14 +323,12 @@ public class ResidencePlayerListener implements Listener {
if (!resadmin) { if (!resadmin) {
boolean hasuse = perms.playerHas(player.getName(), world, "use", true); boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse);
if ((!hasuse && !haspressure || !haspressure) if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) {
&& (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
if (!perms.playerHas(player.getName(), world, "trample", if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true))
perms.playerHas(player.getName(), world, "build", true))
&& (mat == Material.SOIL || mat == Material.SOUL_SAND)) { && (mat == Material.SOIL || mat == Material.SOUL_SAND)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -392,39 +340,29 @@ public class ResidencePlayerListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (event.getAction() == Action.LEFT_CLICK_BLOCK if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|| event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getSelectionTooldID()) {
if (player.getItemInHand().getTypeId() == Residence.getConfigManager()
.getSelectionTooldID()) {
Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit");
if (wep != null) { if (wep != null) {
if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID())
.getConfigManager().getSelectionTooldID())
return; return;
} }
PermissionGroup group = Residence.getPermissionManager().getGroup(player); PermissionGroup group = Residence.getPermissionManager().getGroup(player);
if (player.hasPermission("residence.select") if (player.hasPermission("residence.select") || player.hasPermission("residence.create")
|| player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group.canCreateResidences() && !player.isPermissionSet("residence.create")
&& !player.isPermissionSet("residence.select")
|| group.canCreateResidences()
&& !player.isPermissionSet("residence.create")
&& !player.isPermissionSet("residence.select") || resadmin) { && !player.isPermissionSet("residence.select") || resadmin) {
if (event.getAction() == Action.LEFT_CLICK_BLOCK) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
Location loc = block.getLocation(); Location loc = block.getLocation();
Residence.getSelectionManager().placeLoc1(player, loc); Residence.getSelectionManager().placeLoc1(player, loc);
player.sendMessage(ChatColor.GREEN player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SelectPoint", + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED
Residence.getLanguage().getPhrase("Primary")) + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
+ ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY()
+ "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Location loc = block.getLocation(); Location loc = block.getLocation();
Residence.getSelectionManager().placeLoc2(player, loc); Residence.getSelectionManager().placeLoc2(player, loc);
player.sendMessage(ChatColor.GREEN player.sendMessage(ChatColor.GREEN
+ Residence.getLanguage().getPhrase("SelectPoint", + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED
Residence.getLanguage().getPhrase("Secondary")) + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
+ ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY()
+ "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!");
} }
event.setCancelled(true); event.setCancelled(true);
} }
@@ -447,15 +385,10 @@ public class ResidencePlayerListener implements Listener {
if (heldItem != null) { if (heldItem != null) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (player.getItemInHand().getTypeId() == 351) { if (player.getItemInHand().getTypeId() == 351) {
if (player.getItemInHand().getData().getData() == 15 if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS
&& block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17
|| player.getItemInHand().getData().getData() == 3 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) {
&& block.getTypeId() == 17 perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
&& (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)) { if (!perms.playerHas(player.getName(), world, "build", true)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -463,11 +396,9 @@ public class ResidencePlayerListener implements Listener {
} }
} }
if (heldItem == Material.ARMOR_STAND) { if (heldItem == Material.ARMOR_STAND) {
perms = Residence.getPermsByLocForPlayer( perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player);
block.getRelative(event.getBlockFace()).getLocation(), player);
if (!perms.playerHas(player.getName(), world, "build", true)) { if (!perms.playerHas(player.getName(), world, "build", true)) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
+ Residence.getLanguage().getPhrase("NoPermission"));
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@@ -476,51 +407,40 @@ public class ResidencePlayerListener implements Listener {
} }
if (isContainer(mat, block) || isCanUseEntity(mat, block)) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) {
boolean hasuse = perms.playerHas(player.getName(), world, "use", true); boolean hasuse = perms.playerHas(player.getName(), world, "use", true);
for (Entry<Material, String> checkMat : FlagPermissions for (Entry<Material, String> checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) {
.getMaterialUseFlagList().entrySet()) {
if (mat == checkMat.getKey()) { if (mat == checkMat.getKey()) {
if (!perms.playerHas(player.getName(), world, checkMat.getValue(), if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) {
hasuse)) {
if (hasuse || checkMat.getValue().equals("container")) { if (hasuse || checkMat.getValue().equals("container")) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue()));
+ Residence.getLanguage().getPhrase("FlagDeny",
checkMat.getValue()));
return; return;
} else { } else {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
} }
} }
} }
if (Residence.getConfigManager().getCustomContainers() if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) {
.contains(Integer.valueOf(block.getTypeId()))) {
if (!perms.playerHas(player.getName(), world, "container", hasuse)) { if (!perms.playerHas(player.getName(), world, "container", hasuse)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
return; return;
} }
} }
if (Residence.getConfigManager().getCustomBothClick() if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) {
.contains(Integer.valueOf(block.getTypeId()))) {
if (!hasuse) { if (!hasuse) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
} }
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (Residence.getConfigManager().getCustomRightClick() if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) {
.contains(Integer.valueOf(block.getTypeId()))) {
if (!hasuse) { if (!hasuse) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use"));
+ Residence.getLanguage().getPhrase("FlagDeny", "use"));
return; return;
} }
} }
@@ -543,11 +463,9 @@ public class ResidencePlayerListener implements Listener {
FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player);
String world = player.getWorld().getName(); String world = player.getWorld().getName();
if (!perms.playerHas(player.getName(), world, "container", if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
perms.playerHas(player.getName(), world, "use", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
} }
} }
@@ -559,12 +477,10 @@ public class ResidencePlayerListener implements Listener {
Entity ent = event.getRightClicked(); Entity ent = event.getRightClicked();
/* Trade */ /* Trade */
if (ent.getType() == EntityType.VILLAGER) { if (ent.getType() == EntityType.VILLAGER) {
ClaimedResidence res = Residence.getResidenceManager().getByLoc( ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation());
event.getPlayer().getLocation());
if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) {
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
+ Residence.getLanguage().getPhrase("NoPermission"));
event.setCancelled(true); event.setCancelled(true);
} }
} }
@@ -584,11 +500,9 @@ public class ResidencePlayerListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!perms.playerHas(player.getName(), world, "container", if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) {
perms.playerHas(player.getName(), world, "use", true))) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container"));
+ Residence.getLanguage().getPhrase("FlagDeny", "container"));
} }
} }
@@ -600,9 +514,6 @@ public class ResidencePlayerListener implements Listener {
Residence.turnResAdminOn(player); Residence.turnResAdminOn(player);
} }
handleNewLocation(player, player.getLocation(), false); handleNewLocation(player, player.getLocation(), false);
if (player.isOp() || player.hasPermission("residence.versioncheck")) {
Residence.getVersionChecker().VersionCheck(player);
}
} }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
@@ -669,15 +580,13 @@ public class ResidencePlayerListener implements Listener {
} }
ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc);
if (event.getCause() == TeleportCause.ENDER_PEARL if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND
|| event.getCause() == TeleportCause.COMMAND
|| event.getCause() == TeleportCause.NETHER_PORTAL) { || event.getCause() == TeleportCause.NETHER_PORTAL) {
if (res != null) { if (res != null) {
String areaname = Residence.getResidenceManager().getNameByLoc(loc); String areaname = Residence.getResidenceManager().getNameByLoc(loc);
if (!res.getPermissions().playerHas(player.getName(), "move", true)) { if (!res.getPermissions().playerHas(player.getName(), "move", true)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname));
+ Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname));
return; return;
} }
} }
@@ -685,11 +594,9 @@ public class ResidencePlayerListener implements Listener {
if (event.getCause() == TeleportCause.PLUGIN) { if (event.getCause() == TeleportCause.PLUGIN) {
if (res != null) { if (res != null) {
String areaname = Residence.getResidenceManager().getNameByLoc(loc); String areaname = Residence.getResidenceManager().getNameByLoc(loc);
if (!res.getPermissions().playerHas(player.getName(), "tp", true) if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) {
&& !player.hasPermission("residence.admin.tp")) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname));
+ Residence.getLanguage().getPhrase("TeleportDeny", areaname));
return; return;
} }
} }
@@ -713,14 +620,10 @@ public class ResidencePlayerListener implements Listener {
String pname = player.getName(); String pname = player.getName();
if (playerToggleChat.contains(pname)) { if (playerToggleChat.contains(pname)) {
playerToggleChat.remove(pname); playerToggleChat.remove(pname);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
+ Residence.getLanguage().getPhrase("ResidenceChat",
ChatColor.RED + "OFF" + ChatColor.YELLOW + "!"));
} else { } else {
playerToggleChat.add(pname); playerToggleChat.add(pname);
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
+ Residence.getLanguage().getPhrase("ResidenceChat",
ChatColor.RED + "ON" + ChatColor.YELLOW + "!"));
} }
} }
} }

View 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();
}
}

View File

@@ -10,45 +10,66 @@ import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; 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; import com.google.common.base.Charsets;
public class VersionChecker { public class VersionChecker implements Listener {
Residence plugin; 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; 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) { public void VersionCheck(final Player player) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override @Override
public void run() { 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; FileConfiguration config;
String currentVersion = plugin.getDescription().getVersion(); String currentVersion = plugin.getDescription().getVersion();
try { try {
URL url = new URL(readURL); URL url = new URL(readURL);
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), Charsets.UTF_8));
Charsets.UTF_8));
config = YamlConfiguration.loadConfiguration(br); config = YamlConfiguration.loadConfiguration(br);
String newVersion = config.getString("version"); String newVersion = config.getString("version");
br.close(); br.close();
if (!newVersion.equals(currentVersion)) { if (!newVersion.equals(currentVersion)) {
String[] msg = new String[] { String[] msg = new String[] {
ChatColor.GREEN + "领地插件最新版本 v" + newVersion, ChatColor.GREEN + plugin.getName() + " 插件最新版本 v" + newVersion,
ChatColor.RED + "服务器运行版本: v" + currentVersion, ChatColor.RED + "服务器运行版本: v" + currentVersion,
ChatColor.GOLD + "插件更新网站: " + ChatColor.BLUE ChatColor.GOLD + "插件更新网站: " + ChatColor.BLUE + plugin.getDescription().getWebsite()
+ plugin.getDescription().getWebsite(), };
ChatColor.YELLOW
+ "查看最新修改: "
+ ChatColor.BLUE
+ "http://ci.citycraft.cn:8800/jenkins/job/Residence-Fix/changes" };
if (player != null) { if (player != null) {
player.sendMessage(msg); player.sendMessage(msg);
} else { } else {
plugin.consoleMessage(msg); plugin.getServer().getConsoleSender().sendMessage(msg);
} }
} }
} catch (IOException e) { } catch (IOException e) {

View File

@@ -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();
}
}