diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index 9792974ab..a5b4293ae 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -37,6 +37,7 @@ import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.commands.ConsecutiveExecutor; import me.lucko.luckperms.common.commands.Sender; import me.lucko.luckperms.common.config.LPConfiguration; +import me.lucko.luckperms.common.constants.Permission; import me.lucko.luckperms.common.contexts.ContextManager; import me.lucko.luckperms.common.contexts.ServerCalculator; import me.lucko.luckperms.common.core.UuidCache; @@ -53,7 +54,6 @@ import me.lucko.luckperms.common.utils.LogFactory; import org.bukkit.World; import org.bukkit.command.PluginCommand; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.ServicePriority; @@ -355,30 +355,10 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { private void registerPermissions(PermissionDefault def) { PluginManager pm = getServer().getPluginManager(); - Map> wildcards = new HashMap<>(); - List all = new ArrayList<>(); - for (me.lucko.luckperms.common.constants.Permission p : me.lucko.luckperms.common.constants.Permission.values()) { - pm.addPermission(new Permission(p.getNode(), def)); - if (p.getGroup() != null) { - if (!wildcards.containsKey(p.getGroup())) { - wildcards.put(p.getGroup(), new ArrayList<>()); - } - wildcards.get(p.getGroup()).add(p.getTag()); + for (Permission p : Permission.values()) { + for (String node : p.getNodes()) { + pm.addPermission(new org.bukkit.permissions.Permission(node, def)); } - - all.add(p.getNode()); } - - for (Map.Entry> e : wildcards.entrySet()) { - pm.addPermission(new Permission( - "luckperms." + e.getKey() + ".*", def, - e.getValue().stream() - .map(tag -> "luckperms." + e.getKey() + "." + tag) - .collect(Collectors.toMap(s -> s, s -> true)) - ) - ); - } - - pm.addPermission(new Permission("luckperms.*", def, all.stream().collect(Collectors.toMap(s -> s, s -> true)))); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/SenderFactory.java b/common/src/main/java/me/lucko/luckperms/common/commands/SenderFactory.java index 50ba3b195..11a09d89b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/SenderFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/SenderFactory.java @@ -22,17 +22,16 @@ package me.lucko.luckperms.common.commands; -import com.google.common.collect.ImmutableMap; import lombok.Getter; import lombok.RequiredArgsConstructor; import me.lucko.luckperms.common.LuckPermsPlugin; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.constants.Permission; +import me.lucko.luckperms.common.utils.ImmutableCollectors; import java.lang.ref.WeakReference; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; /** * Factory class to make a thread-safe sender instance @@ -100,12 +99,15 @@ public abstract class SenderFactory implements Runnable { this.console = this.uuid.equals(Constants.getConsoleUUID()) || this.uuid.equals(Constants.getImporterUUID()); if (!this.console) { - if (toCheck == null || toCheck.isEmpty()) { - this.perms = ImmutableMap.copyOf(Arrays.stream(Permission.values()) - .collect(Collectors.toMap(p -> p, p -> factory.hasPermission(t, p.getNode())))); - } else { - this.perms = ImmutableMap.copyOf(toCheck.stream().collect(Collectors.toMap(p -> p, p -> factory.hasPermission(t, p.getNode())))); - } + this.perms = ((toCheck == null || toCheck.isEmpty()) ? Arrays.stream(Permission.values()) : toCheck.stream()) + .collect(ImmutableCollectors.toImmutableMap(p -> p, p -> { + for (String s : p.getNodes()) { + if (factory.hasPermission(t, s)) { + return true; + } + } + return false; + })); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddPrefix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddPrefix.java index 0545fa4e6..b35d34e92 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddPrefix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddPrefix.java @@ -40,7 +40,7 @@ import java.util.List; public class MetaAddPrefix extends SecondarySubCommand { public MetaAddPrefix() { - super("addprefix", "Adds a prefix", Permission.USER_ADDPREFIX, Permission.GROUP_ADDPREFIX, Predicate.notInRange(2, 4), + super("addprefix", "Adds a prefix", Permission.USER_META_ADDPREFIX, Permission.GROUP_META_ADDPREFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the prefix at"), Arg.create("prefix", true, "the prefix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddSuffix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddSuffix.java index e57b64e63..29e08d81f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddSuffix.java @@ -40,7 +40,7 @@ import java.util.List; public class MetaAddSuffix extends SecondarySubCommand { public MetaAddSuffix() { - super("addsuffix", "Adds a suffix", Permission.USER_ADDSUFFIX, Permission.GROUP_ADDSUFFIX, Predicate.notInRange(2, 4), + super("addsuffix", "Adds a suffix", Permission.USER_META_ADDSUFFIX, Permission.GROUP_META_ADDSUFFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the suffix at"), Arg.create("suffix", true, "the suffix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempPrefix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempPrefix.java index 70a1fa8f3..fa75d92cc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempPrefix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempPrefix.java @@ -41,7 +41,7 @@ import java.util.List; public class MetaAddTempPrefix extends SecondarySubCommand { public MetaAddTempPrefix() { - super("addtempprefix", "Adds a prefix temporarily", Permission.USER_ADD_TEMP_PREFIX, Permission.GROUP_ADD_TEMP_PREFIX, Predicate.notInRange(3, 5), + super("addtempprefix", "Adds a prefix temporarily", Permission.USER_META_ADDTEMP_PREFIX, Permission.GROUP_META_ADDTEMP_PREFIX, Predicate.notInRange(3, 5), Arg.list( Arg.create("priority", true, "the priority to add the prefix at"), Arg.create("prefix", true, "the prefix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempSuffix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempSuffix.java index 712b8dbcb..ba95e848c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempSuffix.java @@ -41,7 +41,7 @@ import java.util.List; public class MetaAddTempSuffix extends SecondarySubCommand { public MetaAddTempSuffix() { - super("addtempsuffix", "Adds a suffix temporarily", Permission.USER_ADD_TEMP_SUFFIX, Permission.GROUP_ADD_TEMP_SUFFIX, Predicate.notInRange(3, 5), + super("addtempsuffix", "Adds a suffix temporarily", Permission.USER_META_ADDTEMP_SUFFIX, Permission.GROUP_META_ADDTEMP_SUFFIX, Predicate.notInRange(3, 5), Arg.list( Arg.create("priority", true, "the priority to add the suffix at"), Arg.create("suffix", true, "the suffix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java index e99c13f7a..7f4e00874 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; public class MetaClear extends SecondarySubCommand { public MetaClear() { - super("clear", "Clears all chat meta", Permission.USER_CLEARMETA, Permission.GROUP_CLEARMETA, Predicate.notInRange(0, 2), + super("clear", "Clears all chat meta", Permission.USER_META_CLEAR, Permission.GROUP_META_CLEAR, Predicate.notInRange(0, 2), Arg.list( Arg.create("server", false, "the server name to filter by"), Arg.create("world", false, "the world name to filter by") diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaInfo.java index 340af42b6..17ba9c3ca 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaInfo.java @@ -38,7 +38,7 @@ import java.util.*; public class MetaInfo extends SecondarySubCommand { public MetaInfo() { - super("info", "Shows all chat meta", Permission.USER_CHATMETA, Permission.GROUP_CHATMETA, Predicate.alwaysFalse(), null); + super("info", "Shows all chat meta", Permission.USER_META_INFO, Permission.GROUP_META_INFO, Predicate.alwaysFalse(), null); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemovePrefix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemovePrefix.java index 1cb3544d9..d09835ba6 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemovePrefix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemovePrefix.java @@ -42,7 +42,7 @@ import java.util.List; public class MetaRemovePrefix extends SecondarySubCommand { public MetaRemovePrefix() { - super("removeprefix", "Removes a prefix", Permission.USER_REMOVEPREFIX, Permission.GROUP_REMOVEPREFIX, Predicate.notInRange(2, 4), + super("removeprefix", "Removes a prefix", Permission.USER_META_REMOVEPREFIX, Permission.GROUP_META_REMOVEPREFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the prefix at"), Arg.create("prefix", true, "the prefix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveSuffix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveSuffix.java index 6f84bbc79..16a767de4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveSuffix.java @@ -42,7 +42,7 @@ import java.util.List; public class MetaRemoveSuffix extends SecondarySubCommand { public MetaRemoveSuffix() { - super("removesuffix", "Removes a suffix", Permission.USER_REMOVESUFFIX, Permission.GROUP_REMOVESUFFIX, Predicate.notInRange(2, 4), + super("removesuffix", "Removes a suffix", Permission.USER_META_REMOVESUFFIX, Permission.GROUP_META_REMOVESUFFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the suffix at"), Arg.create("suffix", true, "the suffix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempPrefix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempPrefix.java index 447f66305..a5d005e59 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempPrefix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempPrefix.java @@ -42,7 +42,7 @@ import java.util.List; public class MetaRemoveTempPrefix extends SecondarySubCommand { public MetaRemoveTempPrefix() { - super("removetempprefix", "Removes a temporary prefix", Permission.USER_REMOVE_TEMP_PREFIX, Permission.GROUP_REMOVE_TEMP_PREFIX, Predicate.notInRange(2, 4), + super("removetempprefix", "Removes a temporary prefix", Permission.USER_META_REMOVETEMP_PREFIX, Permission.GROUP_META_REMOVETEMP_PREFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the prefix at"), Arg.create("prefix", true, "the prefix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempSuffix.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempSuffix.java index 1542dc896..094e40eee 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempSuffix.java @@ -42,7 +42,7 @@ import java.util.List; public class MetaRemoveTempSuffix extends SecondarySubCommand { public MetaRemoveTempSuffix() { - super("removetempsuffix", "Removes a temporary suffix", Permission.USER_REMOVE_TEMP_SUFFIX, Permission.GROUP_REMOVE_TEMP_SUFFIX, Predicate.notInRange(2, 4), + super("removetempsuffix", "Removes a temporary suffix", Permission.USER_META_REMOVETEMP_SUFFIX, Permission.GROUP_META_REMOVETEMP_SUFFIX, Predicate.notInRange(2, 4), Arg.list( Arg.create("priority", true, "the priority to add the suffix at"), Arg.create("suffix", true, "the suffix string"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java index 44c4760c8..806bd9d67 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java @@ -41,7 +41,7 @@ import java.util.List; public class MetaSet extends SecondarySubCommand { public MetaSet() { - super("set", "Sets a meta value", Permission.USER_SET_META, Permission.GROUP_SET_META, Predicate.notInRange(2, 4), + super("set", "Sets a meta value", Permission.USER_META_SET, Permission.GROUP_META_SET, Predicate.notInRange(2, 4), Arg.list( Arg.create("key", true, "the key to set"), Arg.create("value", true, "the value to set"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java index 8497490c8..83cedce2b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java @@ -42,7 +42,7 @@ import java.util.List; public class MetaSetTemp extends SecondarySubCommand { public MetaSetTemp() { - super("settemp", "Sets a meta value temporarily", Permission.USER_SET_TEMP_META, Permission.GROUP_SET_TEMP_META, Predicate.notInRange(3, 5), + super("settemp", "Sets a meta value temporarily", Permission.USER_META_SETTEMP, Permission.GROUP_META_SETTEMP, Predicate.notInRange(3, 5), Arg.list( Arg.create("key", true, "the key to set"), Arg.create("value", true, "the value to set"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java index 9ff9e7a4e..073996c82 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java @@ -40,7 +40,7 @@ import java.util.stream.Collectors; public class MetaUnset extends SecondarySubCommand { public MetaUnset() { - super("unset", "Unsets a meta value", Permission.USER_UNSET_META, Permission.GROUP_UNSET_META, Predicate.notInRange(1, 3), + super("unset", "Unsets a meta value", Permission.USER_META_UNSET, Permission.GROUP_META_UNSET, Predicate.notInRange(1, 3), Arg.list( Arg.create("key", true, "the key to unset"), Arg.create("server", false, "the server to remove the meta pair on"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java index 36e1d460f..541528c57 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java @@ -40,7 +40,7 @@ import java.util.stream.Collectors; public class MetaUnsetTemp extends SecondarySubCommand { public MetaUnsetTemp() { - super("unset", "Unsets a temporary meta value", Permission.USER_UNSET_TEMP_META, Permission.GROUP_UNSET_TEMP_META, Predicate.notInRange(1, 3), + super("unsettemp", "Unsets a temporary meta value", Permission.USER_META_UNSETTEMP, Permission.GROUP_META_UNSETTEMP, Predicate.notInRange(1, 3), Arg.list( Arg.create("key", true, "the key to unset"), Arg.create("server", false, "the server to remove the meta pair on"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java index 7243ea9af..b0c86109c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java @@ -43,7 +43,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getGroupTabComplete; public class ParentAdd extends SecondarySubCommand { public ParentAdd() { super("add", "Sets another group for the object to inherit permissions from", - Permission.USER_ADDGROUP, Permission.GROUP_SETINHERIT, Predicate.notInRange(1, 3), + Permission.USER_PARENT_ADD, Permission.GROUP_PARENT_ADD, Predicate.notInRange(1, 3), Arg.list( Arg.create("group", true, "the group to inherit from"), Arg.create("server", false, "the server to inherit the group on"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java index fa87cefdc..f5c941ffa 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java @@ -44,7 +44,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getGroupTabComplete; public class ParentAddTemp extends SecondarySubCommand { public ParentAddTemp() { super("addtemp", "Sets another group for the object to inherit permissions from temporarily", - Permission.USER_ADDTEMPGROUP, Permission.GROUP_SET_TEMP_INHERIT, Predicate.notInRange(2, 4), + Permission.USER_PARENT_ADDTEMP, Permission.GROUP_PARENT_ADDTEMP, Predicate.notInRange(2, 4), Arg.list( Arg.create("group", true, "the group to inherit from"), Arg.create("duration", true, "the duration of the group membership"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentInfo.java index ec70b99a6..8cc8d1bda 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentInfo.java @@ -37,7 +37,7 @@ import java.util.List; public class ParentInfo extends SecondarySubCommand { public ParentInfo() { super("info", "Lists the groups that this object inherits from", - Permission.USER_LISTGROUPS, Permission.GROUP_LISTPARENTS, Predicate.alwaysFalse(), null); + Permission.USER_PARENT_INFO, Permission.GROUP_PARENT_INFO, Predicate.alwaysFalse(), null); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java index 647929d93..c9bda7917 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java @@ -42,7 +42,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getGroupTabComplete; public class ParentRemove extends SecondarySubCommand { public ParentRemove() { - super("remove", "Removes a previously set inheritance rule", Permission.USER_REMOVEGROUP, Permission.GROUP_UNSETINHERIT, + super("remove", "Removes a previously set inheritance rule", Permission.USER_PARENT_REMOVE, Permission.GROUP_PARENT_REMOVE, Predicate.notInRange(1, 3), Arg.list( Arg.create("group", true, "the group to remove"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java index e7a6b85e3..268f36ad3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java @@ -42,7 +42,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getGroupTabComplete; public class ParentRemoveTemp extends SecondarySubCommand { public ParentRemoveTemp() { super("removetemp", "Removes a previously set temporary inheritance rule", - Permission.USER_REMOVETEMPGROUP, Permission.GROUP_UNSET_TEMP_INHERIT, Predicate.notInRange(1, 3), + Permission.USER_PARENT_REMOVETEMP, Permission.GROUP_PARENT_REMOVETEMP, Predicate.notInRange(1, 3), Arg.list( Arg.create("group", true, "the group to remove"), Arg.create("server", false, "the server to remove the group on"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionInfo.java index da618543d..32ac641b5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionInfo.java @@ -36,7 +36,7 @@ import java.util.List; public class PermissionInfo extends SecondarySubCommand { public PermissionInfo() { - super("info", "Lists the permission nodes the object has", Permission.USER_LISTNODES, Permission.GROUP_LISTNODES, Predicate.alwaysFalse(), null); + super("info", "Lists the permission nodes the object has", Permission.USER_PERM_INFO, Permission.GROUP_PERM_INFO, Predicate.alwaysFalse(), null); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java index f22a2a2ac..dd9161a25 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java @@ -41,7 +41,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getBoolTabComplete; public class PermissionSet extends SecondarySubCommand { public PermissionSet() { - super("set", "Sets a permission for the object", Permission.USER_SETPERMISSION, Permission.GROUP_SETPERMISSION, Predicate.notInRange(2, 4), + super("set", "Sets a permission for the object", Permission.USER_PERM_SET, Permission.GROUP_PERM_SET, Predicate.notInRange(2, 4), Arg.list( Arg.create("node", true, "the permission node to set"), Arg.create("true|false", true, "the value of the node"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java index b6692ec5f..a410d06df 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java @@ -42,7 +42,7 @@ import static me.lucko.luckperms.common.commands.SubCommand.getBoolTabComplete; public class PermissionSetTemp extends SecondarySubCommand { public PermissionSetTemp() { - super("settemp", "Sets a permission for the object temporarily", Permission.USER_SET_TEMP_PERMISSION, Permission.GROUP_SET_TEMP_PERMISSION, + super("settemp", "Sets a permission for the object temporarily", Permission.USER_PERM_SETTEMP, Permission.GROUP_PERM_SETTEMP, Predicate.notInRange(3, 5), Arg.list( Arg.create("node", true, "the permission node to set"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java index c68c00cdf..5d15b0c65 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java @@ -39,7 +39,7 @@ import java.util.List; public class PermissionUnset extends SecondarySubCommand { public PermissionUnset() { - super("unset", "Unsets a permission for the object", Permission.USER_UNSETPERMISSION, Permission.GROUP_UNSETPERMISSION, Predicate.notInRange(1, 3), + super("unset", "Unsets a permission for the object", Permission.USER_PERM_UNSET, Permission.GROUP_PERM_UNSET, Predicate.notInRange(1, 3), Arg.list( Arg.create("node", true, "the permission node to unset"), Arg.create("server", false, "the server to remove the permission node on"), diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java index b76bd4408..12b92aaf1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java @@ -39,7 +39,7 @@ import java.util.List; public class PermissionUnsetTemp extends SecondarySubCommand { public PermissionUnsetTemp() { - super("unsettemp", "Unsets a temporary permission for the object", Permission.USER_UNSET_TEMP_PERMISSION, Permission.GROUP_UNSET_TEMP_PERMISSION, + super("unsettemp", "Unsets a temporary permission for the object", Permission.USER_PERM_UNSETTEMP, Permission.GROUP_PERM_UNSETTEMP, Predicate.notInRange(1, 3), Arg.list( Arg.create("node", true, "the permission node to unset"), diff --git a/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java b/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java index bfcedf0b4..e59972e87 100644 --- a/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java +++ b/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java @@ -22,128 +22,153 @@ package me.lucko.luckperms.common.constants; +import com.google.common.collect.Sets; import lombok.AllArgsConstructor; import lombok.Getter; import me.lucko.luckperms.common.commands.Sender; +import me.lucko.luckperms.common.utils.ImmutableCollectors; + +import java.util.Set; @SuppressWarnings("SpellCheckingInspection") @Getter -@AllArgsConstructor public enum Permission { - SYNC("sync", null), - INFO("info", null), - DEBUG("debug", null), - IMPORT("import", null), + SYNC(set("sync"), Type.NONE), + INFO(set("info"), Type.NONE), + DEBUG(set("debug"), Type.NONE), + IMPORT(set("import"), Type.NONE), - CREATE_GROUP("creategroup", null), - DELETE_GROUP("deletegroup", null), - LIST_GROUPS("listgroups", null), + CREATE_GROUP(set("creategroup"), Type.NONE), + DELETE_GROUP(set("deletegroup"), Type.NONE), + LIST_GROUPS(set("listgroups"), Type.NONE), - CREATE_TRACK("createtrack", null), - DELETE_TRACK("deletetrack", null), - LIST_TRACKS("listtracks", null), + CREATE_TRACK(set("createtrack"), Type.NONE), + DELETE_TRACK(set("deletetrack"), Type.NONE), + LIST_TRACKS(set("listtracks"), Type.NONE), - USER_INFO("info", "user"), - USER_GETUUID("getuuid", "user"), - USER_LISTNODES("listnodes", "user"), - USER_LISTGROUPS("listgroups", "user"), - USER_HASPERMISSION("haspermission", "user"), - USER_INHERITSPERMISSION("inheritspermission", "user"), - USER_SETPERMISSION("setpermission", "user"), - USER_UNSETPERMISSION("unsetpermission", "user"), - USER_ADDGROUP("addgroup", "user"), - USER_REMOVEGROUP("removegroup", "user"), - USER_SET_TEMP_PERMISSION("settemppermission", "user"), - USER_UNSET_TEMP_PERMISSION("unsettemppermission", "user"), - USER_ADDTEMPGROUP("addtempgroup", "user"), - USER_REMOVETEMPGROUP("removetempgroup", "user"), - USER_SETPRIMARYGROUP("setprimarygroup", "user"), - USER_SHOWTRACKS("showtracks", "user"), - USER_PROMOTE("promote", "user"), - USER_DEMOTE("demote", "user"), - USER_SHOWPOS("showpos", "user"), - USER_CHATMETA("chatmeta", "user"), - USER_ADDPREFIX("addprefix", "user"), - USER_REMOVEPREFIX("removeprefix", "user"), - USER_ADDSUFFIX("addsuffix", "user"), - USER_REMOVESUFFIX("removesuffix", "user"), - USER_ADD_TEMP_PREFIX("addtempprefix", "user"), - USER_REMOVE_TEMP_PREFIX("removetempprefix", "user"), - USER_ADD_TEMP_SUFFIX("addtempsuffix", "user"), - USER_REMOVE_TEMP_SUFFIX("removetempsuffix", "user"), - USER_SET_META("setmeta", "user"), - USER_UNSET_META("unsetmeta", "user"), - USER_SET_TEMP_META("settempmeta", "user"), - USER_UNSET_TEMP_META("unsettempmeta", "user"), - USER_CLEARMETA("clearmeta", "user"), - USER_BULKCHANGE("bulkchange", "user"), - USER_CLEAR("clear", "user"), + USER_INFO(set("info"), Type.USER), + USER_PERM_INFO(set("permission.info", "listnodes"), Type.USER), + USER_PERM_SET(set("permission.set", "setpermission"), Type.USER), + USER_PERM_UNSET(set("permission.unset", "unsetpermission"), Type.USER), + USER_PERM_SETTEMP(set("permission.settemp", "settemppermission"), Type.USER), + USER_PERM_UNSETTEMP(set("permission.unsettemp", "unsettemppermission"), Type.USER), + USER_PARENT_INFO(set("parent.info", "listgroups"), Type.USER), + USER_PARENT_ADD(set("parent.add", "addgroup"), Type.USER), + USER_PARENT_REMOVE(set("parent.remove", "removegroup"), Type.USER), + USER_PARENT_ADDTEMP(set("parent.addtemp", "addtempgroup"), Type.USER), + USER_PARENT_REMOVETEMP(set("parent.removetemp", "removetempgroup"), Type.USER), + USER_META_INFO(set("meta.info", "chatmeta"), Type.USER), + USER_META_SET(set("meta.set", "setmeta"), Type.USER), + USER_META_UNSET(set("meta.unset", "unsetmeta"), Type.USER), + USER_META_SETTEMP(set("meta.settemp", "settempmeta"), Type.USER), + USER_META_UNSETTEMP(set("meta.unsettemp", "unsettempmeta"), Type.USER), + USER_META_ADDPREFIX(set("meta.addprefix", "addprefix"), Type.USER), + USER_META_ADDSUFFIX(set("meta.addsuffix", "addsuffix"), Type.USER), + USER_META_REMOVEPREFIX(set("meta.removeprefix", "removeprefix"), Type.USER), + USER_META_REMOVESUFFIX(set("meta.removesuffix", "removesuffix"), Type.USER), + USER_META_ADDTEMP_PREFIX(set("meta.addtempprefix", "addtempprefix"), Type.USER), + USER_META_ADDTEMP_SUFFIX(set("meta.addtempsuffix", "addtempsuffix"), Type.USER), + USER_META_REMOVETEMP_PREFIX(set("meta.removetempprefix", "removetempprefix"), Type.USER), + USER_META_REMOVETEMP_SUFFIX(set("meta.removetempsuffix", "removetempsuffix"), Type.USER), + USER_META_CLEAR(set("meta.clear", "clearmeta"), Type.USER), + USER_GETUUID(set("getuuid"), Type.USER), + USER_HASPERMISSION(set("haspermission"), Type.USER), + USER_INHERITSPERMISSION(set("inheritspermission"), Type.USER), + USER_SETPRIMARYGROUP(set("setprimarygroup"), Type.USER), + USER_SHOWTRACKS(set("showtracks"), Type.USER), + USER_PROMOTE(set("promote"), Type.USER), + USER_DEMOTE(set("demote"), Type.USER), + USER_SHOWPOS(set("showpos"), Type.USER), + USER_BULKCHANGE(set("bulkchange"), Type.USER), + USER_CLEAR(set("clear"), Type.USER), - GROUP_INFO("info", "group"), - GROUP_LISTNODES("listnodes", "group"), - GROUP_LISTPARENTS("listparents", "group"), - GROUP_HASPERMISSION("haspermission", "group"), - GROUP_INHERITSPERMISSION("inheritspermission", "group"), - GROUP_SETPERMISSION("setpermission", "group"), - GROUP_UNSETPERMISSION("unsetpermission", "group"), - GROUP_SETINHERIT("setinherit", "group"), - GROUP_UNSETINHERIT("unsetinherit", "group"), - GROUP_SET_TEMP_PERMISSION("settemppermission", "group"), - GROUP_UNSET_TEMP_PERMISSION("unsettemppermission", "group"), - GROUP_SET_TEMP_INHERIT("settempinherit", "group"), - GROUP_UNSET_TEMP_INHERIT("unsettempinherit", "group"), - GROUP_SHOWTRACKS("showtracks", "group"), - GROUP_CHATMETA("chatmeta", "group"), - GROUP_ADDPREFIX("addprefix", "group"), - GROUP_REMOVEPREFIX("removeprefix", "group"), - GROUP_ADDSUFFIX("addsuffix", "group"), - GROUP_REMOVESUFFIX("removesuffix", "group"), - GROUP_ADD_TEMP_PREFIX("addtempprefix", "group"), - GROUP_REMOVE_TEMP_PREFIX("removetempprefix", "group"), - GROUP_ADD_TEMP_SUFFIX("addtempsuffix", "group"), - GROUP_REMOVE_TEMP_SUFFIX("removetempsuffix", "group"), - GROUP_SET_META("setmeta", "group"), - GROUP_UNSET_META("unsetmeta", "group"), - GROUP_SET_TEMP_META("settempmeta", "group"), - GROUP_UNSET_TEMP_META("unsettempmeta", "group"), - GROUP_CLEARMETA("clearmeta", "group"), - GROUP_BULKCHANGE("bulkchange", "group"), - GROUP_CLEAR("clear", "group"), - GROUP_RENAME("rename", "group"), - GROUP_CLONE("clone", "group"), + GROUP_INFO(set("info"), Type.GROUP), + GROUP_PERM_INFO(set("permission.info", "listnodes"), Type.GROUP), + GROUP_PERM_SET(set("permission.set", "setpermission"), Type.GROUP), + GROUP_PERM_UNSET(set("permission.unset", "unsetpermission"), Type.GROUP), + GROUP_PERM_SETTEMP(set("permission.settemp", "settemppermission"), Type.GROUP), + GROUP_PERM_UNSETTEMP(set("permission.unsettemp", "unsettemppermission"), Type.GROUP), + GROUP_PARENT_INFO(set("parent.info", "listparents"), Type.GROUP), + GROUP_PARENT_ADD(set("parent.add", "setinherit"), Type.GROUP), + GROUP_PARENT_REMOVE(set("parent.remove", "unsetinherit"), Type.GROUP), + GROUP_PARENT_ADDTEMP(set("parent.addtemp", "settempinherit"), Type.GROUP), + GROUP_PARENT_REMOVETEMP(set("parent.removetemp", "unsettempinherit"), Type.GROUP), + GROUP_META_INFO(set("meta.info", "chatmeta"), Type.GROUP), + GROUP_META_SET(set("meta.set", "setmeta"), Type.GROUP), + GROUP_META_UNSET(set("meta.unset", "unsetmeta"), Type.GROUP), + GROUP_META_SETTEMP(set("meta.settemp", "settempmeta"), Type.GROUP), + GROUP_META_UNSETTEMP(set("meta.unsettemp", "unsettempmeta"), Type.GROUP), + GROUP_META_ADDPREFIX(set("meta.addprefix", "addprefix"), Type.GROUP), + GROUP_META_ADDSUFFIX(set("meta.addsuffix", "addsuffix"), Type.GROUP), + GROUP_META_REMOVEPREFIX(set("meta.removeprefix", "removeprefix"), Type.GROUP), + GROUP_META_REMOVESUFFIX(set("meta.removesuffix", "removesuffix"), Type.GROUP), + GROUP_META_ADDTEMP_PREFIX(set("meta.addtempprefix", "addtempprefix"), Type.GROUP), + GROUP_META_ADDTEMP_SUFFIX(set("meta.addtempsuffix", "addtempsuffix"), Type.GROUP), + GROUP_META_REMOVETEMP_PREFIX(set("meta.removetempprefix", "removetempprefix"), Type.GROUP), + GROUP_META_REMOVETEMP_SUFFIX(set("meta.removetempsuffix", "removetempsuffix"), Type.GROUP), + GROUP_META_CLEAR(set("meta.clear", "clearmeta"), Type.GROUP), + GROUP_HASPERMISSION(set("haspermission"), Type.GROUP), + GROUP_INHERITSPERMISSION(set("inheritspermission"), Type.GROUP), + GROUP_SHOWTRACKS(set("showtracks"), Type.GROUP), + GROUP_BULKCHANGE(set("bulkchange"), Type.GROUP), + GROUP_CLEAR(set("clear"), Type.GROUP), + GROUP_RENAME(set("rename"), Type.GROUP), + GROUP_CLONE(set("clone"), Type.GROUP), - TRACK_INFO("info", "track"), - TRACK_APPEND("append", "track"), - TRACK_INSERT("insert", "track"), - TRACK_REMOVE("remove", "track"), - TRACK_CLEAR("clear", "track"), - TRACK_RENAME("rename", "track"), - TRACK_CLONE("clone", "track"), + TRACK_INFO(set("info"), Type.TRACK), + TRACK_APPEND(set("append"), Type.TRACK), + TRACK_INSERT(set("insert"), Type.TRACK), + TRACK_REMOVE(set("remove"), Type.TRACK), + TRACK_CLEAR(set("clear"), Type.TRACK), + TRACK_RENAME(set("rename"), Type.TRACK), + TRACK_CLONE(set("clone"), Type.TRACK), - LOG_RECENT("recent", "log"), - LOG_USER_HISTORY("userhistory", "log"), - LOG_GROUP_HISTORY("grouphistory", "log"), - LOG_TRACK_HISTORY("trackhistory", "log"), - LOG_SEARCH("search", "log"), - LOG_NOTIFY("notify", "log"), - LOG_EXPORT("export", "log"), + LOG_RECENT(set("recent"), Type.LOG), + LOG_USER_HISTORY(set("userhistory"), Type.LOG), + LOG_GROUP_HISTORY(set("grouphistory"), Type.LOG), + LOG_TRACK_HISTORY(set("trackhistory"), Type.LOG), + LOG_SEARCH(set("search"), Type.LOG), + LOG_NOTIFY(set("notify"), Type.LOG), + LOG_EXPORT(set("export"), Type.LOG), - MIGRATION("migration", null); + MIGRATION(set("migration"), Type.NONE); - private String tag; - private String group; + private static final String IDENTIFIER = "luckperms."; - public String getNode() { - if (group != null) { - return "luckperms." + group + "." + tag; + private Set nodes; + private Type type; + + Permission(Set tags, Type type) { + this.type = type; + + if (type == Type.NONE) { + this.nodes = tags.stream().map(t -> IDENTIFIER + t).collect(ImmutableCollectors.toImmutableSet()); + } else { + this.nodes = tags.stream().map(t -> IDENTIFIER + type.getTag() + "." + t).collect(ImmutableCollectors.toImmutableSet()); } - - return "luckperms." + tag; } public boolean isAuthorized(Sender sender) { return sender.hasPermission(this); } + private static Set set(String... args) { + return Sets.newHashSet(args); + } + + @Getter + @AllArgsConstructor + public enum Type { + + NONE(null), + USER("user"), + GROUP("group"), + TRACK("track"), + LOG("log"); + + private final String tag; + + } + } diff --git a/common/src/main/java/me/lucko/luckperms/common/utils/ImmutableCollectors.java b/common/src/main/java/me/lucko/luckperms/common/utils/ImmutableCollectors.java new file mode 100644 index 000000000..dad6cd791 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/utils/ImmutableCollectors.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.utils; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import lombok.experimental.UtilityClass; + +import java.util.function.Function; +import java.util.stream.Collector; + +@UtilityClass +public class ImmutableCollectors { + + public static Collector, ImmutableMap> toImmutableMap(Function keyMapper, Function valueMapper) { + return Collector.of( + ImmutableMap.Builder::new, + (r, t) -> r.put(keyMapper.apply(t), valueMapper.apply(t)), + (l, r) -> l.putAll(r.build()), + ImmutableMap.Builder::build, + Collector.Characteristics.UNORDERED); + } + + public static Collector, ImmutableSet> toImmutableSet() { + return Collector.of( + ImmutableSet.Builder::new, + ImmutableSet.Builder::add, + (l, r) -> l.addAll(r.build()), + ImmutableSet.Builder::build, + Collector.Characteristics.UNORDERED); + } + + public static Collector, ImmutableList> toImmutableList() { + return Collector.of( + ImmutableList.Builder::new, + ImmutableList.Builder::add, + (l, r) -> l.addAll(r.build()), + ImmutableList.Builder::build); + } + +} diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java index 58d793b73..bddf5246e 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -200,7 +200,9 @@ public class LPSpongePlugin implements LuckPermsPlugin { } for (Permission perm : Permission.values()) { - registerPermission(p, perm.getNode()); + for (String node : perm.getNodes()) { + registerPermission(p, node); + } } }