Untitled

 avatar
unknown
java
a year ago
2.9 kB
7
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