BungeeMain / src / main / java / com / lifeknight / relaymcbungeemain / commands / game / PlayCommand.java
PlayCommand.java
Raw
package com.lifeknight.relaymcbungeemain.commands.game;

import com.lifeknight.relaymcbungeemain.player.SmartPlayer;
import com.lifeknight.relayutils.basic.Text;
import com.lifeknight.relayutils.game.GameType;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;

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

public class PlayCommand extends Command implements TabExecutor {

    private final static List<String> GAMES;

    static {
        GAMES = new ArrayList<>();
        for (GameType gameType : GameType.getGameTypes(true, false)) {
            GAMES.add(gameType.getCodeName());
        }
    }

    public PlayCommand() {
        super("play", null);
    }

    @Override
    public void execute(CommandSender sender, String[] arguments) {
        if (!(sender instanceof ProxiedPlayer)) return;

        ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender;

        SmartPlayer smartPlayer = SmartPlayer.getSmartPlayer(proxiedPlayer);

        if (!smartPlayer.isOnHub()) {
            smartPlayer.sendErrorMessage("You can only use the play command in lobbies!");
            return;
        }

        if (arguments.length > 0) {
            String game = arguments[0];

            GameType gameType = GameType.getGameType(game.toLowerCase());

            if (gameType != null && gameType.isEnabled()) {
                smartPlayer.queueGame(gameType);
            } else {
                tellPlayerGames(smartPlayer);
            }
        } else {
            tellPlayerGames(smartPlayer);
        }
    }

    private static void tellPlayerGames(SmartPlayer smartPlayer) {
        smartPlayer.sendInfoMessage("Available games: %s%s", ChatColor.GREEN, Text.separateWithCommas(GAMES));
    }

    @Override
    public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
        if (args.length > 1) {
            return new ArrayList<>();
        }
        return Text.returnStartingEntries(GAMES, args.length > 0 ? args[0] : null, true);
    }
}