fix: stop game immediately when timer expires (show results, teleport to lobby)

This commit is contained in:
loki5512344 2026-06-14 16:54:46 +02:00
parent 8b1bcf0433
commit b0afb3f6be

View file

@ -26,6 +26,7 @@ import dev.loki.ui.ActionBar;
import dev.loki.ui.TitleUI; import dev.loki.ui.TitleUI;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -120,9 +121,18 @@ public class GameplayPhase implements Phase {
if (tickCounter % 20 == 0) { if (tickCounter % 20 == 0) {
checkGeneratorProgress(session); checkGeneratorProgress(session);
winConditions.checkWinConditions(session); winConditions.checkWinConditions(session);
if (winConditions.isShouldEnd() || timeExpired) shouldEnd = true; if (winConditions.isShouldEnd() || timeExpired) {
shouldEnd = true;
}
ui.updateSidebar(session, generatorManager); ui.updateSidebar(session, generatorManager);
} }
if (timeExpired) {
showGameResults(session);
teleportAllToLobby(session);
session.stop();
return;
}
} }
@Override @Override
@ -351,6 +361,21 @@ public class GameplayPhase implements Phase {
} }
} }
private void teleportAllToLobby(GameSession session) {
for (BasePlayer bp : session.getPlayers().values()) {
Player p = bp.getPlayer();
if (p != null && p.isOnline()) {
p.setGameMode(org.bukkit.GameMode.ADVENTURE);
p.getInventory().clear();
p.setWalkSpeed(0.2f);
p.setFlySpeed(0.1f);
p.setHealth(20.0);
p.setFoodLevel(20);
session.getPlugin().getLobbyManager().teleportToLobby(p);
}
}
}
private void clearListeners() { private void clearListeners() {
if (interaction != null) interaction.clear(); if (interaction != null) interaction.clear();
} }