HungerGames icon indicating copy to clipboard operation
HungerGames copied to clipboard

autojoin

Open FoGTeR opened this issue 11 months ago • 0 comments

package tk.shanebee.hg.commands;

import org.bukkit.entity.Player;
import tk.shanebee.hg.HG;
import tk.shanebee.hg.game.Game;
import tk.shanebee.hg.util.Util;
import tk.shanebee.hg.Status;

import java.util.List;
import java.util.Arrays;
import org.bukkit.Bukkit;

public class AutoJoinCmd extends BaseCmd {

    public AutoJoinCmd() {
        forcePlayer = true;
        cmdName = "autojoin";
        forceInGame = false;
        argLength = 1;
        usage = "";
    }

    @Override
    public boolean run() {
        if (playerManager.hasPlayerData(player) || playerManager.hasSpectatorData(player)) {
            Util.scm(player, HG.getPlugin().getLang().cmd_join_in_game);
        } else {
            Game targetGame = null;

            for (Game game : plugin.getGames()) {
                
                if (game == null) {
                    continue;
                }
                
                if (game.getGamePlayerData().getPlayers().size() < game.getGameArenaData().getMaxPlayers() && 
                    game.getGameArenaData().getStatus() != Status.RUNNING) {
                    targetGame = game;
                    break;
                }
            }

            if (targetGame != null) {
                if (!HG.getParty().hasParty(player)) {
                    targetGame.getGamePlayerData().join(player, true);
                    return true;
                } else if (HG.getParty().isOwner(player) && 
                           (targetGame.getGamePlayerData().getPlayers().size() + HG.getParty().partySize(player)) <= targetGame.getGameArenaData().getMaxPlayers()) {
                    List<Player> party = HG.getParty().getMembers(player);
                    final Game finalTargetGame = targetGame;

                    for (int i = 0; i < party.size(); i++) {
                        Player p = party.get(i);
                        if (i != 0) {
                            Bukkit.getScheduler().runTaskLater(HG.getPlugin(), () -> finalTargetGame.getGamePlayerData().join(p, true), 20);
                            continue;
                        }
                        finalTargetGame.getGamePlayerData().join(p, true);
                    }
                } else if (!HG.getParty().isOwner(player)) {
                    player.sendMessage("You are in a party but not the leader, unable to join game");
                } else {
                    player.sendMessage("Party is too large to join this arena");
                }
            } else {
                Util.scm(player, "No available arenas to join.");
            }
        }
        return true;
    }
}

FoGTeR avatar Jan 11 '25 17:01 FoGTeR