diff --git a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java b/SpigotCore_Main/src/de/steamwar/command/SubCommand.java index c1cb92a..3cd6778 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SubCommand.java @@ -92,7 +92,11 @@ class SubCommand { SWCommand.Guard guard = parameter.getAnnotation(SWCommand.Guard.class); if (guard != null) { if (guard.value() == null || guard.value().isEmpty()) { - return GUARD_FUNCTIONS.getOrDefault(parameter.getType().getTypeName(), null); + String s = parameter.getType().getTypeName(); + if (parameter.isVarArgs()) { + s = parameter.getType().getComponentType().getTypeName(); + } + return localGuardChecker.getOrDefault(s, GUARD_FUNCTIONS.getOrDefault(s, null)); } GuardChecker current = localGuardChecker.getOrDefault(guard.value(), GUARD_FUNCTIONS.getOrDefault(guard.value(), null)); if (guardChecker == null) { @@ -116,15 +120,24 @@ class SubCommand { } Object[] objects = SWCommandUtils.generateArgumentArray(commandSender, arguments, guards, args, varArgType, subCommand); objects[0] = commandSenderFunction.apply(commandSender); - for (int i = 0; i < objects.length; i++) { + for (int i = subCommand.length; i < args.length; i++) { GuardChecker current; - if (i == 0) { + if (i == subCommand.length) { current = guardChecker; } else { - current = guards[i - 1]; + if (i >= objects.length + subCommand.length) { + current = guards[guards.length - 1]; + } else { + current = guards[i - 1 - subCommand.length]; + } } if (current != null) { - GuardResult guardResult = current.guard(commandSender, help ? GuardCheckType.HELP_COMMAND : GuardCheckType.COMMAND, new String[0], null); + GuardResult guardResult; + if (i == 0) { + guardResult = current.guard(commandSender, help ? GuardCheckType.HELP_COMMAND : GuardCheckType.COMMAND, new String[0], null); + } else { + guardResult = current.guard(commandSender, help ? GuardCheckType.HELP_COMMAND : GuardCheckType.COMMAND, Arrays.copyOf(args, i - 1), args[i - 1]); + } if (guardResult != GuardResult.ALLOWED) { if (guardResult == GuardResult.DENIED) { throw new CommandNoHelpException();