package net.momirealms.customcrops.commands; import net.momirealms.customcrops.commands.subcmd.ReloadCommand; import net.momirealms.customcrops.commands.subcmd.SetSeasonCommand; import net.momirealms.customcrops.commands.subcmd.SimulateCommand; import net.momirealms.customcrops.config.MessageConfig; import net.momirealms.customcrops.utils.AdventureUtil; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class PluginCommand implements TabExecutor { private final Map subCommandMap; public PluginCommand() { subCommandMap = new ConcurrentHashMap<>(); regDefaultSubCommands(); } @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { List argList = Arrays.asList(args); if (argList.size() < 1) { AdventureUtil.sendMessage(sender, MessageConfig.prefix + MessageConfig.nonArgs); return true; } SubCommand subCommand = subCommandMap.get(argList.get(0)); if (subCommand != null) return subCommand.onCommand(sender, argList.subList(1, argList.size())); else { AdventureUtil.sendMessage(sender, MessageConfig.prefix + MessageConfig.unavailableArgs); return true; } } private void regDefaultSubCommands() { regSubCommand(ReloadCommand.INSTANCE); regSubCommand(SetSeasonCommand.INSTANCE); regSubCommand(SimulateCommand.INSTANCE); } public void regSubCommand(SubCommand executor) { subCommandMap.put(executor.getSubCommand(), executor); } @Override public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { List argList = Arrays.asList(args); if (argList.size() <= 1) { List returnList = new ArrayList<>(subCommandMap.keySet()); returnList.removeIf(str -> !str.startsWith(args[0])); return returnList; } SubCommand subCommand = subCommandMap.get(argList.get(0)); if (subCommand != null) return subCommand.onTabComplete(sender, argList.subList(1, argList.size())); else return Collections.singletonList(""); } public Map getSubCommandMap() { return subCommandMap; } }