Search in sources :

Example 26 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class HolderShowTracks method execute.

@Override
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, T holder, List<String> args, String label) {
    if (ArgumentPermissions.checkViewPerms(plugin, sender, getPermission().get(), holder)) {
        Message.COMMAND_NO_PERMISSION.send(sender);
        return CommandResult.NO_PERMISSION;
    }
    try {
        plugin.getStorage().loadAllTracks().get();
    } catch (Exception e) {
        e.printStackTrace();
        Message.TRACKS_LOAD_ERROR.send(sender);
        return CommandResult.LOADING_ERROR;
    }
    List<Map.Entry<Track, String>> lines = new ArrayList<>();
    if (holder.getType().isUser()) {
        // if the holder is a user, we want to query parent groups for tracks
        Set<Node> nodes = holder.getEnduringNodes().values().stream().filter(Node::isGroupNode).filter(Node::getValuePrimitive).filter(Node::isPermanent).collect(Collectors.toSet());
        for (Node node : nodes) {
            String groupName = node.getGroupName();
            List<Track> tracks = plugin.getTrackManager().getAll().values().stream().filter(t -> t.containsGroup(groupName)).collect(Collectors.toList());
            for (Track t : tracks) {
                lines.add(Maps.immutableEntry(t, MessageUtils.getAppendableNodeContextString(node) + "\n" + MessageUtils.listToArrowSep(t.getGroups(), groupName)));
            }
        }
    } else {
        // otherwise, just lookup for the actual group
        String groupName = ((Group) holder).getName();
        List<Track> tracks = plugin.getTrackManager().getAll().values().stream().filter(t -> t.containsGroup(groupName)).collect(Collectors.toList());
        for (Track t : tracks) {
            lines.add(Maps.immutableEntry(t, MessageUtils.listToArrowSep(t.getGroups(), groupName)));
        }
    }
    if (lines.isEmpty()) {
        Message.LIST_TRACKS_EMPTY.send(sender, holder.getFriendlyName());
        return CommandResult.SUCCESS;
    }
    Message.LIST_TRACKS.send(sender, holder.getFriendlyName());
    for (Map.Entry<Track, String> line : lines) {
        Message.LIST_TRACKS_ENTRY.send(sender, line.getKey().getName(), line.getValue());
    }
    return CommandResult.SUCCESS;
}
Also used : PermissionHolder(me.lucko.luckperms.common.model.PermissionHolder) SubCommand(me.lucko.luckperms.common.command.abstraction.SubCommand) MessageUtils(me.lucko.luckperms.common.command.utils.MessageUtils) LocaleManager(me.lucko.luckperms.common.locale.LocaleManager) Set(java.util.Set) Sender(me.lucko.luckperms.common.sender.Sender) Maps(com.google.common.collect.Maps) Collectors(java.util.stream.Collectors) CommandResult(me.lucko.luckperms.common.command.CommandResult) ArrayList(java.util.ArrayList) CommandPermission(me.lucko.luckperms.common.command.access.CommandPermission) CommandSpec(me.lucko.luckperms.common.locale.command.CommandSpec) Track(me.lucko.luckperms.common.model.Track) List(java.util.List) Map(java.util.Map) Message(me.lucko.luckperms.common.locale.message.Message) Group(me.lucko.luckperms.common.model.Group) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) Node(me.lucko.luckperms.api.Node) ArgumentPermissions(me.lucko.luckperms.common.command.access.ArgumentPermissions) Predicates(me.lucko.luckperms.common.utils.Predicates) Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) ArrayList(java.util.ArrayList) Map(java.util.Map) Track(me.lucko.luckperms.common.model.Track)

Example 27 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class ParentInfo method makeFancy.

