package nl.sugcube.crystalquest.command; import nl.sugcube.crystalquest.Broadcast; import nl.sugcube.crystalquest.CrystalQuest; import nl.sugcube.crystalquest.game.Arena; import nl.sugcube.crystalquest.game.CrystalQuestTeam; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * @author SugarCaney */ public class CommandTp extends CrystalQuestCommand { public CommandTp() { super("tp", "commands.tp-usage", 1); addPermissions( "crystalquest.admin", "crystalquest.staff", "crystalquest.tp" ); addAutoCompleteMeta(0, AutoCompleteArgument.ARENA); } @Override protected void executeImpl(CrystalQuest plugin, CommandSender sender, String... arguments) { Player player = (Player)sender; Arena arena; try { arena = plugin.am.getArena(Integer.parseInt(arguments[0]) - 1); } catch (Exception e) { arena = plugin.am.getArena(arguments[0]); } // Check if the arenas exists. if (arena == null) { player.sendMessage(Broadcast.get("arena.no-exist")); return; } // Check if the player is not ingame. if (plugin.getArenaManager().isInGame(player)) { player.sendMessage(Broadcast.get("commands.tp-ingame")); return; } // Find spawn location. List<Location> spawns = arena.getPlayerSpawns(); Location result = null; if (spawns.isEmpty()) { // Try team spawns List<Location> teamSpawns = arena.getTeamSpawns().values().stream() .flatMap(Collection::stream) .collect(Collectors.toList()); if (teamSpawns.isEmpty()) { // Finally try lobby spawns List<Location> lobbySpawns = CrystalQuestTeam.getTeams().stream() .map(arena::getLobbySpawn) .collect(Collectors.toList()); if (lobbySpawns.isEmpty()) { player.sendMessage(Broadcast.get("commands.tp-nospawns")); return; } else { result = lobbySpawns.get(0); } } else { result = teamSpawns.get(0); } } else { result = spawns.get(0); } // Teleport player.teleport(result); player.sendMessage(Broadcast.TAG + Broadcast.get("commands.tp-teleport") .replace("%a%", arguments[0])); } @Override protected boolean assertSender(CommandSender sender) { return sender instanceof Player; } }