From d87f636c2e2dcd0f9d8419b3eba02125d1e32f4a Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sun, 18 Feb 2024 14:33:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++ pom.xml | 2 +- .../java/cn/lunadeer/dominion/AutoClean.java | 25 +++++++++++++++++++ .../java/cn/lunadeer/dominion/Dominion.java | 1 + .../cn/lunadeer/dominion/dtos/PlayerDTO.java | 5 ++++ .../dominion/utils/ConfigManager.java | 25 +++++++++++++++++++ src/main/resources/config.yml | 4 +++ 7 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cn/lunadeer/dominion/AutoClean.java diff --git a/README.md b/README.md index 356435f..001b40b 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,10 @@ MaxX: 128 MaxY: 64 MaxZ: 128 +AutoClean: + Enabled: false + AfterDays: 180 + BlueMap: true Debug: false diff --git a/pom.xml b/pom.xml index ebb5d41..933999e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.5.0-beta + 1.6.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/AutoClean.java b/src/main/java/cn/lunadeer/dominion/AutoClean.java new file mode 100644 index 0000000..8fddbec --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/AutoClean.java @@ -0,0 +1,25 @@ +package cn.lunadeer.dominion; + +import cn.lunadeer.dominion.controllers.PlayerController; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.utils.XLogger; + +import java.util.List; + +public class AutoClean { + public static void run() { + if (!Dominion.config.getAutoCleanEnable()) { + return; + } + XLogger.info("开始自动清理长时间未登录玩家领地数据"); + int auto_clean_after_days = Dominion.config.getAutoCleanAfterDays(); + List players = PlayerController.allPlayers(); + for (PlayerDTO p : players) { + if (p.getLastJoinAt() + (long) auto_clean_after_days * 24 * 60 * 60 * 1000 < System.currentTimeMillis()) { + PlayerDTO.delete(p); + XLogger.info("已清理玩家 " + p.getLastKnownName() + " 的领地数据"); + } + } + XLogger.info("自动清理完成"); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index cf038c1..fd1a68f 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -44,6 +44,7 @@ public final class Dominion extends JavaPlugin { XLogger.info(" |_____/ \\___/|_| |_| |_|_|_| |_|_|\\___/|_| |_|"); XLogger.info(" "); + Time.runLater(this, AutoClean::run, 20 * 30); Time.runLater(this, BlueMapConnect::render, 20 * 60); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java index 2cba659..39d1205 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java @@ -68,6 +68,11 @@ public class PlayerDTO { return query(sql); } + public static void delete(PlayerDTO player) { + String sql = "DELETE FROM player_name WHERE uuid = '" + player.getUuid().toString() + "';"; + query(sql); + } + private static PlayerDTO insert(PlayerDTO player) { String sql = "INSERT INTO player_name (uuid, last_known_name, last_join_at) " + "VALUES" + diff --git a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java index e43b46b..8b8fbb4 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java +++ b/src/main/java/cn/lunadeer/dominion/utils/ConfigManager.java @@ -25,6 +25,8 @@ public class ConfigManager { _max_y = _file.getInt("MaxY", 64); _max_z = _file.getInt("MaxZ", 128); _blue_map = _file.getBoolean("BlueMap", true); + _auto_clean_enable = _file.getBoolean("AutoClean.Enable", false); + _auto_clean_after_days = _file.getInt("AutoClean.AfterDays", 180); } public Boolean isDebug() { @@ -118,6 +120,26 @@ public class ConfigManager { _plugin.saveConfig(); } + public Boolean getAutoCleanEnable() { + return _auto_clean_enable; + } + + public void setAutoCleanEnable(Boolean auto_clean_enable) { + _auto_clean_enable = auto_clean_enable; + _file.set("AutoClean.Enable", auto_clean_enable); + _plugin.saveConfig(); + } + + public Integer getAutoCleanAfterDays() { + return _auto_clean_after_days; + } + + public void setAutoCleanAfterDays(Integer auto_clean_after_days) { + _auto_clean_after_days = auto_clean_after_days; + _file.set("AutoClean.AfterDays", auto_clean_after_days); + _plugin.saveConfig(); + } + private final Dominion _plugin; private FileConfiguration _file; @@ -136,4 +158,7 @@ public class ConfigManager { private Integer _max_z; private Boolean _blue_map; + + private Boolean _auto_clean_enable; + private Integer _auto_clean_after_days; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 38fe2c2..df8c32a 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,6 +10,10 @@ MaxX: 128 MaxY: 64 MaxZ: 128 +AutoClean: + Enabled: false + AfterDays: 180 + BlueMap: true Debug: false \ No newline at end of file