public boolean dispatch(CommandSender sender, String commandName, String label, String[] args) {
		for (int argsIncluded = args.length; argsIncluded >= 0; argsIncluded--) {
			StringBuilder identifierBuilder = new StringBuilder(commandName);
			for(int i = 0; i < argsIncluded; i++) {
				identifierBuilder.append(' ').append(args[i]);
			}
			
			String identifier = identifierBuilder.toString();
			Command cmd = getCmdFromIdent(identifier, sender);
			if (cmd != null) {
				String[] realArgs = (String[])Arrays.copyOfRange(args, argsIncluded, args.length);
				
				if (!cmd.isInProgress(sender)) {
					if ((realArgs.length < cmd.getMaxArguments()) || (realArgs.length > cmd.getMaxArguments())) {
						displayCommandHelp(cmd, sender);
						return true;
					}
					if ((realArgs.length > 0) && (realArgs[0].equals("?"))) {
						displayCommandHelp(cmd, sender);
						return true;
					}
				}
				
				if (!DonorTitles.perms.has(sender, cmd.getPermission())) {
					sender.sendMessage("Insufficient permission.");
					return true;
				}
				
				cmd.execute(sender, identifier, realArgs);
				return true;
			}
		}
		sender.sendMessage("Unrecognized command!");
		return true;
	}