fix(arena): move winners outside after victory
This commit is contained in:
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user