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.
This commit is contained in:
2025-02-23 00:33:30 +01:00
parent 409a1aa596
commit e5656f23ce
3 changed files with 11 additions and 1 deletions
@@ -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("<red>You have to be near your spawn to change classes.</red>");
return 0;
}
@@ -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);
}
@@ -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) {