BungeeMain / src / main / java / com / lifeknight / relaymcbungeemain / commands / staff / RelayMCCommand.java
RelayMCCommand.java
Raw
package com.lifeknight.relaymcbungeemain.commands.staff;

import com.lifeknight.relaymcbungeemain.Main;
import com.lifeknight.relaymcbungeemain.commands.CommandUtilities;
import com.lifeknight.relaymcbungeemain.player.SmartPlayer;
import com.lifeknight.relaymcbungeemain.queue.GameServer;
import com.lifeknight.relaymcbungeemain.queue.Queue;
import com.lifeknight.relaymcbungeemain.utilities.Server;
import com.lifeknight.relaymcbungeemain.utilities.Utilities;
import com.lifeknight.relayutils.RelayUtils;
import com.lifeknight.relayutils.basic.Miscellaneous;
import com.lifeknight.relayutils.basic.Text;
import com.lifeknight.relayutils.game.MainGame;
import com.lifeknight.relayutils.utilities.ComponentBuilder;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;
import net.md_5.bungee.chat.ComponentSerializer;

import java.util.ArrayList;
import java.util.List;

import static net.md_5.bungee.api.ChatColor.*;

public class RelayMCCommand extends Command implements TabExecutor {
    public RelayMCCommand() {
        super("relaymc", null, "rmc");
    }

    public static final List<String> COMMANDS = Miscellaneous.getList(
            "reload",
            "servers",
            "saveconfig",
            "open",
            "stats",
            "resetreconnectserver",
            "test",
            "restartgameservers",
            "restarthubs",
            "togglequeue",
            "log",
            "addserver",
            "removeserver",
            "addlobbymessage",
            "queue",
            "startservers",
            "skipqueue",
            "messagelog"
    );

