package blusunrize.immersiveengineering.common.util.commands; import blusunrize.immersiveengineering.api.Lib; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; public class CommandHandler extends CommandBase { ArrayList<IESubCommand> commands = new ArrayList<>(); final String name; public CommandHandler(boolean client) { commands.add(new CommandHelp()); if (client) { commands.add(new CommandResetRenders()); name = "cie"; } else { commands.add(new CommandMineral()); commands.add(new CommandShaders()); name = "ie"; } } @Override public String getCommandName() { return name; } @Override public int getRequiredPermissionLevel() { return 4; } @Override public List<String> getCommandAliases() { return Collections.emptyList(); } // /** // * Check if the given ICommandSender has permission to execute this command // */ // public boolean checkPermission(MinecraftServer server, ICommandSender sender) // { // } @Override public List<String> getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) { ArrayList<String> list = new ArrayList<String>(); if(args.length>0) for(IESubCommand sub : commands) { if(args.length==1) { if(args[0].isEmpty() || sub.getIdent().startsWith(args[0].toLowerCase(Locale.ENGLISH))) list.add(sub.getIdent()); } else if(sub.getIdent().equalsIgnoreCase(args[0])) { String[] redArgs = new String[args.length-1]; System.arraycopy(args,1, redArgs,0, redArgs.length); ArrayList<String> subCommands = sub.getSubCommands(this, server, sender, redArgs); if(subCommands!=null) list.addAll(subCommands); } } return list; } @Override public String getCommandUsage(ICommandSender sender) { String sub = ""; int i=0; for(IESubCommand com : commands) sub += ((i++)>0?"|":"")+com.getIdent(); return "/"+name+" <"+sub+">"; } @Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) { if(args.length>0) for(IESubCommand com : commands) { if(com.getIdent().equalsIgnoreCase(args[0])) { if(!sender.canCommandSenderUseCommand(com.getPermissionLevel(), this.getCommandName())) { TextComponentTranslation msg = new TextComponentTranslation("commands.generic.permission"); msg.getStyle().setColor(TextFormatting.RED); sender.addChatMessage(msg); } else com.perform(this, server, sender, args); } } else { String sub = ""; int i=0; for(IESubCommand com : commands) sub += ((i++)>0?", ":"")+com.getIdent(); sender.addChatMessage(new TextComponentTranslation(Lib.CHAT_COMMAND+"available",sub)); } } public abstract static class IESubCommand { public abstract String getIdent(); public abstract void perform(CommandHandler h, MinecraftServer server, ICommandSender sender, String[] args); public String getHelp(String subIdent) { return Lib.CHAT_COMMAND+getIdent()+subIdent+".help"; } public abstract ArrayList<String> getSubCommands(CommandHandler h, MinecraftServer server, ICommandSender sender, String[] args); public abstract int getPermissionLevel(); } }