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

@ -204,7 +204,6 @@ public class ExitGate {
public void restoreProgress() { progress = savedProgress; }
public void reset() {
removeGateBlock();
this.state = GateState.CLOSED;
this.progress = 0.0;
this.savedProgress = 0.0;

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;

View file

@ -176,7 +176,6 @@ generator:
actionbar: "&c⚡ Разрушение: %d%%"
success: "%prefix%&cГенератор поврежден! -%d%% прогресса"
broadcast: "%prefix%&4⚡ Маньяк разрушил генератор! -%d%%"
complete: "&aГенератор починен!\n%e"
all-done: "%prefix%&aВсе генераторы починены! Открывайте ворота!"
notification: "&4[DBD] ⚡ Выживший допустил ошибку! Компас укажет на генератор!"