    @Override
    public void execute(CommandSender commandSender, String[] arguments) {
        if (!CommandUtilities.isAdministrator(commandSender)) {
            CommandUtilities.sendInsufficientPermissionsMessage(commandSender);
            return;
        }

        SmartPlayer smartPlayer = SmartPlayer.getSmartPlayer(commandSender);
        boolean isPlayer = smartPlayer != null;

        if (arguments.length > 0) {
            switch (COMMANDS.indexOf(arguments[0].toLowerCase())) {
                case 0:
                    Main.reload();
                    CommandUtilities.sendSuccessMessage(commandSender, "Reloaded config.");
                    break;
                case 1:
                    commandSender.sendMessage(GameServer.getGameServersMessage());
                    break;
                case 2:
                    Main.save();
                    CommandUtilities.sendSuccessMessage(commandSender, "Saved config.");
                    break;
                case 3:
                    Main.open();
                    CommandUtilities.sendSuccessMessage(commandSender, "Opened proxy.");
                    break;
                case 4:
                    Main.sendStatsMessage(commandSender);
                    break;
                case 5:
                    if (arguments.length > 1) {
                        SmartPlayer player = SmartPlayer.getSmartPlayerOrNick(arguments[1]);
                        if (player == null) {
                            CommandUtilities.sendErrorMessage(commandSender, "No player found: %s", arguments[1]);
                        } else {
                            player.setReconnectServer(Server.getServerOfType(null, false));
                            CommandUtilities.sendSuccessMessage(commandSender, "Changed %s reconnect server to main hub.", player.getPossessiveFormattedName());
                        }
                    } else {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc resetreconnectserver [player]");
                    }
                    break;
                case 6:
                    if (isPlayer) {
                        smartPlayer.test();
                        smartPlayer.sendSuccessMessage("Running test.");
                    }
                    break;
                case 7:
                    Main.restartGameServers();
                    CommandUtilities.sendSuccessMessage(commandSender, "Sent restart command to empty game servers.");
                    break;
                case 8:
                    Main.restartHubs();
                    CommandUtilities.sendSuccessMessage(commandSender, "Sent restart command to empty hub servers.");
                    break;
                case 9:
                    String reason = null;
                    if (arguments.length > 1) {
                        reason = Text.concatenateArguments(Miscellaneous.from(arguments, 1));
                    }
                    Main.queueOpen = !Main.queueOpen;
                    Main.queueCloseMessage = reason;
                    ComponentBuilder componentBuilder = new ComponentBuilder();
                    if (Main.queueOpen) {
                        componentBuilder.color(ComponentBuilder.GREEN).line().newLine();
                        componentBuilder.color(ComponentBuilder.GREEN_AQUA).append("Game queues are now open!").newLine();
                        componentBuilder.color(ComponentBuilder.GREEN).line();
                    } else {
                        componentBuilder.color(ComponentBuilder.YELLOW).line().newLine();
                        componentBuilder.color(RED).append("Game queues have been closed. Message from Relay:").newLine();
                        componentBuilder.color(WHITE).append(reason == null ? "None" : reason).newLine();
                        componentBuilder.color(ComponentBuilder.YELLOW).line();
                    }
                    Utilities.broadcast(componentBuilder);
                    break;
                case 10:
                    RelayUtils.log = !RelayUtils.log;
                    CommandUtilities.sendSuccessMessage(commandSender, "Console logging is now set to " + RelayUtils.log + ".");
                    break;
                case 11:
                    if (arguments.length < 3) {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc addserver [name] [ip:port]");
                    } else {
                        String name = arguments[1];
                        String ip = arguments[2];
                        if (Main.instance.getProxy().getServerInfo(name) != null) {
                            CommandUtilities.sendErrorMessage(commandSender, "A server with the name %s already exists!", name);
                            return;
                        }
                        Utilities.createNewServerInfo(name, ip);
                        CommandUtilities.sendSuccessMessage(commandSender, "Created %s with ip %s. Make sure to register its name in RelayMCBungeeMain/relaymc.yml and run /rmc reload so the server has its proper use", name, ip);
                    }
                    break;
                case 12:
                    if (arguments.length < 2) {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc removeserver [name]");
                    } else {
                        String name = arguments[1];
                        ServerInfo serverInfo = Main.instance.getProxy().getServerInfo(name);
                        if (serverInfo == null) {
                            CommandUtilities.sendErrorMessage(commandSender, "No server found with the name of %s.", name);
                        } else {
                            Server.removeServer(serverInfo);
                            Main.instance.getProxy().getServers().remove(name);
                            Main.removeFromConfig(serverInfo);
                            CommandUtilities.sendSuccessMessage(commandSender, "Removed server %s.", name);
                        }
                    }
                    break;
                case 13:
                    if (arguments.length < 2) {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc addlobbymessage [json]");
                    } else {
                        String json = Text.concatenateArguments(Miscellaneous.from(arguments, 1));
                        try {
                            CommandUtilities.sendInfoMessage(commandSender, json);

                            BaseComponent[] components = ComponentSerializer.parse(json);

                            Main.addInfoMessage(components);

                            CommandUtilities.sendSuccessMessage(commandSender, "Added info message.");
                            commandSender.sendMessage(components);
                        } catch (Exception exception) {
                            CommandUtilities.sendErrorMessage(commandSender, "An error occurred: %s%s", YELLOW, exception.getMessage());
                        }
                    }
                    break;
                case 14:
                    if (arguments.length < 2) {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc queue party/manhunt/duels");
                    } else {
                        MainGame mainGame = MainGame.getMainGame(arguments[1]);
                        if (mainGame == null) {
                            CommandUtilities.sendUsageMessage(commandSender, "/rmc queue party/manhunt/duels");
                        } else {
                            Queue.QUEUES.get(mainGame).printQueue(commandSender);
                        }
                    }
                    break;
                case 15:
                    Main.startServers();
                    CommandUtilities.sendSuccessMessage(commandSender, "Used pteroadactyl to turn recorded servers on.");
                    break;
                case 16:
                    if (arguments.length > 1) {
                        smartPlayer = SmartPlayer.getSmartPlayer(arguments[1]);
                        if (smartPlayer != null) {
                            if (smartPlayer.isInLimboQueue()) {
                                smartPlayer.skipLimboQueue();
                                CommandUtilities.sendSuccessMessage(commandSender, "Passed %s through limbo queue.", smartPlayer.getName());
                            } else {
                                CommandUtilities.sendErrorMessage(commandSender, "%s is not in limbo queue!", smartPlayer.getName());
                            }
                        } else {
                            CommandUtilities.noPlayerFound(commandSender, arguments[1]);
                        }
                    } else {
                        CommandUtilities.sendUsageMessage(commandSender, "/rmc skipqueue [player]");
                    }
                    break;
                case 17:
                    RelayUtils.messageLog = !RelayUtils.messageLog;
                    CommandUtilities.sendSuccessMessage(commandSender, "Message logging is now %s.", RelayUtils.messageLog);
                    break;
                default:
                    CommandUtilities.sendCommandsMessage(commandSender, COMMANDS);
                    break;
            }
        } else {
            CommandUtilities.sendInfoMessage(commandSender, "Commands: %s%s", YELLOW, Text.separateWithCommas(COMMANDS));
        }
    }

    @Override
    public Iterable<String> onTabComplete(CommandSender commandSender, String[] arguments) {
        if (CommandUtilities.isAdministrator(commandSender)) {
            if (arguments.length == 1) {
                return Text.returnStartingEntries(COMMANDS, arguments[0], true);
            }
        }

        return new ArrayList<>();
    }
}