fix: QuickBack新增shutdown()方法,插件停用时取消定时任务避免异步泄漏
This commit is contained in:
@@ -704,8 +704,10 @@ public class Main extends JavaPlugin
|
||||
homeMgr.shutdown();
|
||||
if (deathReport != null)
|
||||
deathReport = null;
|
||||
if (quickBack != null)
|
||||
if (quickBack != null) {
|
||||
quickBack.shutdown();
|
||||
quickBack = null;
|
||||
}
|
||||
if (areaProtection != null) {
|
||||
areaProtection.stopEnforceTask();
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@@ -35,17 +35,18 @@ public class QuickBack implements Listener, CommandExecutor, TabCompleter {
|
||||
|
||||
// 冷却: player_name → next_available_time
|
||||
private final Map<String, Long> cooldowns = new ConcurrentHashMap<>();
|
||||
private static final long COOLDOWN_MS = 5 * 60 * 1000; // 5分钟冷却
|
||||
|
||||
// 最大记录数 per player
|
||||
private static final int MAX_RECORDS = 50;
|
||||
// ★ 定时器引用(用于 shutdown 时取消)
|
||||
private BukkitTask scheduleTask = null;
|
||||
|
||||
private static final long COOLDOWN_MS = 5 * 60 * 1000; // 5分钟冷却
|
||||
|
||||
public QuickBack(Main plugin) {
|
||||
this.plugin = plugin;
|
||||
loadAllFromDB();
|
||||
|
||||
// 每分钟记录所有在线玩家的坐标
|
||||
new BukkitRunnable() {
|
||||
scheduleTask = new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
@@ -231,4 +232,14 @@ public class QuickBack implements Listener, CommandExecutor, TabCompleter {
|
||||
plugin.getLogger().warning("[快速返回] 建表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 关闭 ====================
|
||||
|
||||
public void shutdown() {
|
||||
if (scheduleTask != null) {
|
||||
scheduleTask.cancel();
|
||||
}
|
||||
lastKnownLocations.clear();
|
||||
cooldowns.clear();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user