Class PermissionHolder

java.lang.Object
me.lucko.luckperms.common.model.PermissionHolder
Direct Known Subclasses:
Group, User

public abstract class PermissionHolder extends Object
Represents an object that can hold permissions, (a user or group)

Data is stored in NodeMaps. A holder has two of these, one for enduring nodes and one for transient nodes.

This class provides a number of methods to perform inheritance lookups. These lookup methods initially use Lists of nodes populated with the inheritance tree. Nodes at the start of this list have priority over nodes at the end. Nodes higher up the tree appear at the end of these lists. In order to remove duplicate elements, the lists are flattened. This is significantly faster than trying to prevent duplicates throughout the process of accumulation, and reduces the need for too much caching.

Cached state is avoided in these instances to cut down on memory footprint. The nodes are stored indexed to the contexts they apply in, so doing context specific querying should be fast. Caching would be ineffective here, due to the potentially vast amount of contexts being used by nodes, and the potential for very large inheritance trees.

  • Constructor Details

    • PermissionHolder

      protected PermissionHolder(LuckPermsPlugin plugin, String objectName)
      Creates a new instance
      Parameters:
      plugin - the plugin instance
  • Method Details

    • getPlugin

      public LuckPermsPlugin getPlugin()
    • getInheritanceComparator

      public Comparator<? super PermissionHolder> getInheritanceComparator()
    • getData

      public NodeMap getData(net.luckperms.api.model.data.DataType type)
    • normalData

      public RecordedNodeMap normalData()
    • transientData

      public NodeMap transientData()
    • getIdentifier

      public PermissionHolderIdentifier getIdentifier()
    • getFormattedDisplayName

      public abstract net.kyori.adventure.text.Component getFormattedDisplayName()
      Gets the formatted display name of this permission holder (for use in commands, etc)
      Returns:
      the holders formatted display name
    • getPlainDisplayName

      public abstract String getPlainDisplayName()
      Gets a display name for this permission holder, without any formatting.
      Returns:
      the display name
    • getQueryOptions

      public abstract net.luckperms.api.query.QueryOptions getQueryOptions()
      Gets the most appropriate query options available at the time for the holder.
      Returns:
      query options
    • getCachedData

      public abstract HolderCachedDataManager<?> getCachedData()
      Gets the holders cached data
      Returns:
      the holders cached data
    • getType

      public abstract HolderType getType()
      Returns the type of this PermissionHolder.
      Returns:
      this holders type
    • invalidateCache

      protected void invalidateCache()
    • loadNodesFromStorage

      public void loadNodesFromStorage(Iterable<? extends net.luckperms.api.node.Node> set)
    • setNodes

      public Difference<net.luckperms.api.node.Node> setNodes(net.luckperms.api.model.data.DataType type, Iterable<? extends net.luckperms.api.node.Node> set, boolean callEvent)
    • setNodes

      public Difference<net.luckperms.api.node.Node> setNodes(net.luckperms.api.model.data.DataType type, Difference<net.luckperms.api.node.Node> changes, boolean callEvent)
    • mergeNodes

      public void mergeNodes(net.luckperms.api.model.data.DataType type, Iterable<? extends net.luckperms.api.node.Node> set)
    • getOwnNodes

      public List<net.luckperms.api.node.Node> getOwnNodes(net.luckperms.api.query.QueryOptions queryOptions)
    • getOwnNodesSorted

      public SortedSet<net.luckperms.api.node.Node> getOwnNodesSorted(net.luckperms.api.query.QueryOptions queryOptions)
    • getOwnNodes

      public <T extends net.luckperms.api.node.Node> List<T> getOwnNodes(net.luckperms.api.node.NodeType<T> type, net.luckperms.api.query.QueryOptions queryOptions)
    • getOwnInheritanceNodes

      public List<net.luckperms.api.node.types.InheritanceNode> getOwnInheritanceNodes(net.luckperms.api.query.QueryOptions queryOptions)
    • resolveInheritedNodes

      public List<net.luckperms.api.node.Node> resolveInheritedNodes(net.luckperms.api.query.QueryOptions queryOptions)
    • resolveInheritedNodesSorted

      public SortedSet<net.luckperms.api.node.Node> resolveInheritedNodesSorted(net.luckperms.api.query.QueryOptions queryOptions)
    • resolveInheritedNodes

      public <T extends net.luckperms.api.node.Node> List<T> resolveInheritedNodes(net.luckperms.api.node.NodeType<T> type, net.luckperms.api.query.QueryOptions queryOptions)
    • resolveInheritanceTree

      public List<Group> resolveInheritanceTree(net.luckperms.api.query.QueryOptions queryOptions)
    • exportPermissions

      public <M extends Map<String, net.luckperms.api.node.Node>> M exportPermissions(IntFunction<M> mapFactory, net.luckperms.api.query.QueryOptions queryOptions, boolean convertToLowercase, boolean resolveShorthand)
    • accumulateMeta

      public MetaAccumulator accumulateMeta(net.luckperms.api.query.QueryOptions queryOptions)
    • accumulateMeta

      public MetaAccumulator accumulateMeta(MetaAccumulator accumulator, net.luckperms.api.query.QueryOptions queryOptions)
    • auditTemporaryNodes

      public boolean auditTemporaryNodes()
      Removes temporary permissions that have expired
      Returns:
      true if permissions had expired and were removed
    • hasNode

      public net.luckperms.api.util.Tristate hasNode(net.luckperms.api.model.data.DataType type, net.luckperms.api.node.Node node, net.luckperms.api.node.NodeEqualityPredicate equalityPredicate)
    • setNode

      public net.luckperms.api.model.data.DataMutateResult setNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, boolean callEvent)
    • setNode

      public net.luckperms.api.model.data.DataMutateResult.WithMergedNode setNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, net.luckperms.api.model.data.TemporaryNodeMergeStrategy mergeStrategy)
    • unsetNode

      public net.luckperms.api.model.data.DataMutateResult unsetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node)
    • unsetNode

      public net.luckperms.api.model.data.DataMutateResult.WithMergedNode unsetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, @Nullable Duration duration)
    • removeIf

      public boolean removeIf(net.luckperms.api.model.data.DataType dataType, @Nullable net.luckperms.api.context.ContextSet contextSet, Predicate<? super net.luckperms.api.node.Node> predicate, boolean giveDefault)
    • clearNodes

      public boolean clearNodes(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.context.ContextSet contextSet, boolean giveDefault)
    • getWeightResult

      public IntegerResult<net.luckperms.api.node.types.WeightNode> getWeightResult()
    • getWeight

      public OptionalInt getWeight()