BungeeMain / src / main / java / com / lifeknight / relaymcbungeemain / commands / staff / GroupCommand.java
GroupCommand.java
Raw
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();
    }
}