package com.lifeknight.relaymcbungeemain.commands.staff; import com.lifeknight.relaymcbungeemain.commands.CommandUtilities; import com.lifeknight.relaymcbungeemain.player.SmartPlayer; import com.lifeknight.relayutils.basic.Miscellaneous; import com.lifeknight.relayutils.basic.Text; import com.lifeknight.relayutils.player.Group; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; import java.util.Arrays; import java.util.List; import static net.md_5.bungee.api.ChatColor.*; public class GroupCommand extends Command { public GroupCommand() { super("group", null); } private static final List<String> COMMANDS = Arrays.asList( "add", "remove", "list"); @Override public void execute(CommandSender sender, String[] arguments) { if (!CommandUtilities.isAdministrator(sender)) { CommandUtilities.sendInsufficientPermissionsMessage(sender); return; } if (arguments.length == 0) { CommandUtilities.sendErrorMessage(sender, "Commands: %s%s", GREEN, Text.separateWithCommas(COMMANDS)); return; } switch (COMMANDS.indexOf(arguments[0].toLowerCase())) { case 0: this.handleAddCommand(sender, arguments); break; case 1: this.handleRemoveCommand(sender, arguments); break; case 2: this.handleListCommand(sender, arguments); break; default: CommandUtilities.sendErrorMessage(sender, "Unrecognized command: %s", YELLOW + arguments[0]); break; } } private void handleAddCommand(CommandSender console, String[] arguments) { if (arguments.length < 3) { CommandUtilities.sendUsageMessage(console, "/group add [player] [group]"); return; } String name = arguments[1]; SmartPlayer toBeAdd = SmartPlayer.getOrCreate(name); if (toBeAdd == null) { CommandUtilities.noPlayerFound(console, name); return; } String originalStatus = toBeAdd.getFormattedName(); Group group = Group.getGroup(Text.toComparable(Text.concatenateArguments(Miscellaneous.from(arguments, 2)))); if (group == null || group == Group.DEFAULT) { CommandUtilities.sendErrorMessage(console, "Unrecognized group: %s%s", YELLOW, arguments[2]); } else { if (CommandUtilities.isInGroupOrHigher(console, group)) { if (toBeAdd.addToGroup(group)) { CommandUtilities.sendErrorMessage(console, "%s%s is now %s%s.", originalStatus, GREEN, toBeAdd.getFormattedName(), GREEN); } else { CommandUtilities.sendErrorMessage(console, "%s%s is already a %s%s!", toBeAdd.getFormattedName(), RED, group.getPrefix(), RED); } } else { CommandUtilities.sendErrorMessage(console, "You must be in a higher group!"); } } } private void handleRemoveCommand(CommandSender console, String[] arguments) { if (arguments.length < 3) { CommandUtilities.sendUsageMessage(console, "/group remove [player] [group]"); return; } String name = arguments[1]; SmartPlayer toBeRemove = SmartPlayer.getOrCreate(name); if (toBeRemove == null) { CommandUtilities.noPlayerFound(console, name); return; } String originalStatus = toBeRemove.getFormattedName(); Group group = Group.getGroup(Text.toComparable(Text.concatenateArguments(Miscellaneous.from(arguments, 2)))); if (group == null || group == Group.DEFAULT) { CommandUtilities.sendErrorMessage(console, "Unrecognized group: %s%s", YELLOW, arguments[2]); } else { if (CommandUtilities.isInGroupOrHigher(console, group)) { if (toBeRemove.removeFromGroup(group)) { CommandUtilities.sendErrorMessage(console, "%s%s is now %s%s.", originalStatus, GREEN, toBeRemove.getFormattedName(), GREEN); } else { CommandUtilities.sendErrorMessage(console, "%s%s is not a %s%s!", toBeRemove.getFormattedName(), RED, group.getPrefix(), RED); } } else { CommandUtilities.sendErrorMessage(console, "You must be in a higher group!"); } } } private void handleListCommand(CommandSender console, String[] arguments) { if (arguments.length < 2) { CommandUtilities.sendUsageMessage(console, "/group list [player]"); return; } String name = arguments[1]; SmartPlayer toList = SmartPlayer.getSmartPlayerOrNick(name); if (toList == null) { CommandUtilities.noPlayerFound(console, name); return; } CommandUtilities.sendMessage(console, getGroups(toList)); } private static String getGroups(SmartPlayer smartPlayer) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(GREEN).append("------ ").append(smartPlayer.getName()).append(" ------"); for (Group group : smartPlayer.getGroups()) { stringBuilder.append("\n").append(group.getColor()).append(group.getGroupName()); } stringBuilder.append("\n").append(GREEN).append("------ ").append(smartPlayer.getName()).append(" ------"); return stringBuilder.toString(); } }