fix player online

This commit is contained in:
2025-12-06 15:58:27 +05:00
parent 8e1f503e8e
commit ee5c0f608c
2 changed files with 22 additions and 6 deletions

View File

@ -66,7 +66,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.21.4-R0.1-SNAPSHOT</version>
<version>1.21.10-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>

View File

@ -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;
}