fix(arena): move winners outside after victory

This commit is contained in:
dmg
2026-09-04 22:01:52 -04:00
parent f0dbde17b8
commit 17a5c66575
5 changed files with 85 additions and 2 deletions
@@ -400,7 +400,7 @@ public final class RoleArenaController implements Listener, Runnable {
&& !zombie.isDead() ? zombie : null;
}
private void assignRole(UUID playerId, ArenaRole role) {
void assignRole(UUID playerId, ArenaRole role) {
LifecycleState assigned;
try {
assigned = role == ArenaRole.TYRANT
@@ -414,13 +414,35 @@ public final class RoleArenaController implements Listener, Runnable {
stateManager.saveIfDirty();
challengerId = null;
barrier.clear();
String name = Optional.ofNullable(server.getPlayer(playerId))
Player winner = server.getPlayer(playerId);
moveWinnerOutside(winner);
String name = Optional.ofNullable(winner)
.map(Player::getName).orElse(playerId.toString());
String message = ChatColor.YELLOW + name + " defeated the arena boss and is the "
+ readable(role) + "!";
server.getOnlinePlayers().forEach(player -> player.sendMessage(message));
}
private void moveWinnerOutside(Player winner) {
Optional<ArenaLocation> configured = locations.location();
if (winner == null || configured.isEmpty()) {
return;
}
ArenaLocation arena = configured.orElseThrow();
Location winnerLocation = winner.getLocation();
if (!contains(arena, winnerLocation)) {
return;
}
relocating.add(winner.getUniqueId());
try {
winner.teleport(
outside(arena, winnerLocation), PlayerTeleportEvent.TeleportCause.PLUGIN
);
} finally {
relocating.remove(winner.getUniqueId());
}
}
private void announceVacancy(ArenaLocation arena, ArenaRole role) {
String message = vacancyMessage(arena, role);
for (Player player : server.getOnlinePlayers()) {