private static Consumer<BuildableComponent.Builder<?, ?>> makeFancy(PermissionHolder holder, String label, Node node) {
    HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(TextUtils.joinNewline("&3> &f" + node.getGroupName(), " ", "&7Click to remove this parent from " + holder.getFriendlyName()), CommandManager.AMPERSAND_CHAR));
    String command = "/" + label + " " + NodeFactory.nodeAsCommand(node, holder.getType().isGroup() ? holder.getObjectName() : holder.getFriendlyName(), holder.getType(), false);
    ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
    return component -> {
        component.hoverEvent(hoverEvent);
        component.clickEvent(clickEvent);
    };
}
Also used : NodeWithContextComparator(me.lucko.luckperms.common.node.NodeWithContextComparator) TextUtils(me.lucko.luckperms.common.utils.TextUtils) LocaleManager(me.lucko.luckperms.common.locale.LocaleManager) HoverEvent(net.kyori.text.event.HoverEvent) ArgumentParser(me.lucko.luckperms.common.command.utils.ArgumentParser) ArrayList(java.util.ArrayList) DateUtil(me.lucko.luckperms.common.utils.DateUtil) CommandSpec(me.lucko.luckperms.common.locale.command.CommandSpec) ClickEvent(net.kyori.text.event.ClickEvent) Message(me.lucko.luckperms.common.locale.message.Message) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) SharedSubCommand(me.lucko.luckperms.common.command.abstraction.SharedSubCommand) CollationKeyCache(me.lucko.luckperms.common.utils.CollationKeyCache) LocalizedNode(me.lucko.luckperms.api.LocalizedNode) CommandManager(me.lucko.luckperms.common.command.CommandManager) SortType(me.lucko.luckperms.common.command.utils.SortType) PermissionHolder(me.lucko.luckperms.common.model.PermissionHolder) MessageUtils(me.lucko.luckperms.common.command.utils.MessageUtils) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) Sender(me.lucko.luckperms.common.sender.Sender) Iterators(me.lucko.luckperms.common.utils.Iterators) TextComponent(net.kyori.text.TextComponent) CommandResult(me.lucko.luckperms.common.command.CommandResult) Consumer(java.util.function.Consumer) CommandPermission(me.lucko.luckperms.common.command.access.CommandPermission) List(java.util.List) SortMode(me.lucko.luckperms.common.command.utils.SortMode) BuildableComponent(net.kyori.text.BuildableComponent) Node(me.lucko.luckperms.api.Node) ArgumentPermissions(me.lucko.luckperms.common.command.access.ArgumentPermissions) Comparator(java.util.Comparator) Collections(java.util.Collections) Predicates(me.lucko.luckperms.common.utils.Predicates) HoverEvent(net.kyori.text.event.HoverEvent) ClickEvent(net.kyori.text.event.ClickEvent)

Example 28 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class AssignmentExpression method parse.

public boolean parse(PermissionHolder holder, Tristate tristate) throws IllegalArgumentException {
    ScriptEngine engine = Scripting.getScriptEngine();
    if (engine == null) {
        throw new NullPointerException("script engine");
    }
    Predicate<Node> checker = node -> holder.hasPermission(node, StandardNodeEquality.IGNORE_VALUE_OR_IF_TEMPORARY) == tristate;
    String exp = this.expression.stream().map(t -> t.forExpression(checker)).collect(Collectors.joining()).replace("&", "&&").replace("|", "||");
    try {
        String result = engine.eval(exp).toString();
        if (!result.equals("true") && !result.equals("false")) {
            throw new IllegalArgumentException();
        }
        return Boolean.parseBoolean(result);
    } catch (Throwable t) {
        throw new IllegalArgumentException(exp, t);
    }
}
Also used : LegacyNodeFactory(me.lucko.luckperms.common.node.LegacyNodeFactory) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) Scripting(me.lucko.luckperms.common.utils.Scripting) Predicate(java.util.function.Predicate) PermissionHolder(me.lucko.luckperms.common.model.PermissionHolder) Tristate(me.lucko.luckperms.api.Tristate) ScriptEngine(javax.script.ScriptEngine) Node(me.lucko.luckperms.api.Node) Collectors(java.util.stream.Collectors) StandardNodeEquality(me.lucko.luckperms.api.StandardNodeEquality) Node(me.lucko.luckperms.api.Node) ScriptEngine(javax.script.ScriptEngine)

Example 29 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class ConfigurateDao method writeNodes.

