fix: gates double results teleport guard missing message

This commit is contained in:
loki5512344 2026-06-15 12:31:52 +02:00
parent 17388f97e7
commit be86fe5960
3 changed files with 17 additions and 7 deletions

View file

@ -70,7 +70,7 @@ public class EndgamePhase implements Phase {
this.complete = true;
// Показываем результаты и телепортируем всех в лобби
announceEndgameEnd(session);
teleportAllToLobby(session);
teleportAllToLobbyDelayed(session);
return;
}
@ -84,7 +84,7 @@ public class EndgamePhase implements Phase {
if (gateManager != null && gateManager.getOpenGateCount() > 0) {
this.complete = true;
announceEndgameEnd(session);
teleportAllToLobby(session);
teleportAllToLobbyDelayed(session);
return;
}
@ -150,11 +150,23 @@ public class EndgamePhase implements Phase {
}
/**
* Телепортирует всех игроков в лобби, сбрасывает атрибуты и останавливает сессию.
* Телепортирует всех игроков в лобби и сбрасывает атрибуты (синхронно).
*/
private void teleportAllToLobby(GameSession session) {
List<BasePlayer> playersToTeleport = new ArrayList<>(session.getPlayers().values());
for (BasePlayer bp : session.getPlayers().values()) {
Player p = bp.getPlayer();
if (p != null && p.isOnline()) {
resetPlayerAttributes(p);
session.getPlugin().getLobbyManager().teleportToLobby(p);
}
}
}
/**
* Отложенный телепорт в лобби (для красивого перехода из enter).
*/
private void teleportAllToLobbyDelayed(GameSession session) {
List<BasePlayer> playersToTeleport = new ArrayList<>(session.getPlayers().values());
new BukkitRunnable() {
@Override
public void run() {
@ -165,7 +177,6 @@ public class EndgamePhase implements Phase {
session.getPlugin().getLobbyManager().teleportToLobby(p);
}
}
session.stop();
}
}.runTaskLater(session.getPlugin(), 60L);
}
@ -273,6 +284,7 @@ public class EndgamePhase implements Phase {
}
private void checkWinConditions(GameSession session) {
if (complete) return;
int survivorsAlive = 0;
for (BasePlayer player : session.getPlayers().values()) {
if (player.isKiller()) continue;