package com.leontg77.uhc.cmds; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import org.bukkit.scoreboard.Team; import com.leontg77.uhc.Game; import com.leontg77.uhc.Main; import com.leontg77.uhc.Scoreboards; import com.leontg77.uhc.Spectator; import com.leontg77.uhc.Teams; import com.leontg77.uhc.utils.PlayerUtils; /** * Team command class. * * @author LeonTG77 */ public class TeamCommand implements CommandExecutor, TabCompleter { public static HashMap<Player, List<Player>> invites = new HashMap<Player, List<Player>>(); public static HashMap<String, List<String>> savedTeams = new HashMap<String, List<String>>(); @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Teams teams = Teams.getInstance(); Game game = Game.getInstance(); if (args.length == 0) { sendHelp(sender); return true; } if (args.length > 1) { Player target = Bukkit.getServer().getPlayer(args[1]); if (args[0].equalsIgnoreCase("info")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } Team team = target.getScoreboard().getEntryTeam(target.getName()); if (team == null || Spectator.getInstance().isSpectating(target)) { sender.sendMessage(Main.PREFIX + ChatColor.GREEN + target.getName() + "'s �7team info:"); sender.sendMessage("�8� �7Team: �cNone"); if (Main.kills.containsKey(target.getName())) { sender.sendMessage("�8� �7Kills: �a" + Main.kills.get(target.getName())); } return true; } if (!savedTeams.containsKey(team.getName())) { ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); } StringBuilder list = new StringBuilder(""); int i = 1; for (String entry : savedTeams.get(team.getName())) { if (list.length() > 0) { if (i == savedTeams.get(team.getName()).size()) { list.append(" �7and �f"); } else { list.append("�7, �f"); } } OfflinePlayer teammates = PlayerUtils.getOfflinePlayer(entry); if (teammates.isOnline()) { list.append(ChatColor.GREEN + teammates.getName()); } else { list.append(ChatColor.RED + teammates.getName()); } i++; } sender.sendMessage(Main.PREFIX + ChatColor.GREEN + target.getName() + "'s �7team info:"); sender.sendMessage("�8� �7Team: " + team.getPrefix() + team.getName()); if (Main.kills.containsKey(target.getName())) { sender.sendMessage("�8� �7Kills: �a" + Main.kills.get(target.getName())); } if (Main.teamKills.containsKey(team.getName())) { sender.sendMessage("�8� �7Team Kills: �a" + Main.teamKills.get(team.getName())); } sender.sendMessage("�8� ---------------------------"); sender.sendMessage("�8� �7Teammates: �o(Names in red means they are offline)"); sender.sendMessage("�8� �f" + list.toString().trim()); return true; } if (args[0].equalsIgnoreCase("invite")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Only players can create and manage teams."); return true; } Player player = (Player) sender; if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } Team team = player.getScoreboard().getEntryTeam(sender.getName()); if (team == null) { sender.sendMessage(Main.PREFIX + "You are not on a team."); return true; } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } if (team.getSize() >= Game.getInstance().getTeamSize()) { sender.sendMessage(Main.PREFIX + "Your team is currently full."); return true; } Team team1 = player.getScoreboard().getEntryTeam(target.getName()); if (team1 != null) { sender.sendMessage(Main.PREFIX + "That player is already on a team."); return true; } teams.sendMessage(team, Main.PREFIX + ChatColor.GREEN + target.getName() + " �7has been invited to your team."); if (!invites.containsKey(sender)) { invites.put(player, new ArrayList<Player>()); } invites.get(sender).add(target); target.sendMessage(Main.PREFIX + "You have been invited to �a" + sender.getName() + "'s �7team."); ComponentBuilder builder = new ComponentBuilder(""); builder.append(Main.PREFIX + "�6�l�nClick here to accept his request."); builder.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team accept " + sender.getName())); builder.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[] { new TextComponent("Click to join " + sender.getName() + "'s team.") })); target.spigot().sendMessage(builder.create()); return true; } if (args[0].equalsIgnoreCase("kick")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Only players can create and manage teams."); return true; } Player player = (Player) sender; if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } Team team = player.getScoreboard().getEntryTeam(sender.getName()); if (team == null) { sender.sendMessage(Main.PREFIX + "You are not on a team."); return true; } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } if (!team.getEntries().contains(target.getName())) { sender.sendMessage(Main.PREFIX + "That player is not on your team."); return true; } team.removeEntry(target.getName()); target.sendMessage(Main.PREFIX + "You got kicked out of your team."); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); teams.sendMessage(team, Main.PREFIX + ChatColor.GREEN + target.getName() + " �7was kicked from your team."); return true; } if (args[0].equalsIgnoreCase("accept")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Only players can create and manage teams."); return true; } Player player = (Player) sender; if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } if (player.getScoreboard().getEntryTeam(player.getName()) != null) { sender.sendMessage(Main.PREFIX + "You are already on a team."); return true; } if (invites.containsKey(target) && invites.get(target).contains(sender)) { Team team = target.getScoreboard().getEntryTeam(target.getName()); if (team == null) { sender.sendMessage(Main.PREFIX + "That player is not on a team."); return true; } if (team.getSize() >= Game.getInstance().getTeamSize()) { sender.sendMessage(Main.PREFIX + "That team is currently full."); return true; } sender.sendMessage(Main.PREFIX + "Request accepted."); team.addEntry(sender.getName()); teams.sendMessage(team, Main.PREFIX + ChatColor.GREEN + sender.getName() + " �7joined your team."); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); invites.get(target).remove(sender); } else { sender.sendMessage(Main.PREFIX + ChatColor.GREEN + target.getName() + " �7hasn't sent you any requests."); } return true; } if (args[0].equalsIgnoreCase("deny")) { if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } if (invites.containsKey(target) && invites.get(target).contains(sender)) { target.sendMessage(Main.PREFIX + ChatColor.GREEN + sender.getName() + " �7denied your request."); sender.sendMessage(Main.PREFIX + "Request denied."); invites.get(target).remove(sender); } else { sender.sendMessage(Main.PREFIX + ChatColor.GREEN + target.getName() + " �7hasn't sent you any requests."); } return true; } if (args[0].equalsIgnoreCase("remove")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } if (target == null) { OfflinePlayer offline = PlayerUtils.getOfflinePlayer(args[1]); Team team = teams.getTeam(offline); if (team == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } sender.sendMessage(Main.PREFIX + ChatColor.GREEN + offline.getName() + " �7was removed from his team."); teams.leaveTeam(offline); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); return true; } Team team = teams.getTeam(target); if (team == null) { sender.sendMessage(Main.PREFIX + "That player is not on a team."); return true; } sender.sendMessage(Main.PREFIX + ChatColor.GREEN + target.getName() + " �7was removed from his team."); teams.leaveTeam(target); ArrayList<String> players = new ArrayList<String>(team.getEntries()); savedTeams.put(team.getName(), players); return true; } if (args[0].equalsIgnoreCase("delete")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } Team team = teams.getTeam(args[1]); if (team == null) { sender.sendMessage(Main.PREFIX + "That team does not exist."); return true; } for (String p : team.getEntries()) { team.removeEntry(p); } ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); sender.sendMessage(Main.PREFIX + "Team " + team.getName() + " has been deleted."); return true; } if (args[0].equalsIgnoreCase("friendlyfire")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } boolean enable; if (args[1].equalsIgnoreCase("true")) { enable = true; } else if (args[1].equalsIgnoreCase("false")) { enable = false; } else { sender.sendMessage(Main.PREFIX + "FriendlyFire can only be true or false."); return true; } for (Team team : Scoreboards.getInstance().board.getTeams()) { team.setAllowFriendlyFire(enable); } PlayerUtils.broadcast(Main.PREFIX + "FriendlyFire is now " + (enable ? "enabled." : "disabled.")); return true; } } if (args.length > 2) { if (args[0].equalsIgnoreCase("add")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } Team team = teams.getTeam(args[1]); if (team == null) { sender.sendMessage(Main.PREFIX + "That team does not exist."); return true; } OfflinePlayer offline = PlayerUtils.getOfflinePlayer(args[2]); teams.joinTeam(team, offline); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); sender.sendMessage(Main.PREFIX + ChatColor.GREEN + offline.getName() + "�7 was added to team " + team.getName() + "."); return true; } } if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Only players can create and manage teams."); return true; } Player player = (Player) sender; if (args[0].equalsIgnoreCase("create")) { if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } if (teams.getTeam(player) != null) { sender.sendMessage(Main.PREFIX + "You are already on a team."); return true; } Team team = teams.findAvailableTeam(); if (team == null) { sender.sendMessage(Main.PREFIX + "There are no more available teams."); return true; } teams.joinTeam(team, player); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); sender.sendMessage(Main.PREFIX + "Team created! Use �a/team invite <player>�7 to invite a player."); return true; } if (args[0].equalsIgnoreCase("leave")) { if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is currently disabled."); return true; } Team team = teams.getTeam(player); if (team == null) { sender.sendMessage(Main.PREFIX + "You are not on a team."); return true; } sender.sendMessage(Main.PREFIX + "You left your team."); teams.leaveTeam(player); ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); teams.sendMessage(team, Main.PREFIX + sender.getName() + " left your team."); return true; } if (args[0].equalsIgnoreCase("info")) { Team team = teams.getTeam(player); if (team == null || Spectator.getInstance().isSpectating(player)) { sender.sendMessage(Main.PREFIX + "You are not on a team."); return true; } if (!savedTeams.containsKey(team.getName())) { ArrayList<String> players = new ArrayList<String>(team.getEntries()); TeamCommand.savedTeams.put(team.getName(), players); } StringBuilder list = new StringBuilder(""); int i = 1; for (String entry : savedTeams.get(team.getName())) { if (list.length() > 0) { if (i == savedTeams.get(team.getName()).size()) { list.append(" �7and �f"); } else { list.append("�7, �f"); } } OfflinePlayer teammates = PlayerUtils.getOfflinePlayer(entry); if (teammates.isOnline()) { list.append(ChatColor.GREEN + teammates.getName()); } else { list.append(ChatColor.RED + teammates.getName()); } i++; } sender.sendMessage(Main.PREFIX + "Your teammates: �o(Names in red means they are offline)"); sender.sendMessage("�8� �f" + list.toString().trim()); return true; } if (args[0].equalsIgnoreCase("clear")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } if (sender.hasPermission("uhc.team")) { for (Team team : Scoreboards.getInstance().board.getTeams()) { for (String p : team.getEntries()) { team.removeEntry(p); } } for (String key : savedTeams.keySet()) { savedTeams.get(key).clear(); } PlayerUtils.broadcast(Main.PREFIX + "All teams has been cleared."); } else { sendHelp(sender); } return true; } if (args[0].equalsIgnoreCase("color")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } PlayerUtils.broadcast(Main.PREFIX + "All teams has been re-colored."); teams.setup(); return true; } if (args[0].equalsIgnoreCase("list")) { if (teams.getTeamsWithPlayers().size() == 0) { sender.sendMessage(Main.PREFIX + "There are no teams."); return true; } sender.sendMessage(Main.PREFIX + "List of teams:"); for (Team team : teams.getTeamsWithPlayers()) { StringBuilder list = new StringBuilder(""); int i = 1; for (String entry : team.getEntries()) { if (list.length() > 0) { if (i == team.getEntries().size()) { list.append(" and "); } else { list.append(", "); } } list.append(entry); i++; } sender.sendMessage(team.getPrefix() + team.getName() + ": �f" + list.toString().trim() + "."); } return true; } Scoreboards board = Scoreboards.getInstance(); if (args[0].equalsIgnoreCase("enable")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } if (game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is already enabled."); return true; } PlayerUtils.broadcast(Main.PREFIX + "Team management has been enabled."); if (game.pregameBoard()) { board.setScore("�e ", 12); board.setScore("�8� �cTeam:", 11); board.setScore("�8� �7/team", 10); } game.setTeamManagement(true); return true; } if (args[0].equalsIgnoreCase("disable")) { if (!sender.hasPermission("uhc.team")) { sendHelp(sender); return true; } if (!game.teamManagement()) { sender.sendMessage(Main.PREFIX + "Team management is not enabled."); return true; } if (game.pregameBoard()) { board.resetScore("�e "); board.resetScore("�8� �cTeam:"); board.resetScore("�8� �7/team"); } PlayerUtils.broadcast(Main.PREFIX + "Team management has been disabled."); game.setTeamManagement(false); return true; } sendHelp(sender); return true; } @Override public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { ArrayList<String> toReturn = new ArrayList<String>(); if (args.length == 1) { ArrayList<String> types = new ArrayList<String>(); types.add("create"); types.add("invite"); types.add("kick"); types.add("accept"); types.add("deny"); types.add("info"); types.add("list"); if (sender.hasPermission("uhc.team")) { types.add("clear"); types.add("add"); types.add("remove"); types.add("delete"); types.add("friendlyfire"); } if (args[0].equals("")) { for (String type : types) { toReturn.add(type); } } else { for (String type : types) { if (type.toLowerCase().startsWith(args[0].toLowerCase())) { toReturn.add(type); } } } } if (args.length == 2) { if (args[0].equalsIgnoreCase("add")) { if (args[1].equals("")) { for (Team teams : Teams.getInstance().getTeams()) { toReturn.add(teams.getName()); } } else { for (Team teams : Teams.getInstance().getTeams()) { if (teams.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(teams.getName()); } } } } else if (args[0].equalsIgnoreCase("delete")) { if (args[1].equals("")) { for (Team teams : Teams.getInstance().getTeams()) { toReturn.add(teams.getName()); } } else { for (Team teams : Teams.getInstance().getTeams()) { if (teams.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(teams.getName()); } } } } else if (args[0].equalsIgnoreCase("friendlyfire")) { toReturn.add("true"); toReturn.add("false"); } else { if (args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { toReturn.add(online.getName()); } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(online.getName()); } } } } } if (args.length == 3) { if (args[0].equalsIgnoreCase("add")) { if (args[2].equals("")) { for (Player online : PlayerUtils.getPlayers()) { toReturn.add(online.getName()); } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[2].toLowerCase())) { toReturn.add(online.getName()); } } } } } return toReturn; } /** * Sends the help list to a player. * * @param sender the player. */ public void sendHelp(CommandSender sender) { sender.sendMessage(Main.PREFIX + "Team help:"); sender.sendMessage("�8� �f/pm <message> �7- �f�oTalk in team chat."); sender.sendMessage("�8� �f/tl �7- �f�oTell your coords to your teammates."); sender.sendMessage("�8� �f/team info �7- �f�oDisplay your team info."); sender.sendMessage("�8� �f/team list �7- �f�oList all teams."); if (Game.getInstance().teamManagement()) { sender.sendMessage("�8� �f/team create �7- �f�oCreate a team."); sender.sendMessage("�8� �f/team leave �7- �f�oLeave your team."); sender.sendMessage("�8� �f/team invite <player> �7- �f�oInvite a player to your team."); sender.sendMessage("�8� �f/team kick <player> �7- �f�oKick a player to your team."); sender.sendMessage("�8� �f/team accept <player> �7- �f�oAccept the players request."); sender.sendMessage("�8� �f/team deny <player> �7- �f�oDeny the players request."); } if (sender.hasPermission("uhc.team")) { sender.sendMessage(Main.PREFIX + "Team admin help:"); sender.sendMessage("�8� �f/team info <player> �7- �f�oDisplay the targets team info."); sender.sendMessage("�8� �f/team enable �7- �f�oEnable team management."); sender.sendMessage("�8� �f/team disable �7- �f�oDisable team management."); sender.sendMessage("�8� �f/team add <team> <player> �7- �f�oAdd a player to a team."); sender.sendMessage("�8� �f/team remove <player> �7- �f�oRemove a player from his team."); sender.sendMessage("�8� �f/team delete <team> �7- �f�oEmpty a specific team."); sender.sendMessage("�8� �f/team friendlyfire <true|false> �7- �f�oToggle FriendlyFire."); sender.sendMessage("�8� �f/team clear �7- �f�oClear all teams."); } } }