package com.walrusone.skywars.commands; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; import com.walrusone.skywars.SkyWarsReloaded; import com.walrusone.skywars.game.Game; import com.walrusone.skywars.game.GamePlayer; import com.walrusone.skywars.game.Game.GameState; import com.walrusone.skywars.utilities.Messaging; public class JoinGameCmd extends BaseCmd { public JoinGameCmd() { forcePlayer = true; cmdName = "join"; argLength = 1; //counting cmdName usage = ""; desc = ":: Allows a player to join a game"; } @Override public boolean run() { Location spawn = SkyWarsReloaded.getCfg().getSpawn(); if (spawn == null) { sender.sendMessage(ChatColor.RED + "YOU MUST SET SPAWN BEFORE YOU CAN JOIN A GAME"); return true; } String lobbyWorld = spawn.getWorld().getName(); if (lobbyWorld != null) { String world = ((Player) sender).getWorld().getName(); if (!world.equalsIgnoreCase(lobbyWorld)) { sender.sendMessage(ChatColor.RED + "YOU CAN ONLY JOIN GAMES IN THE LOBBY WORLD"); return true; } GamePlayer gPlayer = SkyWarsReloaded.getPC().getPlayer(player.getUniqueId()); if (!SkyWarsReloaded.getCfg().signJoinMode()) { if (!gPlayer.inGame()) { Game game = SkyWarsReloaded.getGC().findGame(); if (game != null) { game.addPlayer(gPlayer); } else { SkyWarsReloaded.getGC().addToQueue(gPlayer); gPlayer.getP().sendMessage(new Messaging.MessageFormatter().format("game.no-game-available")); } } else { sender.sendMessage(new Messaging.MessageFormatter().format("error.no-perm-in-game")); } } else { Game game = findGame(); int i = 0; while (i < 3) { if (game != null && game.getState() == GameState.PREGAME && !game.isFull()) { game.addPlayer(gPlayer); break; } else { i++; game = findGame(); } } } return true; } else { sender.sendMessage(ChatColor.RED + "YOU MUST SET SPAWN IN THE LOBBY WORLD WITH /SWR SETSPAWN BEFORE STARTING A GAME"); SkyWarsReloaded.get().getLogger().info("YOU MUST SET SPAWN IN THE LOBBY WORLD WITH /SWR SETSPAWN BEFORE STARTING A GAME"); return true; } } private Game findGame() { Game game = null; int highest = 0; for (Game g: SkyWarsReloaded.getGC().getGames()) { if (highest <= g.getPlayers().size() && g.getState() == GameState.PREGAME && !g.isFull()) { highest = g.getPlayers().size(); game = g; } } return game; } }