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<>(); } }