From be86fe5960d7d3910a9eefc90a2be98c3c56bf4c Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Mon, 15 Jun 2026 12:31:52 +0200 Subject: [PATCH] fix: gates double results teleport guard missing message --- src/main/java/dev/loki/gate/ExitGate.java | 1 - .../java/dev/loki/phase/EndgamePhase.java | 22 ++++++++++++++----- src/main/resources/messages.yml | 1 - 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/dev/loki/gate/ExitGate.java b/src/main/java/dev/loki/gate/ExitGate.java index 9df9e1e..7f6b238 100644 --- a/src/main/java/dev/loki/gate/ExitGate.java +++ b/src/main/java/dev/loki/gate/ExitGate.java @@ -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; diff --git a/src/main/java/dev/loki/phase/EndgamePhase.java b/src/main/java/dev/loki/phase/EndgamePhase.java index d131f39..521b58c 100644 --- a/src/main/java/dev/loki/phase/EndgamePhase.java +++ b/src/main/java/dev/loki/phase/EndgamePhase.java @@ -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 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 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; diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 289728c..f244ec6 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -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] ⚡ Выживший допустил ошибку! Компас укажет на генератор!"