public boolean matches(CommandExecutor sender, String command, String[] args) throws CommandSyntaxException, SyntaxResponseException, ExecutorIncompatibleException { if (!this.command.equalsIgnoreCase(command)) return false; switch (commandExecutor) { case CONSOLE: if (sender != CommandExecutor.CONSOLE) throw new ExecutorIncompatibleException(Message.ONLY_CONSOLE.get(TextMode.COLOR)); break; case PLAYER: if (sender != CommandExecutor.PLAYER) throw new ExecutorIncompatibleException(Message.ONLY_INGAME.get(TextMode.COLOR)); break; } if (args == null || args.length == 0) { if (this.args.size() != args.length) return false; } int i = 0; Argument unlimitedArg = null; while (i < args.length) { Argument exArg = null; try { exArg = this.args.get(i); } catch (IndexOutOfBoundsException e) { if (unlimitedArg == null) { } else { exArg = unlimitedArg; } } if (exArg.isUnlimited()) { unlimitedArg = (Argument) exArg.clone(); } String arg = args[i]; try { exArg.getHandler().check(exArg.getParameter(), arg); } catch (SyntaxResponseException e) { throw e; } i++; } if (unlimitedArg != null) return true; if (this.args.size() == i) return true; return false; }