private void parse(CommandSender sender, UltimateCommand command, String label, List<String> args) {
        if (!reqAreMet(sender, command)) {
//            noPerms(sender);
            return;
        }
        for (UltimateCommand cmd : command.getSubCommands()) {
            if (args.size() > 0 && StringUtils.containsIgnoreCase(cmd.getAliases(), args.get(0))) {
                args.remove(0);
                parse(sender, cmd, label, args);
                return;
            }
        }
        if (args.size() > (command.getArgs().size() + command.getOptionalArgs().size()) && command.errorOnToManyArgs) {
            tooManyParams(sender);
            printUsage(sender, command);
            return;
        }
        if (args.size() < command.getArgs().size()) {
            notEnoughParams(sender);
            printUsage(sender, command);
            return;
        }
        command.perform(sender, label, args);
    }