From ee5c0f608c921e0330ae187d0f9fd308109aee53 Mon Sep 17 00:00:00 2001 From: DIKER0K Date: Sat, 6 Dec 2025 15:58:27 +0500 Subject: [PATCH] fix player online --- pom.xml | 2 +- src/main/java/popa/popa.java | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 64fdae0..9f3c6d1 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ org.spigotmc spigot-api - 1.21.4-R0.1-SNAPSHOT + 1.21.10-R0.1-SNAPSHOT provided diff --git a/src/main/java/popa/popa.java b/src/main/java/popa/popa.java index 1e96113..f1d8638 100644 --- a/src/main/java/popa/popa.java +++ b/src/main/java/popa/popa.java @@ -68,8 +68,18 @@ public final class popa extends JavaPlugin implements Listener { // Инициализируем Gson для работы с JSON gson = new Gson(); + // Регистрируем события getServer().getPluginManager().registerEvents(this, this); + // ИНИЦИАЛИЗАЦИЯ УЖЕ ОНЛАЙН-ИГРОКОВ (после registerEvents) + long now = System.currentTimeMillis(); + for (Player player : Bukkit.getOnlinePlayers()) { + UUID id = player.getUniqueId(); + playerLoginTimes.put(id, now); + playerNames.put(id, player.getName()); + lastActivityTimes.put(id, now); + } + // Запускаем планировщик для проверки команд scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(this::checkAndExecuteCommands, 5, 5, TimeUnit.SECONDS); @@ -133,16 +143,20 @@ public final class popa extends JavaPlugin implements Listener { Player player = event.getPlayer(); UUID playerId = player.getUniqueId(); String playerName = player.getName(); - lastActivityTimes.put(playerId, System.currentTimeMillis()); + long now = System.currentTimeMillis(); - playerLoginTimes.put(playerId, System.currentTimeMillis()); + // Считаем, что игрок активен с момента входа + playerLoginTimes.put(playerId, now); playerNames.put(playerId, playerName); + lastActivityTimes.put(playerId, now); String joinPayload = String.format( "{\"event_type\":\"player_join\",\"player_id\":\"%s\",\"player_name\":\"%s\",\"server_ip\":\"%s\"}", playerId, playerName, serverIp ); sendEventToBackend(joinPayload); + + // сразу обновим онлайн-лист на бэкенде sendOnlinePlayersUpdate(); } @@ -167,8 +181,11 @@ public final class popa extends JavaPlugin implements Listener { ); sendEventToBackend(quitPayload); + // Полностью чистим все карты playerLoginTimes.remove(playerId); playerNames.remove(playerId); + lastActivityTimes.remove(playerId); + sendOnlinePlayersUpdate(); } @@ -182,15 +199,14 @@ public final class popa extends JavaPlugin implements Listener { String playerName = playerNames.get(playerId); Long lastActivity = lastActivityTimes.get(playerId); - // Если время последней активности не записано, пропускаем игрока + // Если нет последней активности — считаем, что игрок "не виден" бэкенду if (lastActivity == null) { continue; } - // Вычисляем, сколько секунд игрок неактивен long inactiveSeconds = (currentTime - lastActivity) / 1000; - // Если игрок неактивен больше минуты (60 секунд), пропускаем его + // Больше минуты не двигался — не отправляем в список активных if (inactiveSeconds > 60) { continue; }