From 4d65dd2a3a9afb82e98174d487196ba284198be8 Mon Sep 17 00:00:00 2001 From: HaHaWTH Date: Sun, 24 Mar 2024 02:52:05 +0800 Subject: [PATCH] Update --- src/main/java/fr/xephi/authme/AuthMe.java | 4 + .../authme/listener/GuiCaptchaHandler.java | 63 -------------- .../xephi/authme/listener/PurgeListener.java | 85 +++++++++++++++++++ .../settings/properties/SecuritySettings.java | 15 ++-- 4 files changed, 96 insertions(+), 71 deletions(-) create mode 100644 src/main/java/fr/xephi/authme/listener/PurgeListener.java diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index dbe9aa4a..a31d793a 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -25,6 +25,7 @@ import fr.xephi.authme.listener.PlayerListener111; import fr.xephi.authme.listener.PlayerListener19; import fr.xephi.authme.listener.PlayerListener19Spigot; import fr.xephi.authme.listener.PlayerListenerHigherThan18; +import fr.xephi.authme.listener.PurgeListener; import fr.xephi.authme.listener.ServerListener; import fr.xephi.authme.mail.EmailService; import fr.xephi.authme.output.ConsoleLoggerFactory; @@ -362,6 +363,9 @@ public class AuthMe extends JavaPlugin { } else if (settings.getProperty(SecuritySettings.ADVANCED_SHULKER_FIX) && isClassLoaded("org.bukkit.event.player.PlayerCommandSendEvent")) { logger.warning("You are running an 1.13+ minecraft server, advancedShulkerFix won't enable."); } + if (settings.getProperty(SecuritySettings.PURGE_DATA_ON_QUIT)) { + pluginManager.registerEvents(injector.getSingleton(PurgeListener.class), this); + } } /** diff --git a/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java b/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java index 497de210..99936137 100644 --- a/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java +++ b/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java @@ -25,13 +25,11 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import javax.inject.Inject; -import java.io.File; import java.util.List; import java.util.Random; import java.util.UUID; @@ -255,67 +253,6 @@ public class GuiCaptchaHandler implements Listener { } } - - private void deletePlayerData(UUID playerUUID) { - // 获取服务器的存储文件夹路径 - File serverFolder = Bukkit.getServer().getWorldContainer(); - String worldFolderName = settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD); - // 构建playerdata文件夹路径 - File playerDataFolder = new File(serverFolder, File.separator + worldFolderName + File.separator + "playerdata"); - - // 构建玩家数据文件路径 - File playerDataFile = new File(playerDataFolder, File.separator + playerUUID + ".dat"); - - // 删除玩家数据文件 - if (playerDataFile.exists()) { - playerDataFile.delete(); - } - } - - private void deletePlayerStats(UUID playerUUID) { - // 获取服务器的存储文件夹路径 - File serverFolder = Bukkit.getServer().getWorldContainer(); - String worldFolderName = settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD); - // 构建stats文件夹路径 - File statsFolder = new File(serverFolder, File.separator + worldFolderName + File.separator + "stats"); - // 构建玩家统计数据文件路径 - File statsFile = new File(statsFolder, File.separator + playerUUID + ".json"); - // 删除玩家统计数据文件 - if (statsFile.exists()) { - statsFile.delete(); - } - } - - private void deleteAuthMePlayerData(UUID playerUUID) { - File pluginFolder = plugin.getDataFolder(); - File path = new File(pluginFolder, File.separator + "playerdata" + File.separator + playerUUID); - File dataFile = new File(path, File.separator + "data.json"); - if (dataFile.exists()) { - dataFile.delete(); - path.delete(); - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - String name = player.getName(); - UUID playerUUID = event.getPlayer().getUniqueId(); - if (!authmeApi.isRegistered(name)) { - if (settings.getProperty(SecuritySettings.DELETE_UNVERIFIED_PLAYER_DATA) && !closeReasonMap.containsKey(player)) { - bukkitService.runTaskLater(() -> { - if (!player.isOnline()) { - deletePlayerData(playerUUID); - deletePlayerStats(playerUUID); - deleteAuthMePlayerData(playerUUID); - } - }, 100L); - return; - } - closeReasonMap.remove(player); - } - } - private Material getRandomMaterial() { Material[] allMaterials = Material.values(); Random random = new Random(); diff --git a/src/main/java/fr/xephi/authme/listener/PurgeListener.java b/src/main/java/fr/xephi/authme/listener/PurgeListener.java new file mode 100644 index 00000000..03f8a6ff --- /dev/null +++ b/src/main/java/fr/xephi/authme/listener/PurgeListener.java @@ -0,0 +1,85 @@ +package fr.xephi.authme.listener; + +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.api.v3.AuthMeApi; +import fr.xephi.authme.service.BukkitService; +import fr.xephi.authme.settings.Settings; +import fr.xephi.authme.settings.properties.SecuritySettings; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import javax.inject.Inject; +import java.io.File; +import java.util.UUID; + +public class PurgeListener implements Listener { + private final AuthMeApi authmeApi = AuthMeApi.getInstance(); + + @Inject + private Settings settings; + @Inject + private BukkitService bukkitService; + @Inject + private AuthMe plugin; + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + String name = player.getName(); + UUID playerUUID = event.getPlayer().getUniqueId(); + if (!authmeApi.isRegistered(name)) { + if (settings.getProperty(SecuritySettings.PURGE_DATA_ON_QUIT)) { + bukkitService.runTaskLater(() -> { + if (!player.isOnline()) { + deletePlayerData(playerUUID); + deletePlayerStats(playerUUID); + deleteAuthMePlayerData(playerUUID); + } + }, 100L); + } + } + } + + private void deletePlayerData(UUID playerUUID) { + // 获取服务器的存储文件夹路径 + File serverFolder = Bukkit.getServer().getWorldContainer(); + String worldFolderName = settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD); + // 构建playerdata文件夹路径 + File playerDataFolder = new File(serverFolder, File.separator + worldFolderName + File.separator + "playerdata"); + + // 构建玩家数据文件路径 + File playerDataFile = new File(playerDataFolder, File.separator + playerUUID + ".dat"); + + // 删除玩家数据文件 + if (playerDataFile.exists()) { + playerDataFile.delete(); + } + } + + private void deleteAuthMePlayerData(UUID playerUUID) { + File pluginFolder = plugin.getDataFolder(); + File path = new File(pluginFolder, File.separator + "playerdata" + File.separator + playerUUID); + File dataFile = new File(path, File.separator + "data.json"); + if (dataFile.exists()) { + dataFile.delete(); + path.delete(); + } + } + + private void deletePlayerStats(UUID playerUUID) { + // 获取服务器的存储文件夹路径 + File serverFolder = Bukkit.getServer().getWorldContainer(); + String worldFolderName = settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD); + // 构建stats文件夹路径 + File statsFolder = new File(serverFolder, File.separator + worldFolderName + File.separator + "stats"); + // 构建玩家统计数据文件路径 + File statsFile = new File(statsFolder, File.separator + playerUUID + ".json"); + // 删除玩家统计数据文件 + if (statsFile.exists()) { + statsFile.delete(); + } + } +} diff --git a/src/main/java/fr/xephi/authme/settings/properties/SecuritySettings.java b/src/main/java/fr/xephi/authme/settings/properties/SecuritySettings.java index d1134a32..0e6c3ca9 100644 --- a/src/main/java/fr/xephi/authme/settings/properties/SecuritySettings.java +++ b/src/main/java/fr/xephi/authme/settings/properties/SecuritySettings.java @@ -32,6 +32,13 @@ public final class SecuritySettings implements SettingsHolder { public static final Property FORCE_LOGIN_BEDROCK = newProperty("3rdPartyFeature.features.bedrockAutoLogin", false); + @Comment("Should we purge data on non-registered players quit?") + public static final Property PURGE_DATA_ON_QUIT = + newProperty("3rdPartyFeature.features.purgeData.purgeOnQuit", false); + + @Comment("Which world's player data should be deleted?(Enter the world *FOLDER* name where your players first logged in)") + public static final Property DELETE_PLAYER_DATA_WORLD = + newProperty("3rdPartyFeature.features.purgeData.purgeWorldFolderName", "world"); @Comment("Enable the new feature to prevent ghost players?") public static final Property ANTI_GHOST_PLAYERS = newProperty("3rdPartyFeature.fixes.antiGhostPlayer", false); @@ -60,14 +67,6 @@ public final class SecuritySettings implements SettingsHolder { public static final Property GUI_CAPTCHA_BE_COMPATIBILITY = newProperty("3rdPartyFeature.features.captcha.ignoreBedrock", false); - @Comment("Should we delete player data and stats when they didn't finish the captcha?") - public static final Property DELETE_UNVERIFIED_PLAYER_DATA = - newProperty("3rdPartyFeature.features.captcha.purgePlayerData", false); - - @Comment("Which world's player data should be deleted?(Enter the world *FOLDER* name where your players first logged in)") - public static final Property DELETE_PLAYER_DATA_WORLD = - newProperty("3rdPartyFeature.features.captcha.purgeWorldFolderName", "world"); - @Comment("Should we fix the location when players logged in the portal?") public static final Property LOGIN_LOC_FIX_SUB_PORTAL = newProperty("3rdPartyFeature.fixes.loginLocationFix.fixPortalStuck", false);