@Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { if (args.length < this.requiredArguments.size()) { throw new WrongUsageException(this.getUsage(sender)); } else if (args.length > this.requiredArguments.size() + this.optionalArguments.size()) { throw new WrongUsageException(this.getUsage(sender)); } else { List<Argument<?>> arguments = Lists.newArrayList(); for (int i = 0; i < args.length; i++) { if (i < this.requiredArguments.size()) { Map.Entry<String, IArgumentParser<?>> entry = this.requiredArguments.getEntry(i); try { arguments.add(new Argument<>(entry.getKey(), entry.getValue().parseArgument(server, sender, args[i]))); } catch (CommandException e) { sender.sendMessage(new TextComponentString(e.getLocalizedMessage()).setStyle(new Style().setColor(TextFormatting.RED))); } } else { Map.Entry<String, IArgumentParser<?>> entry = this.optionalArguments.getEntry(i - this.requiredArguments.size()); try { arguments.add(new Argument<>(entry.getKey(), entry.getValue().parseArgument(server, sender, args[i]))); } catch (CommandException e) { sender.sendMessage(new TextComponentString(e.getLocalizedMessage()).setStyle(new Style().setColor(TextFormatting.RED))); } } } this.executor.execute(server, sender, new CommandArguments(arguments)); } }