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

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;
@@ -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 + "!"));
}
}
}

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.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) {

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