Untitled
unknown
java
2 years ago
2.9 kB
10
Indexable
public final class PlayerSpawnLocationListener implements Listener {
@EventHandler
public void onPlayerSpawnLocation(PlayerSpawnLocationEvent event) {
Player player = event.getPlayer();
String username = player.getName();
CachedUser cachedUser = UserManager.getCachedUser(username).orElse(null);
debug("Attempting to set spawn location for: " + username + ", cachedUser: " + cachedUser);
if (cachedUser != null) {
Arena.byGameId(cachedUser.getGameId()).ifPresentOrElse(arena -> {
debug("Setting player: " + username + "'s spawn to: " +
arena + ", " + arena.isFull() + ", " + arena.getState());
if (cachedUser.isTargeted()) {
BukkitUtils.getPlayer(cachedUser.getTarget())
.ifPresentOrElse(onlineTarget -> event.setSpawnLocation(onlineTarget.getLocation()),
() -> event.setSpawnLocation(arena.getInfo().getSpectatorLocation()));
} else if (!arena.isFull() && arena.getState() == GameState.WAITING) {
event.setSpawnLocation(arena.getInfo()
.getWaitingInfo()
.getSpawn()
.randomizeHorizontal(1.0));
} else {
moveToLobby(player);
}
}, () -> moveToLobby(player));
} else {
Result<Team> teamByPlayer = Team.byRejoinPlayer(player);
if (teamByPlayer.isPresent()) {
debug("Setting player: " + username + "'s spawn to: " +
teamByPlayer.get().getArena() + ", " + teamByPlayer.get().getInfo().getColor());
event.setSpawnLocation(teamByPlayer.get().getArena().getInfo().getSpectatorLocation());
} else {
Team.byRejoinSpectator(username).ifPresentOrElse(
teamBySpec -> {
debug("Setting player: " + username + "'s spawn to " + teamBySpec.getArena() + ", " + teamBySpec.getInfo().getColor());
event.setSpawnLocation(teamBySpec.getArena().getInfo().getSpectatorLocation());
}, () -> moveToLobby(player));
}
}
debug("Final spawn location of player " + username + " is: " + event.getSpawnLocation());
}
private void moveToLobby(Player player) {
debug("PlayerSpawnLocationListener moveToLobby(): " + player.getName());
if (!player.hasPermission(Permissions.FORCE_JOIN)) {
player.sendMessage(ChatColor.RED + "Unexpected error in join, please try again");
Scheduler.runTaskLater(() -> BedWarsProtocol.getConnection().write(new PacketSB17_LobbyRequest(player.getName())), 10);
}
}
}Editor is loading...
Leave a Comment