parameterPermissions = parameter.getPermissions();
+ if (!parameter.isOptionalResolver() && parameterPermissions != null && !parameterPermissions.isEmpty()) {
+ if (allowOptional && parameter.isOptional()) {
+ for (String perm : parameterPermissions) {
+ if (!perm.isEmpty() && !sender.hasPermission(perm)) {
+ sender.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED);
+ return null;
+ }
+ }
+ } else {
+ throw new IllegalStateException("Using CommandPermission annotation on parameter that is not optional is useless and you should not do it.");
+ }
+ }
+
//noinspection unchecked
this.manager.conditions.validateConditions(context, paramValue);
passedArgs.put(parameterName, paramValue);
diff --git a/core/src/main/java/co/aikar/commands/annotation/CommandPermission.java b/core/src/main/java/co/aikar/commands/annotation/CommandPermission.java
index 96c3111a..b41bafb5 100644
--- a/core/src/main/java/co/aikar/commands/annotation/CommandPermission.java
+++ b/core/src/main/java/co/aikar/commands/annotation/CommandPermission.java
@@ -30,11 +30,11 @@ import java.lang.annotation.Target;
/**
* Sets the permission required to perform this command.
- *
+ *
* Permission format will vary based on implementation platform
*/
@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.METHOD, ElementType.TYPE})
+@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface CommandPermission {
String value();
}