private static void writeNodes(ConfigurationNode to, Set<NodeModel> nodes) {
    ConfigurationNode permissionsSection = SimpleConfigurationNode.root();
    ConfigurationNode parentsSection = SimpleConfigurationNode.root();
    ConfigurationNode prefixesSection = SimpleConfigurationNode.root();
    ConfigurationNode suffixesSection = SimpleConfigurationNode.root();
    ConfigurationNode metaSection = SimpleConfigurationNode.root();
    for (NodeModel node : nodes) {
        Node n = node.toNode();
        // just add a string to the list.
        if (isPlain(node)) {
            if (n.isGroupNode()) {
                parentsSection.getAppendedNode().setValue(n.getGroupName());
                continue;
            }
            if (!MetaType.ANY.matches(n)) {
                permissionsSection.getAppendedNode().setValue(node.getPermission());
                continue;
            }
        }
        ChatMetaType chatMetaType = ChatMetaType.ofNode(n).orElse(null);
        if (chatMetaType != null && n.getValuePrimitive()) {
            // handle prefixes / suffixes
            Map.Entry<Integer, String> entry = chatMetaType.getEntry(n);
            ConfigurationNode attributes = SimpleConfigurationNode.root();
            attributes.getNode("priority").setValue(entry.getKey());
            writeAttributesTo(attributes, node, false);
            ConfigurationNode appended = SimpleConfigurationNode.root();
            appended.getNode(entry.getValue()).setValue(attributes);
            switch(chatMetaType) {
                case PREFIX:
                    prefixesSection.getAppendedNode().setValue(appended);
                    break;
                case SUFFIX:
                    suffixesSection.getAppendedNode().setValue(appended);
                    break;
                default:
                    throw new AssertionError();
            }
        } else if (n.isMeta() && n.getValuePrimitive()) {
            // handle meta nodes
            Map.Entry<String, String> meta = n.getMeta();
            ConfigurationNode attributes = SimpleConfigurationNode.root();
            attributes.getNode("value").setValue(meta.getValue());
            writeAttributesTo(attributes, node, false);
            ConfigurationNode appended = SimpleConfigurationNode.root();
            appended.getNode(meta.getKey()).setValue(attributes);
            metaSection.getAppendedNode().setValue(appended);
        } else if (n.isGroupNode() && n.getValuePrimitive()) {
            // handle group nodes
            ConfigurationNode attributes = SimpleConfigurationNode.root();
            writeAttributesTo(attributes, node, false);
            ConfigurationNode appended = SimpleConfigurationNode.root();
            appended.getNode(n.getGroupName()).setValue(attributes);
            parentsSection.getAppendedNode().setValue(appended);
        } else {
            // handle regular permissions and negated meta+prefixes+suffixes
            ConfigurationNode attributes = SimpleConfigurationNode.root();
            writeAttributesTo(attributes, node, true);
            ConfigurationNode appended = SimpleConfigurationNode.root();
            appended.getNode(n.getPermission()).setValue(attributes);
            permissionsSection.getAppendedNode().setValue(appended);
        }
    }
    if (permissionsSection.hasListChildren()) {
        to.getNode("permissions").setValue(permissionsSection);
    }
    if (parentsSection.hasListChildren()) {
        to.getNode("parents").setValue(parentsSection);
    }
    if (prefixesSection.hasListChildren()) {
        to.getNode("prefixes").setValue(prefixesSection);
    }
    if (suffixesSection.hasListChildren()) {
        to.getNode("suffixes").setValue(suffixesSection);
    }
    if (metaSection.hasListChildren()) {
        to.getNode("meta").setValue(metaSection);
    }
}
Also used : NodeModel(me.lucko.luckperms.common.node.NodeModel) LogEntry(me.lucko.luckperms.api.LogEntry) ConfigurationNode(ninja.leaping.configurate.ConfigurationNode) SimpleConfigurationNode(ninja.leaping.configurate.SimpleConfigurationNode) ConfigurationNode(ninja.leaping.configurate.ConfigurationNode) SimpleConfigurationNode(ninja.leaping.configurate.SimpleConfigurationNode) Node(me.lucko.luckperms.api.Node) ChatMetaType(me.lucko.luckperms.api.ChatMetaType) Map(java.util.Map)

Example 30 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class MongoDao method createAndLoadGroup.

@Override
public Group createAndLoadGroup(String name) {
    Group group = this.plugin.getGroupManager().getOrMake(name);
    group.getIoLock().lock();
    try {
        MongoCollection<Document> c = this.database.getCollection(this.prefix + "groups");
        try (MongoCursor<Document> cursor = c.find(new Document("_id", group.getName())).iterator()) {
            if (cursor.hasNext()) {
                Document d = cursor.next();
                Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
                group.setEnduringNodes(nodes);
            } else {
                c.insertOne(groupToDoc(group));
            }
        }
    } finally {
        group.getIoLock().unlock();
    }
    group.getRefreshBuffer().requestDirectly();
    return group;
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Document(org.bson.Document)

Aggregations

Node (me.lucko.luckperms.api.Node)56 LocalizedNode (me.lucko.luckperms.api.LocalizedNode)15 Group (me.lucko.luckperms.common.model.Group)15 User (me.lucko.luckperms.common.model.User)13 Map (java.util.Map)12 ImmutableLocalizedNode (me.lucko.luckperms.common.node.ImmutableLocalizedNode)12 List (java.util.List)11 NodeFactory (me.lucko.luckperms.common.node.NodeFactory)10 Message (me.lucko.luckperms.common.locale.message.Message)9 LuckPermsPlugin (me.lucko.luckperms.common.plugin.LuckPermsPlugin)9 Sender (me.lucko.luckperms.common.sender.Sender)9 Collectors (java.util.stream.Collectors)8 MutableContextSet (me.lucko.luckperms.api.context.MutableContextSet)8 CommandResult (me.lucko.luckperms.common.command.CommandResult)8 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)8 LocaleManager (me.lucko.luckperms.common.locale.LocaleManager)8 CommandSpec (me.lucko.luckperms.common.locale.command.CommandSpec)8 Predicates (me.lucko.luckperms.common.utils.Predicates)8 ArrayList (java.util.ArrayList)7 HashMap (java.util.HashMap)7