Allow context pairs to be specified in commands, fix misuse of exceptions in the permission holder class

This commit is contained in:
Luck
2017-04-02 18:44:05 +01:00
Unverified
parent 0a33c0aac5
commit e7e2e3f7e0
85 changed files with 1572 additions and 2359 deletions
@@ -39,7 +39,7 @@ public class MessageHandler {
public void sendJsonMessage(CommandSender sender, FancyMessage message) {
if (ReflectionUtil.isChatCompatible() && sender instanceof Player) {
Player player = (Player) sender;
String json = message.toJSONString();
String json = message.exportToJson();
// Try Bukkit.
if (bukkitHandler.sendJsonMessage(player, json)) {
@@ -189,11 +189,11 @@ public class MigrationBPermissions extends SubCommand<Object> {
private static void migrateHolder(World world, Calculable c, PermissionHolder holder) {
// Migrate the groups permissions in this world
for (Permission p : c.getPermissions()) {
holder.setPermissionUnchecked(NodeFactory.make(p.name(), p.isTrue(), "global", world.getName()));
holder.setPermission(NodeFactory.make(p.name(), p.isTrue(), "global", world.getName()));
// Include any child permissions
for (Map.Entry<String, Boolean> child : p.getChildren().entrySet()) {
holder.setPermissionUnchecked(NodeFactory.make(child.getKey(), child.getValue(), "global", world.getName()));
holder.setPermission(NodeFactory.make(child.getKey(), child.getValue(), "global", world.getName()));
}
}
@@ -204,17 +204,17 @@ public class MigrationBPermissions extends SubCommand<Object> {
parentName = "default";
}
holder.setPermissionUnchecked(NodeFactory.make("group." + parentName, true, "global", world.getName()));
holder.setPermission(NodeFactory.make("group." + parentName, true, "global", world.getName()));
}
// Migrate existing meta
for (Map.Entry<String, String> meta : c.getMeta().entrySet()) {
if (meta.getKey().equalsIgnoreCase("prefix") || meta.getKey().equalsIgnoreCase("suffix")) {
holder.setPermissionUnchecked(NodeFactory.makeChatMetaNode(meta.getKey().equalsIgnoreCase("prefix"), c.getPriority(), meta.getValue()).setWorld(world.getName()).build());
holder.setPermission(NodeFactory.makeChatMetaNode(meta.getKey().equalsIgnoreCase("prefix"), c.getPriority(), meta.getValue()).setWorld(world.getName()).build());
continue;
}
holder.setPermissionUnchecked(NodeFactory.makeMetaNode(meta.getKey(), meta.getValue()).setWorld(world.getName()).build());
holder.setPermission(NodeFactory.makeMetaNode(meta.getKey(), meta.getValue()).setWorld(world.getName()).build());
}
}
}
@@ -97,11 +97,11 @@ public class MigrationGroupManager extends SubCommand<Object> {
me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(groupName);
for (String node : g.getPermissionList()) {
group.setPermissionUnchecked(MigrationUtils.parseNode(node, true).build());
group.setPermission(MigrationUtils.parseNode(node, true).build());
}
for (String s : g.getInherits()) {
group.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(s)));
group.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(s)));
}
plugin.getStorage().saveGroup(group);
@@ -217,7 +217,7 @@ public class MigrationGroupManager extends SubCommand<Object> {
me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(e.getKey());
for (Node node : e.getValue()) {
group.setPermissionUnchecked(node);
group.setPermission(node);
}
plugin.getStorage().saveGroup(group);
@@ -232,14 +232,14 @@ public class MigrationGroupManager extends SubCommand<Object> {
me.lucko.luckperms.common.core.model.User user = plugin.getUserManager().get(e.getKey());
for (Node node : e.getValue()) {
user.setPermissionUnchecked(node);
user.setPermission(node);
}
String primaryGroup = primaryGroups.get(e.getKey());
if (primaryGroup != null) {
user.setPermissionUnchecked(NodeFactory.make("group." + primaryGroup));
user.setPermission(NodeFactory.make("group." + primaryGroup));
user.getPrimaryGroup().setStoredValue(primaryGroup);
user.unsetPermissionUnchecked(NodeFactory.make("group.default"));
user.unsetPermission(NodeFactory.make("group.default"));
}
plugin.getStorage().saveUser(user);
@@ -106,7 +106,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
try {
for (String node : group.getOwnPermissions(null)) {
lpGroup.setPermissionUnchecked(MigrationUtils.parseNode(node, true).build());
lpGroup.setPermission(MigrationUtils.parseNode(node, true).build());
}
} catch (NullPointerException ignored) {
// No docs on if #getOwnPermissions(null) is ok. Should be fine though.
@@ -114,17 +114,17 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
for (String world : worlds) {
for (String node : group.getOwnPermissions(world)) {
lpGroup.setPermissionUnchecked(MigrationUtils.parseNode(node, true).setWorld(world.toLowerCase()).build());
lpGroup.setPermission(MigrationUtils.parseNode(node, true).setWorld(world.toLowerCase()).build());
}
}
for (PermissionGroup g : group.getParents()) {
lpGroup.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(g.getName())));
lpGroup.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(g.getName())));
}
for (String world : worlds) {
for (PermissionGroup g : group.getParents(world)) {
lpGroup.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(g.getName()), true, "global", world.toLowerCase()));
lpGroup.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(g.getName()), true, "global", world.toLowerCase()));
}
}
@@ -132,11 +132,11 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
String suffix = group.getOwnSuffix();
if (prefix != null && !prefix.equals("")) {
lpGroup.setPermissionUnchecked(NodeFactory.makePrefixNode(groupWeight, prefix).build());
lpGroup.setPermission(NodeFactory.makePrefixNode(groupWeight, prefix).build());
}
if (suffix != null && !suffix.equals("")) {
lpGroup.setPermissionUnchecked(NodeFactory.makeSuffixNode(groupWeight, suffix).build());
lpGroup.setPermission(NodeFactory.makeSuffixNode(groupWeight, suffix).build());
}
plugin.getStorage().saveGroup(lpGroup);
@@ -176,7 +176,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
try {
for (String node : user.getOwnPermissions(null)) {
lpUser.setPermissionUnchecked(MigrationUtils.parseNode(node, true).build());
lpUser.setPermission(MigrationUtils.parseNode(node, true).build());
}
} catch (NullPointerException ignored) {
// No docs on if #getOwnPermissions(null) is ok. Should be fine though.
@@ -184,17 +184,17 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
for (String world : worlds) {
for (String node : user.getOwnPermissions(world)) {
lpUser.setPermissionUnchecked(MigrationUtils.parseNode(node, true).setWorld(world.toLowerCase()).build());
lpUser.setPermission(MigrationUtils.parseNode(node, true).setWorld(world.toLowerCase()).build());
}
}
for (String g : user.getGroupNames()) {
lpUser.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(g)));
lpUser.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(g)));
}
for (String world : worlds) {
for (String g : user.getGroupNames(world)) {
lpUser.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(g), true, "global", world.toLowerCase()));
lpUser.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(g), true, "global", world.toLowerCase()));
}
}
@@ -202,11 +202,11 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
String suffix = user.getOwnSuffix();
if (prefix != null && !prefix.equals("")) {
lpUser.setPermissionUnchecked(NodeFactory.makePrefixNode(maxWeight, prefix).build());
lpUser.setPermission(NodeFactory.makePrefixNode(maxWeight, prefix).build());
}
if (suffix != null && !suffix.equals("")) {
lpUser.setPermissionUnchecked(NodeFactory.makeSuffixNode(maxWeight, suffix).build());
lpUser.setPermission(NodeFactory.makeSuffixNode(maxWeight, suffix).build());
}
// Lowest rank is the highest group #logic
@@ -220,9 +220,9 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
}
if (primary != null && !primary.equalsIgnoreCase("default")) {
lpUser.setPermissionUnchecked(NodeFactory.make("group." + primary.toLowerCase()));
lpUser.setPermission(NodeFactory.make("group." + primary.toLowerCase()));
lpUser.getPrimaryGroup().setStoredValue(primary);
lpUser.unsetPermissionUnchecked(NodeFactory.make("group.default"));
lpUser.unsetPermission(NodeFactory.make("group.default"));
}
plugin.getUserManager().cleanup(lpUser);
@@ -180,7 +180,7 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
}
for (Group parent : g.getParents()) {
group.setPermissionUnchecked(NodeFactory.make("group." + parent.getName().toLowerCase(), true));
group.setPermission(NodeFactory.make("group." + parent.getName().toLowerCase(), true));
}
// server --> prefix afaik
@@ -191,9 +191,9 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
}
if (server != null) {
group.setPermissionUnchecked(NodeFactory.makePrefixNode(g.getRank(), prefix.getValue()).setServer(server).build());
group.setPermission(NodeFactory.makePrefixNode(g.getRank(), prefix.getValue()).setServer(server).build());
} else {
group.setPermissionUnchecked(NodeFactory.makePrefixNode(g.getRank(), prefix.getValue()).build());
group.setPermission(NodeFactory.makePrefixNode(g.getRank(), prefix.getValue()).build());
}
}
@@ -204,9 +204,9 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
}
if (server != null) {
group.setPermissionUnchecked(NodeFactory.makeSuffixNode(g.getRank(), suffix.getValue()).setServer(server).build());
group.setPermission(NodeFactory.makeSuffixNode(g.getRank(), suffix.getValue()).setServer(server).build());
} else {
group.setPermissionUnchecked(NodeFactory.makeSuffixNode(g.getRank(), suffix.getValue()).build());
group.setPermission(NodeFactory.makeSuffixNode(g.getRank(), suffix.getValue()).build());
}
}
@@ -252,16 +252,16 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
String suffix = joinFuture(pm.getPlayerOwnSuffix(uuid));
if (prefix != null && !prefix.equals("")) {
user.setPermissionUnchecked(NodeFactory.makePrefixNode(maxWeight, prefix).build());
user.setPermission(NodeFactory.makePrefixNode(maxWeight, prefix).build());
}
if (suffix != null && !suffix.equals("")) {
user.setPermissionUnchecked(NodeFactory.makeSuffixNode(maxWeight, suffix).build());
user.setPermission(NodeFactory.makeSuffixNode(maxWeight, suffix).build());
}
String primary = joinFuture(pm.getPlayerPrimaryGroup(uuid)).getName().toLowerCase();
if (!primary.equals("default")) {
user.setPermissionUnchecked(NodeFactory.make("group." + primary));
user.setPermission(NodeFactory.make("group." + primary));
user.getPrimaryGroup().setStoredValue(primary);
}
@@ -316,7 +316,7 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
nb.setWorld(world);
}
holder.setPermissionUnchecked(nb.build());
holder.setPermission(nb.build());
}
private void applyGroup(PermissionManager pm, PermissionHolder holder, CachedGroup g, String server) {
@@ -338,7 +338,7 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
nb.setServer(server);
}
holder.setPermissionUnchecked(nb.build());
holder.setPermission(nb.build());
}
@SneakyThrows
@@ -147,9 +147,9 @@ public class MigrationZPermissions extends SubCommand<Object> {
private void migrateEntity(PermissionHolder holder, PermissionEntity entity, List<Membership> memberships) {
for (Entry e : entity.getPermissions()) {
if (e.getWorld() != null && !e.getWorld().getName().equals("")) {
holder.setPermissionUnchecked(MigrationUtils.parseNode(e.getPermission(), true).setWorld(e.getWorld().getName()).build());
holder.setPermission(MigrationUtils.parseNode(e.getPermission(), true).setWorld(e.getWorld().getName()).build());
} else {
holder.setPermissionUnchecked(MigrationUtils.parseNode(e.getPermission(), true).build());
holder.setPermission(MigrationUtils.parseNode(e.getPermission(), true).build());
}
}
@@ -157,12 +157,12 @@ public class MigrationZPermissions extends SubCommand<Object> {
// entity.getMemberships() doesn't work for groups (always returns 0 records)
for (Inheritance inheritance : entity.getInheritancesAsChild()) {
if (!inheritance.getParent().getName().equals(holder.getObjectName())) {
holder.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(inheritance.getParent().getName())));
holder.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(inheritance.getParent().getName())));
}
}
} else {
for (Membership membership : memberships) {
holder.setPermissionUnchecked(NodeFactory.make("group." + MigrationUtils.standardizeName(membership.getGroup().getDisplayName())));
holder.setPermission(NodeFactory.make("group." + MigrationUtils.standardizeName(membership.getGroup().getDisplayName())));
}
}
@@ -171,9 +171,9 @@ public class MigrationZPermissions extends SubCommand<Object> {
String key = metadata.getName().toLowerCase();
if (key.equals("prefix") || key.equals("suffix")) {
holder.setPermissionUnchecked(NodeFactory.makeChatMetaNode(key.equals("prefix"), weight, metadata.getStringValue()).build());
holder.setPermission(NodeFactory.makeChatMetaNode(key.equals("prefix"), weight, metadata.getStringValue()).build());
} else {
holder.setPermissionUnchecked(NodeFactory.makeMetaNode(key, metadata.getStringValue()).build());
holder.setPermission(NodeFactory.makeMetaNode(key, metadata.getStringValue()).build());
}
}
}
@@ -81,7 +81,7 @@ public class VaultChatHook extends Chat {
metaNode.setWorld(finalWorld);
}
holder.setPermissionUnchecked(metaNode.build());
holder.setPermission(metaNode.build());
perms.save(holder);
});
}
@@ -111,7 +111,7 @@ public class VaultChatHook extends Chat {
chatMetaNode.setWorld(finalWorld);
}
holder.setPermissionUnchecked(chatMetaNode.build());
holder.setPermission(chatMetaNode.build());
perms.save(holder);
});
}
@@ -30,22 +30,24 @@ import me.lucko.luckperms.api.Node;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.caching.PermissionData;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.api.context.ImmutableContextSet;
import me.lucko.luckperms.bukkit.LPBukkitPlugin;
import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.core.DataMutateResult;
import me.lucko.luckperms.common.core.NodeFactory;
import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.PermissionHolder;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.utils.ExtractedContexts;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import me.lucko.luckperms.exceptions.ObjectLacksException;
import net.milkbowl.vault.permission.Permission;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* LuckPerms Vault Permission implementation
@@ -91,15 +93,16 @@ public class VaultPermissionHook extends Permission {
*/
private CompletableFuture<Void> add(String world, PermissionHolder holder, String permission) {
return CompletableFuture.runAsync(() -> {
try {
if (world != null && !world.equals("") && !world.equalsIgnoreCase("global")) {
holder.setPermission(NodeFactory.make(permission, true, getServer(), world));
} else {
holder.setPermission(NodeFactory.make(permission, true, getServer()));
}
DataMutateResult result;
if (world != null && !world.equals("") && !world.equalsIgnoreCase("global")) {
result = holder.setPermission(NodeFactory.make(permission, true, getServer(), world));
} else {
result = holder.setPermission(NodeFactory.make(permission, true, getServer()));
}
if (result.asBoolean()) {
save(holder);
} catch (ObjectAlreadyHasException ignored) {}
}
}, scheduler);
}
@@ -112,15 +115,16 @@ public class VaultPermissionHook extends Permission {
*/
private CompletableFuture<Void> remove(String world, PermissionHolder holder, String permission) {
return CompletableFuture.runAsync(() -> {
try {
if (world != null && !world.equals("") && !world.equalsIgnoreCase("global")) {
holder.unsetPermission(NodeFactory.make(permission, getServer(), world));
} else {
holder.unsetPermission(NodeFactory.make(permission, getServer()));
}
DataMutateResult result;
if (world != null && !world.equals("") && !world.equalsIgnoreCase("global")) {
result = holder.unsetPermission(NodeFactory.make(permission, getServer(), world));
} else {
result = holder.unsetPermission(NodeFactory.make(permission, getServer()));
}
if (result.asBoolean()) {
save(holder);
} catch (ObjectLacksException ignored) {}
}
}, scheduler);
}
@@ -256,15 +260,16 @@ public class VaultPermissionHook extends Permission {
String w = world;
scheduler.execute(() -> {
try {
if (w != null && !w.equals("") && !w.equalsIgnoreCase("global")) {
user.setInheritGroup(group, getServer(), w);
} else {
user.setInheritGroup(group, getServer());
}
DataMutateResult result;
if (w != null && !w.equals("") && !w.equalsIgnoreCase("global")) {
result = user.setInheritGroup(group, ImmutableContextSet.of("server", getServer(), "world", w));
} else {
result = user.setInheritGroup(group, ImmutableContextSet.singleton("server", getServer()));
}
if (result.asBoolean()) {
save(user);
} catch (ObjectAlreadyHasException ignored) {}
}
});
return true;
}
@@ -282,15 +287,16 @@ public class VaultPermissionHook extends Permission {
String w = world;
scheduler.execute(() -> {
try {
if (w != null && !w.equals("") && !w.equalsIgnoreCase("global")) {
user.unsetInheritGroup(group, getServer(), w);
} else {
user.unsetInheritGroup(group, getServer());
}
DataMutateResult result;
if (w != null && !w.equals("") && !w.equalsIgnoreCase("global")) {
result = user.unsetInheritGroup(group, ImmutableContextSet.of("server", getServer(), "world", w));
} else {
result = user.unsetInheritGroup(group, ImmutableContextSet.singleton("server", getServer()));
}
if (result.asBoolean()) {
save(user);
} catch (ObjectLacksException ignored) {}
}
});
return true;
}
@@ -367,7 +373,15 @@ public class VaultPermissionHook extends Permission {
}
if (isPgoCheckMemberOf()) {
if (!user.getLocalGroups(getServer(), world, isIncludeGlobal()).contains(group.toLowerCase())) {
String finalWorld = world;
List<String> localGroups = user.mergePermissionsToList().stream()
.filter(Node::isGroupNode)
.filter(n -> n.shouldApplyOnWorld(finalWorld, isIncludeGlobal(), true))
.filter(n -> n.shouldApplyOnServer(getServer(), isIncludeGlobal(), true))
.map(Node::getGroupName)
.collect(Collectors.toList());
if (!localGroups.contains(group.toLowerCase())) {
continue;
}
}