diff --git a/cloud-core/src/main/java/cloud/commandframework/permission/AndPermission.java b/cloud-core/src/main/java/cloud/commandframework/permission/AndPermission.java index ad4e1c9d..e7ec63b1 100644 --- a/cloud-core/src/main/java/cloud/commandframework/permission/AndPermission.java +++ b/cloud-core/src/main/java/cloud/commandframework/permission/AndPermission.java @@ -50,7 +50,15 @@ public final class AndPermission implements CommandPermission { * @return Constructed permission */ public static @NonNull CommandPermission of(final @NonNull Collection permissions) { - return new AndPermission(new HashSet<>(permissions)); + final Set objects = new HashSet<>(); + for (final CommandPermission permission : permissions) { + if (permission instanceof AndPermission) { + objects.addAll(permission.getPermissions()); + } else { + objects.add(permission); + } + } + return new AndPermission(objects); } @Override diff --git a/cloud-core/src/main/java/cloud/commandframework/permission/CommandPermission.java b/cloud-core/src/main/java/cloud/commandframework/permission/CommandPermission.java index d4f8614f..40cd60f5 100644 --- a/cloud-core/src/main/java/cloud/commandframework/permission/CommandPermission.java +++ b/cloud-core/src/main/java/cloud/commandframework/permission/CommandPermission.java @@ -64,7 +64,7 @@ public interface CommandPermission { final Set permission = new HashSet<>(2); permission.add(this); permission.add(other); - return new OrPermission(permission); + return OrPermission.of(permission); } /** @@ -79,7 +79,7 @@ public interface CommandPermission { final Set permission = new HashSet<>(other.length + 1); permission.add(this); permission.addAll(Arrays.asList(other)); - return new OrPermission(permission); + return OrPermission.of(permission); } /** @@ -94,7 +94,7 @@ public interface CommandPermission { final Set permission = new HashSet<>(2); permission.add(this); permission.add(other); - return new AndPermission(permission); + return AndPermission.of(permission); } /** @@ -109,7 +109,7 @@ public interface CommandPermission { final Set permission = new HashSet<>(other.length + 1); permission.add(this); permission.addAll(Arrays.asList(other)); - return new AndPermission(permission); + return AndPermission.of(permission); } } diff --git a/cloud-core/src/main/java/cloud/commandframework/permission/OrPermission.java b/cloud-core/src/main/java/cloud/commandframework/permission/OrPermission.java index 6ba599fc..62bd3b4c 100644 --- a/cloud-core/src/main/java/cloud/commandframework/permission/OrPermission.java +++ b/cloud-core/src/main/java/cloud/commandframework/permission/OrPermission.java @@ -50,7 +50,15 @@ public final class OrPermission implements CommandPermission { * @return Constructed permission */ public static @NonNull CommandPermission of(final @NonNull Collection permissions) { - return new OrPermission(new HashSet<>(permissions)); + final Set objects = new HashSet<>(); + for (final CommandPermission permission : permissions) { + if (permission instanceof OrPermission) { + objects.addAll(permission.getPermissions()); + } else { + objects.add(permission); + } + } + return new OrPermission(objects); } @Override