diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 9e8b5eaf..88a3dbad 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -110,6 +110,7 @@ public class AuthMe extends JavaPlugin { public boolean antibotMod = false; public boolean delayedAntiBot = true; protected static String vgUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; + public DataManager dataManager; public Settings getSettings() { return settings; @@ -328,6 +329,9 @@ public class AuthMe extends JavaPlugin { // Start Email recall task if needed recallEmail(); + dataManager = new DataManager(this, database); + dataManager.start(); + ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " enabled"); } @@ -485,7 +489,13 @@ public class AuthMe extends JavaPlugin { } if (databaseThread != null) { - databaseThread.interrupt(); + if (databaseThread.isAlive()) + databaseThread.interrupt(); + } + + if (dataManager != null) { + if (dataManager.isAlive()) + dataManager.interrupt(); } if(Settings.isBackupActivated && Settings.isBackupOnStop) { @@ -620,80 +630,13 @@ public class AuthMe extends JavaPlugin { if (cleared.isEmpty()) return; if (Settings.purgeEssentialsFile && this.ess != null) - purgeEssentials(cleared); + dataManager.purgeEssentials(cleared); if (Settings.purgePlayerDat) - purgeDat(cleared); + dataManager.purgeDat(cleared); if (Settings.purgeLimitedCreative) - purgeLimitedCreative(cleared); + dataManager.purgeLimitedCreative(cleared); if (Settings.purgeAntiXray) - purgeAntiXray(cleared); - } - - public void purgeAntiXray(List cleared) { - int i = 0; - for (String name : cleared) { - org.bukkit.OfflinePlayer player = Bukkit.getOfflinePlayer(name); - if (player == null) continue; - String playerName = player.getName(); - File playerFile = new File("." + File.separator + "plugins" + File.separator + "AntiXRayData" + File.separator + "PlayerData" + File.separator + playerName); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " AntiXRayData Files"); - } - - public void purgeLimitedCreative(List cleared) { - int i = 0; - for (String name : cleared) { - org.bukkit.OfflinePlayer player = Bukkit.getOfflinePlayer(name); - if (player == null) continue; - String playerName = player.getName(); - File playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + ".yml"); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_creative.yml"); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_adventure.yml"); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " LimitedCreative Survival, Creative and Adventure files"); - } - - public void purgeDat(List cleared) { - int i = 0; - for (String name : cleared) { - org.bukkit.OfflinePlayer player = Bukkit.getOfflinePlayer(name); - if (player == null) continue; - String playerName = player.getName(); - File playerFile = new File (this.getServer().getWorldContainer() + File.separator + Settings.defaultWorld + File.separator + "players" + File.separator + playerName + ".dat"); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " .dat Files"); - } - - public void purgeEssentials(List cleared) { - int i = 0; - for (String name : cleared) { - File playerFile = new File(this.ess.getDataFolder() + File.separator + "userdata" + File.separator + name + ".yml"); - if (playerFile.exists()) { - playerFile.delete(); - i++; - } - } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " EssentialsFiles"); + dataManager.purgeAntiXray(cleared); } public Location getSpawnLocation(Player player) { diff --git a/src/main/java/fr/xephi/authme/DataManager.java b/src/main/java/fr/xephi/authme/DataManager.java new file mode 100644 index 00000000..535f36a0 --- /dev/null +++ b/src/main/java/fr/xephi/authme/DataManager.java @@ -0,0 +1,108 @@ +package fr.xephi.authme; + +import java.io.File; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +import fr.xephi.authme.datasource.DataSource; +import fr.xephi.authme.settings.Settings; + +public class DataManager extends Thread { + + public AuthMe plugin; + public DataSource database; + + public DataManager(AuthMe plugin, DataSource database) { + this.plugin = plugin; + this.database = database; + } + + public void run() {} + + public OfflinePlayer getOfflinePlayer(String name) { + OfflinePlayer result = null; + try { + if (org.bukkit.Bukkit.class.getMethod("getOfflinePlayer", new Class[]{String.class}).isAnnotationPresent(Deprecated.class)) { + for (OfflinePlayer op : Bukkit.getOfflinePlayers()) + if (op.getName().equalsIgnoreCase(name)) { + result = op; + break; + } + } else { + result = Bukkit.getOfflinePlayer(name); + } + } catch (Exception e) { + result = Bukkit.getOfflinePlayer(name); + } + return result; + } + + public void purgeAntiXray(List cleared) { + int i = 0; + for (String name : cleared) { + org.bukkit.OfflinePlayer player = getOfflinePlayer(name); + if (player == null) continue; + String playerName = player.getName(); + File playerFile = new File("." + File.separator + "plugins" + File.separator + "AntiXRayData" + File.separator + "PlayerData" + File.separator + playerName); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + } + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " AntiXRayData Files"); + } + + public void purgeLimitedCreative(List cleared) { + int i = 0; + for (String name : cleared) { + org.bukkit.OfflinePlayer player = getOfflinePlayer(name); + if (player == null) continue; + String playerName = player.getName(); + File playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + ".yml"); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_creative.yml"); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_adventure.yml"); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + } + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " LimitedCreative Survival, Creative and Adventure files"); + } + + public void purgeDat(List cleared) { + int i = 0; + for (String name : cleared) { + org.bukkit.OfflinePlayer player = getOfflinePlayer(name); + if (player == null) continue; + String playerName = player.getName(); + File playerFile = new File (plugin.getServer().getWorldContainer() + File.separator + Settings.defaultWorld + File.separator + "players" + File.separator + playerName + ".dat"); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + } + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " .dat Files"); + } + + public void purgeEssentials(List cleared) { + int i = 0; + for (String name : cleared) { + File playerFile = new File(plugin.ess.getDataFolder() + File.separator + "userdata" + File.separator + name + ".yml"); + if (playerFile.exists()) { + playerFile.delete(); + i++; + } + } + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " EssentialsFiles"); + } +} diff --git a/src/main/java/fr/xephi/authme/api/API.java b/src/main/java/fr/xephi/authme/api/API.java index ee3d88e1..050b34f0 100644 --- a/src/main/java/fr/xephi/authme/api/API.java +++ b/src/main/java/fr/xephi/authme/api/API.java @@ -161,7 +161,7 @@ public class API { */ public static String getPlayerRealName(String nickname) { try { - String realName = Bukkit.getOfflinePlayer(nickname).getName(); + String realName = instance.dataManager.getOfflinePlayer(nickname).getName(); if (realName != null && !realName.isEmpty()) return realName; } catch (NullPointerException npe) {} diff --git a/src/main/java/fr/xephi/authme/commands/AdminCommand.java b/src/main/java/fr/xephi/authme/commands/AdminCommand.java index de848d76..781739bf 100644 --- a/src/main/java/fr/xephi/authme/commands/AdminCommand.java +++ b/src/main/java/fr/xephi/authme/commands/AdminCommand.java @@ -111,13 +111,13 @@ public class AdminCommand implements CommandExecutor { List purged = database.autoPurgeDatabase(until); sender.sendMessage("Deleted " + purged.size() + " user accounts"); if (Settings.purgeEssentialsFile && plugin.ess != null) - plugin.purgeEssentials(purged); + plugin.dataManager.purgeEssentials(purged); if (Settings.purgePlayerDat) - plugin.purgeDat(purged); + plugin.dataManager.purgeDat(purged); if (Settings.purgeLimitedCreative) - plugin.purgeLimitedCreative(purged); + plugin.dataManager.purgeLimitedCreative(purged); if (Settings.purgeAntiXray) - plugin.purgeAntiXray(purged); + plugin.dataManager.purgeAntiXray(purged); return true; } catch (NumberFormatException e) { sender.sendMessage("Usage: /authme purge "); @@ -369,13 +369,13 @@ public class AdminCommand implements CommandExecutor { }); } if (Settings.purgeEssentialsFile && plugin.ess != null) - plugin.purgeEssentials(bannedPlayers); + plugin.dataManager.purgeEssentials(bannedPlayers); if (Settings.purgePlayerDat) - plugin.purgeDat(bannedPlayers); + plugin.dataManager.purgeDat(bannedPlayers); if (Settings.purgeLimitedCreative) - plugin.purgeLimitedCreative(bannedPlayers); + plugin.dataManager.purgeLimitedCreative(bannedPlayers); if (Settings.purgeAntiXray) - plugin.purgeAntiXray(bannedPlayers); + plugin.dataManager.purgeAntiXray(bannedPlayers); return true; } else if (args[0].equalsIgnoreCase("spawn")) { try {