mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-24 11:38:40 +01:00
Fix meta serialization. Resolves #41
This commit is contained in:
parent
59c7efccb2
commit
696cd235fd
@ -28,6 +28,7 @@ import me.lucko.luckperms.api.Node;
|
|||||||
import me.lucko.luckperms.api.caching.MetaData;
|
import me.lucko.luckperms.api.caching.MetaData;
|
||||||
import me.lucko.luckperms.api.context.ContextSet;
|
import me.lucko.luckperms.api.context.ContextSet;
|
||||||
import me.lucko.luckperms.common.core.NodeBuilder;
|
import me.lucko.luckperms.common.core.NodeBuilder;
|
||||||
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.PermissionHolder;
|
import me.lucko.luckperms.common.core.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.groups.Group;
|
import me.lucko.luckperms.common.groups.Group;
|
||||||
import me.lucko.luckperms.common.users.User;
|
import me.lucko.luckperms.common.users.User;
|
||||||
@ -83,11 +84,8 @@ public class VaultChatHook extends Chat {
|
|||||||
perms.log("Setting meta: '" + node + "' for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Setting meta: '" + node + "' for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
perms.getScheduler().scheduleTask(() -> {
|
perms.getScheduler().scheduleTask(() -> {
|
||||||
String k = escapeCharacters(node);
|
|
||||||
String v = escapeCharacters(value);
|
|
||||||
|
|
||||||
List<Node> toRemove = holder.getNodes().stream()
|
List<Node> toRemove = holder.getNodes().stream()
|
||||||
.filter(n -> n.isMeta() && n.getMeta().getKey().equals(k))
|
.filter(n -> n.isMeta() && n.getMeta().getKey().equals(node))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
toRemove.forEach(n -> {
|
toRemove.forEach(n -> {
|
||||||
@ -96,7 +94,7 @@ public class VaultChatHook extends Chat {
|
|||||||
} catch (ObjectLacksException ignored) {}
|
} catch (ObjectLacksException ignored) {}
|
||||||
});
|
});
|
||||||
|
|
||||||
Node.Builder metaNode = new NodeBuilder("meta." + k + "." + v).setValue(true);
|
Node.Builder metaNode = NodeFactory.makeMetaNode(node, value).setValue(true);
|
||||||
if (!perms.getServer().equalsIgnoreCase("global")) {
|
if (!perms.getServer().equalsIgnoreCase("global")) {
|
||||||
metaNode.setServer(perms.getServer());
|
metaNode.setServer(perms.getServer());
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.common.commands.generic.meta;
|
package me.lucko.luckperms.common.commands.generic.meta;
|
||||||
|
|
||||||
import me.lucko.luckperms.api.MetaUtils;
|
|
||||||
import me.lucko.luckperms.api.Node;
|
import me.lucko.luckperms.api.Node;
|
||||||
import me.lucko.luckperms.common.LuckPermsPlugin;
|
import me.lucko.luckperms.common.LuckPermsPlugin;
|
||||||
import me.lucko.luckperms.common.commands.Arg;
|
import me.lucko.luckperms.common.commands.Arg;
|
||||||
@ -34,7 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
|
|||||||
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
||||||
import me.lucko.luckperms.common.constants.Message;
|
import me.lucko.luckperms.common.constants.Message;
|
||||||
import me.lucko.luckperms.common.constants.Permission;
|
import me.lucko.luckperms.common.constants.Permission;
|
||||||
import me.lucko.luckperms.common.core.NodeBuilder;
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.PermissionHolder;
|
import me.lucko.luckperms.common.core.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.data.LogEntry;
|
import me.lucko.luckperms.common.data.LogEntry;
|
||||||
import me.lucko.luckperms.common.utils.Predicates;
|
import me.lucko.luckperms.common.utils.Predicates;
|
||||||
@ -57,14 +56,13 @@ public class MetaSet extends SharedSubCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
||||||
String key = MetaUtils.escapeCharacters(args.get(0));
|
String key = args.get(0);
|
||||||
String value = MetaUtils.escapeCharacters(args.get(1));
|
String value = args.get(1);
|
||||||
|
|
||||||
String node = "meta." + key + "." + value;
|
|
||||||
String server = ArgumentUtils.handleServer(2, args);
|
String server = ArgumentUtils.handleServer(2, args);
|
||||||
String world = ArgumentUtils.handleWorld(3, args);
|
String world = ArgumentUtils.handleWorld(3, args);
|
||||||
|
|
||||||
Node n = new NodeBuilder(node).setServer(server).setWorld(world).build();
|
Node n = NodeFactory.makeMetaNode(key, value).setServer(server).setWorld(world).build();
|
||||||
|
|
||||||
if (holder.hasPermission(n).asBoolean()) {
|
if (holder.hasPermission(n).asBoolean()) {
|
||||||
Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
|
Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.common.commands.generic.meta;
|
package me.lucko.luckperms.common.commands.generic.meta;
|
||||||
|
|
||||||
import me.lucko.luckperms.api.MetaUtils;
|
|
||||||
import me.lucko.luckperms.api.Node;
|
import me.lucko.luckperms.api.Node;
|
||||||
import me.lucko.luckperms.common.LuckPermsPlugin;
|
import me.lucko.luckperms.common.LuckPermsPlugin;
|
||||||
import me.lucko.luckperms.common.commands.Arg;
|
import me.lucko.luckperms.common.commands.Arg;
|
||||||
@ -34,7 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
|
|||||||
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
||||||
import me.lucko.luckperms.common.constants.Message;
|
import me.lucko.luckperms.common.constants.Message;
|
||||||
import me.lucko.luckperms.common.constants.Permission;
|
import me.lucko.luckperms.common.constants.Permission;
|
||||||
import me.lucko.luckperms.common.core.NodeBuilder;
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.PermissionHolder;
|
import me.lucko.luckperms.common.core.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.data.LogEntry;
|
import me.lucko.luckperms.common.data.LogEntry;
|
||||||
import me.lucko.luckperms.common.utils.DateUtil;
|
import me.lucko.luckperms.common.utils.DateUtil;
|
||||||
@ -59,14 +58,13 @@ public class MetaSetTemp extends SharedSubCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
||||||
String key = MetaUtils.escapeCharacters(args.get(0));
|
String key = args.get(0);
|
||||||
String value = MetaUtils.escapeCharacters(args.get(1));
|
String value = args.get(1);
|
||||||
long duration = ArgumentUtils.handleDuration(2, args);
|
long duration = ArgumentUtils.handleDuration(2, args);
|
||||||
String node = "meta." + key + "." + value;
|
|
||||||
String server = ArgumentUtils.handleServer(3, args);
|
String server = ArgumentUtils.handleServer(3, args);
|
||||||
String world = ArgumentUtils.handleWorld(4, args);
|
String world = ArgumentUtils.handleWorld(4, args);
|
||||||
|
|
||||||
Node n = new NodeBuilder(node).setServer(server).setWorld(world).setExpiry(duration).build();
|
Node n = NodeFactory.makeMetaNode(key, value).setServer(server).setWorld(world).setExpiry(duration).build();
|
||||||
|
|
||||||
if (holder.hasPermission(n).asBoolean()) {
|
if (holder.hasPermission(n).asBoolean()) {
|
||||||
Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
|
Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.common.commands.generic.meta;
|
package me.lucko.luckperms.common.commands.generic.meta;
|
||||||
|
|
||||||
import me.lucko.luckperms.api.MetaUtils;
|
|
||||||
import me.lucko.luckperms.common.LuckPermsPlugin;
|
import me.lucko.luckperms.common.LuckPermsPlugin;
|
||||||
import me.lucko.luckperms.common.commands.Arg;
|
import me.lucko.luckperms.common.commands.Arg;
|
||||||
import me.lucko.luckperms.common.commands.CommandException;
|
import me.lucko.luckperms.common.commands.CommandException;
|
||||||
@ -54,7 +53,7 @@ public class MetaUnset extends SharedSubCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
||||||
String key = MetaUtils.escapeCharacters(args.get(0));
|
String key = args.get(0);
|
||||||
String server = ArgumentUtils.handleServer(1, args);
|
String server = ArgumentUtils.handleServer(1, args);
|
||||||
String world = ArgumentUtils.handleWorld(2, args);
|
String world = ArgumentUtils.handleWorld(2, args);
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.common.commands.generic.meta;
|
package me.lucko.luckperms.common.commands.generic.meta;
|
||||||
|
|
||||||
import me.lucko.luckperms.api.MetaUtils;
|
|
||||||
import me.lucko.luckperms.common.LuckPermsPlugin;
|
import me.lucko.luckperms.common.LuckPermsPlugin;
|
||||||
import me.lucko.luckperms.common.commands.Arg;
|
import me.lucko.luckperms.common.commands.Arg;
|
||||||
import me.lucko.luckperms.common.commands.CommandException;
|
import me.lucko.luckperms.common.commands.CommandException;
|
||||||
@ -54,7 +53,7 @@ public class MetaUnsetTemp extends SharedSubCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, List<String> args) throws CommandException {
|
||||||
String key = MetaUtils.escapeCharacters(args.get(0));
|
String key = args.get(0);
|
||||||
String server = ArgumentUtils.handleServer(1, args);
|
String server = ArgumentUtils.handleServer(1, args);
|
||||||
String world = ArgumentUtils.handleWorld(2, args);
|
String world = ArgumentUtils.handleWorld(2, args);
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import com.google.common.collect.Maps;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
import me.lucko.luckperms.api.MetaUtils;
|
||||||
import me.lucko.luckperms.api.Tristate;
|
import me.lucko.luckperms.api.Tristate;
|
||||||
import me.lucko.luckperms.api.context.ContextSet;
|
import me.lucko.luckperms.api.context.ContextSet;
|
||||||
import me.lucko.luckperms.common.constants.Patterns;
|
import me.lucko.luckperms.common.constants.Patterns;
|
||||||
@ -132,21 +133,21 @@ public class Node implements me.lucko.luckperms.api.Node {
|
|||||||
isMeta = META_PATTERN.matcher(permission).matches();
|
isMeta = META_PATTERN.matcher(permission).matches();
|
||||||
if (isMeta) {
|
if (isMeta) {
|
||||||
List<String> metaPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("meta.".length()));
|
List<String> metaPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("meta.".length()));
|
||||||
meta = Maps.immutableEntry(metaPart.get(0), metaPart.get(1));
|
meta = Maps.immutableEntry(MetaUtils.unescapeCharacters(metaPart.get(0)), MetaUtils.unescapeCharacters(metaPart.get(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
isPrefix = PREFIX_PATTERN.matcher(permission).matches();
|
isPrefix = PREFIX_PATTERN.matcher(permission).matches();
|
||||||
if (isPrefix) {
|
if (isPrefix) {
|
||||||
List<String> prefixPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("prefix.".length()));
|
List<String> prefixPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("prefix.".length()));
|
||||||
Integer i = Integer.parseInt(prefixPart.get(0));
|
Integer i = Integer.parseInt(prefixPart.get(0));
|
||||||
prefix = Maps.immutableEntry(i, prefixPart.get(1));
|
prefix = Maps.immutableEntry(i, MetaUtils.unescapeCharacters(prefixPart.get(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
isSuffix = SUFFIX_PATTERN.matcher(permission).matches();
|
isSuffix = SUFFIX_PATTERN.matcher(permission).matches();
|
||||||
if (isSuffix) {
|
if (isSuffix) {
|
||||||
List<String> suffixPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("suffix.".length()));
|
List<String> suffixPart = Splitter.on('.').limit(2).splitToList(getPermission().substring("suffix.".length()));
|
||||||
Integer i = Integer.parseInt(suffixPart.get(0));
|
Integer i = Integer.parseInt(suffixPart.get(0));
|
||||||
suffix = Maps.immutableEntry(i, suffixPart.get(1));
|
suffix = Maps.immutableEntry(i, MetaUtils.unescapeCharacters(suffixPart.get(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
resolvedShorthand = calculateShorthand();
|
resolvedShorthand = calculateShorthand();
|
||||||
|
@ -27,6 +27,7 @@ import com.google.common.cache.CacheBuilder;
|
|||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
|
import me.lucko.luckperms.api.MetaUtils;
|
||||||
import me.lucko.luckperms.api.Node;
|
import me.lucko.luckperms.api.Node;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -101,4 +102,16 @@ public class NodeFactory {
|
|||||||
public static Node.Builder builderFromExisting(Node other) {
|
public static Node.Builder builderFromExisting(Node other) {
|
||||||
return new NodeBuilder(other);
|
return new NodeBuilder(other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static NodeBuilder makeMetaNode(String key, String value) {
|
||||||
|
return new NodeBuilder("meta." + MetaUtils.escapeCharacters(key) + "." + MetaUtils.escapeCharacters(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static NodeBuilder makePrefixNode(int priority, String prefix) {
|
||||||
|
return new NodeBuilder("prefix." + priority + "." + MetaUtils.escapeCharacters(prefix));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static NodeBuilder makeSuffixNode(int priority, String suffix) {
|
||||||
|
return new NodeBuilder("suffix." + priority + "." + MetaUtils.escapeCharacters(suffix));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import lombok.experimental.UtilityClass;
|
|||||||
import me.lucko.luckperms.api.context.ContextSet;
|
import me.lucko.luckperms.api.context.ContextSet;
|
||||||
import me.lucko.luckperms.api.context.MutableContextSet;
|
import me.lucko.luckperms.api.context.MutableContextSet;
|
||||||
import me.lucko.luckperms.common.core.NodeBuilder;
|
import me.lucko.luckperms.common.core.NodeBuilder;
|
||||||
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.PermissionHolder;
|
import me.lucko.luckperms.common.core.PermissionHolder;
|
||||||
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
|
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
|
||||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||||
@ -72,13 +73,17 @@ public class MigrationUtils {
|
|||||||
contexts.removeAll("world");
|
contexts.removeAll("world");
|
||||||
|
|
||||||
for (Map.Entry<String, String> opt : e.getValue().entrySet()) {
|
for (Map.Entry<String, String> opt : e.getValue().entrySet()) {
|
||||||
if (opt.getKey().equalsIgnoreCase("prefix") || opt.getKey().equalsIgnoreCase("suffix")) {
|
if (opt.getKey().equalsIgnoreCase("prefix")) {
|
||||||
try {
|
try {
|
||||||
holder.setPermission(new NodeBuilder(opt.getKey().toLowerCase() + ".100." + opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
|
holder.setPermission(NodeFactory.makePrefixNode(100, opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
|
||||||
|
} catch (ObjectAlreadyHasException ignored) {}
|
||||||
|
} else if (opt.getKey().equalsIgnoreCase("suffix")) {
|
||||||
|
try {
|
||||||
|
holder.setPermission(NodeFactory.makeSuffixNode(100, opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
|
||||||
} catch (ObjectAlreadyHasException ignored) {}
|
} catch (ObjectAlreadyHasException ignored) {}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
holder.setPermission(new NodeBuilder("meta." + opt.getKey() + "." + opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
|
holder.setPermission(NodeFactory.makeMetaNode(opt.getKey(), opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
|
||||||
} catch (ObjectAlreadyHasException ignored) {}
|
} catch (ObjectAlreadyHasException ignored) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import lombok.NonNull;
|
|||||||
import me.lucko.luckperms.api.Node;
|
import me.lucko.luckperms.api.Node;
|
||||||
import me.lucko.luckperms.api.context.ContextSet;
|
import me.lucko.luckperms.api.context.ContextSet;
|
||||||
import me.lucko.luckperms.common.core.NodeBuilder;
|
import me.lucko.luckperms.common.core.NodeBuilder;
|
||||||
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.PermissionHolder;
|
import me.lucko.luckperms.common.core.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.groups.Group;
|
import me.lucko.luckperms.common.groups.Group;
|
||||||
import me.lucko.luckperms.common.users.User;
|
import me.lucko.luckperms.common.users.User;
|
||||||
@ -46,8 +47,6 @@ import org.spongepowered.api.util.Tristate;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static me.lucko.luckperms.api.MetaUtils.escapeCharacters;
|
|
||||||
|
|
||||||
@SuppressWarnings({"OptionalGetWithoutIsPresent", "unused"})
|
@SuppressWarnings({"OptionalGetWithoutIsPresent", "unused"})
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class LuckPermsSubjectData implements SubjectData {
|
public class LuckPermsSubjectData implements SubjectData {
|
||||||
@ -364,16 +363,15 @@ public class LuckPermsSubjectData implements SubjectData {
|
|||||||
public Map<Set<Context>, Map<String, String>> getAllOptions() {
|
public Map<Set<Context>, Map<String, String>> getAllOptions() {
|
||||||
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_GET_OPTIONS)) {
|
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_GET_OPTIONS)) {
|
||||||
Map<Set<Context>, Map<String, String>> options = new HashMap<>();
|
Map<Set<Context>, Map<String, String>> options = new HashMap<>();
|
||||||
|
Map<Set<Context>, Integer> minPrefixPriority = new HashMap<>();
|
||||||
int prefixPriority = Integer.MIN_VALUE;
|
Map<Set<Context>, Integer> minSuffixPriority = new HashMap<>();
|
||||||
int suffixPriority = Integer.MIN_VALUE;
|
|
||||||
|
|
||||||
for (Node n : enduring ? holder.getNodes() : holder.getTransientNodes()) {
|
for (Node n : enduring ? holder.getNodes() : holder.getTransientNodes()) {
|
||||||
if (!n.getValue()) {
|
if (!n.getValue()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!n.isMeta() || !n.isPrefix() || n.isSuffix()) {
|
if (!n.isMeta() && !n.isPrefix() && !n.isSuffix()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,22 +387,24 @@ public class LuckPermsSubjectData implements SubjectData {
|
|||||||
|
|
||||||
if (!options.containsKey(contexts)) {
|
if (!options.containsKey(contexts)) {
|
||||||
options.put(contexts, new HashMap<>());
|
options.put(contexts, new HashMap<>());
|
||||||
|
minPrefixPriority.put(contexts, Integer.MIN_VALUE);
|
||||||
|
minSuffixPriority.put(contexts, Integer.MIN_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n.isPrefix()) {
|
if (n.isPrefix()) {
|
||||||
Map.Entry<Integer, String> value = n.getPrefix();
|
Map.Entry<Integer, String> value = n.getPrefix();
|
||||||
if (value.getKey() > prefixPriority) {
|
if (value.getKey() > minPrefixPriority.get(contexts)) {
|
||||||
options.get(contexts).put("prefix", value.getValue());
|
options.get(contexts).put("prefix", value.getValue());
|
||||||
prefixPriority = value.getKey();
|
minPrefixPriority.put(contexts, value.getKey());
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n.isSuffix()) {
|
if (n.isSuffix()) {
|
||||||
Map.Entry<Integer, String> value = n.getSuffix();
|
Map.Entry<Integer, String> value = n.getSuffix();
|
||||||
if (value.getKey() > suffixPriority) {
|
if (value.getKey() > minSuffixPriority.get(contexts)) {
|
||||||
options.get(contexts).put("suffix", value.getValue());
|
options.get(contexts).put("suffix", value.getValue());
|
||||||
suffixPriority = value.getKey();
|
minSuffixPriority.put(contexts, value.getKey());
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -433,20 +433,21 @@ public class LuckPermsSubjectData implements SubjectData {
|
|||||||
try (Timing i = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_SET_OPTION)) {
|
try (Timing i = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_SET_OPTION)) {
|
||||||
ContextSet context = LuckPermsService.convertContexts(set);
|
ContextSet context = LuckPermsService.convertContexts(set);
|
||||||
|
|
||||||
key = escapeCharacters(key);
|
List<Node> toRemove = holder.getNodes().stream()
|
||||||
value = escapeCharacters(value);
|
.filter(n -> n.isMeta() && n.getMeta().getKey().equals(key))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
toRemove.forEach(n -> {
|
||||||
|
try {
|
||||||
|
holder.unsetPermission(n);
|
||||||
|
} catch (ObjectLacksException ignored) {}
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (enduring) {
|
if (enduring) {
|
||||||
holder.setPermission(new NodeBuilder("meta." + key + "." + value)
|
holder.setPermission(NodeFactory.makeMetaNode(key, value).withExtraContext(context).build());
|
||||||
.withExtraContext(context)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
holder.setTransientPermission(new NodeBuilder("meta." + key + "." + value)
|
holder.setTransientPermission(NodeFactory.makeMetaNode(key, value).withExtraContext(context).build());
|
||||||
.withExtraContext(context)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} catch (ObjectAlreadyHasException ignored) {}
|
} catch (ObjectAlreadyHasException ignored) {}
|
||||||
objectSave(holder);
|
objectSave(holder);
|
||||||
|
@ -135,6 +135,8 @@ public class LuckPermsUserSubject extends LuckPermsSubject {
|
|||||||
@Override
|
@Override
|
||||||
public Optional<String> getOption(ContextSet contexts, String s) {
|
public Optional<String> getOption(ContextSet contexts, String s) {
|
||||||
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.USER_GET_OPTION)) {
|
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.USER_GET_OPTION)) {
|
||||||
|
service.getPlugin().getLog().warn("#getOption: " + contexts + " - " + s);
|
||||||
|
|
||||||
if (hasData()) {
|
if (hasData()) {
|
||||||
MetaData data = user.getUserData().getMetaData(service.calculateContexts(contexts));
|
MetaData data = user.getUserData().getMetaData(service.calculateContexts(contexts));
|
||||||
if (s.equalsIgnoreCase("prefix")) {
|
if (s.equalsIgnoreCase("prefix")) {
|
||||||
@ -149,6 +151,7 @@ public class LuckPermsUserSubject extends LuckPermsSubject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service.getPlugin().getLog().info(data.getMeta().toString());
|
||||||
if (data.getMeta().containsKey(s)) {
|
if (data.getMeta().containsKey(s)) {
|
||||||
return Optional.of(data.getMeta().get(s));
|
return Optional.of(data.getMeta().get(s));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user