From e5656f23ce80663fd8faa48196001f22d405956e Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 23 Feb 2025 00:33:30 +0100 Subject: [PATCH] Fix class change restriction and track player death state Ensure players can change classes when they are dead or near spawn if alive. Added logic to track and update player death state, improving clarity and game mechanics around death handling. --- .../com/alttd/ctf/commands/subcommands/SelectClass.java | 4 +++- src/main/java/com/alttd/ctf/events/OnPlayerDeath.java | 2 ++ src/main/java/com/alttd/ctf/team/TeamPlayer.java | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/alttd/ctf/commands/subcommands/SelectClass.java b/src/main/java/com/alttd/ctf/commands/subcommands/SelectClass.java index aa59999..80bdf98 100644 --- a/src/main/java/com/alttd/ctf/commands/subcommands/SelectClass.java +++ b/src/main/java/com/alttd/ctf/commands/subcommands/SelectClass.java @@ -46,7 +46,9 @@ public class SelectClass extends SubCommand { return 0; } TeamPlayer teamPlayer = optionalTeamPlayer.get(); - if (!gamePhase.equals(GamePhase.CLASS_SELECTION) && teamPlayer.getTeam().getSpawnLocation().distance(player.getLocation()) > 5) { + if (!teamPlayer.isDead() + && !gamePhase.equals(GamePhase.CLASS_SELECTION) + && teamPlayer.getTeam().getSpawnLocation().distance(player.getLocation()) > 5) { commandSender.sendRichMessage("You have to be near your spawn to change classes."); return 0; } diff --git a/src/main/java/com/alttd/ctf/events/OnPlayerDeath.java b/src/main/java/com/alttd/ctf/events/OnPlayerDeath.java index 8bc8693..b92c9ab 100644 --- a/src/main/java/com/alttd/ctf/events/OnPlayerDeath.java +++ b/src/main/java/com/alttd/ctf/events/OnPlayerDeath.java @@ -44,6 +44,8 @@ public class OnPlayerDeath implements Listener { Player player = event.getPlayer(); player.getInventory().clear(); player.updateInventory(); + gameManager.getTeamPlayer(player) + .ifPresent(TeamPlayer::setDead); flag.handleCarrierDeathOrDisconnect(player); } diff --git a/src/main/java/com/alttd/ctf/team/TeamPlayer.java b/src/main/java/com/alttd/ctf/team/TeamPlayer.java index af47a6e..a019f4b 100644 --- a/src/main/java/com/alttd/ctf/team/TeamPlayer.java +++ b/src/main/java/com/alttd/ctf/team/TeamPlayer.java @@ -25,6 +25,7 @@ public class TeamPlayer { private final Team team; @Setter private GameClass gameClass; + private boolean isDead = false; protected TeamPlayer(UUID uuid, Team team) { this.uuid = uuid; @@ -48,6 +49,11 @@ public class TeamPlayer { } player.teleportAsync(spawnLocation).thenAcceptAsync(unused -> resetWorldBorder(player, worldBorderApi, gamePhase, worldBorderCenter)); + isDead = false; + } + + public void setDead() { + isDead = true; } public void resetWorldBorder(@NotNull Player player, WorldBorderApi worldBorderApi, GamePhase gamePhase, Location worldBorderCenter) {