Class PermissionHolder
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 Summary
ConstructorsModifierConstructorDescriptionprotectedPermissionHolder(LuckPermsPlugin plugin, String objectName) Creates a new instance -
Method Summary
Modifier and TypeMethodDescriptionaccumulateMeta(MetaAccumulator accumulator, net.luckperms.api.query.QueryOptions queryOptions) accumulateMeta(net.luckperms.api.query.QueryOptions queryOptions) booleanRemoves temporary permissions that have expiredbooleanclearNodes(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.context.ContextSet contextSet, boolean giveDefault) exportPermissions(IntFunction<M> mapFactory, net.luckperms.api.query.QueryOptions queryOptions, boolean convertToLowercase, boolean resolveShorthand) abstract HolderCachedDataManager<?> Gets the holders cached datagetData(net.luckperms.api.model.data.DataType type) abstract net.kyori.adventure.text.ComponentGets the formatted display name of this permission holder (for use in commands, etc)Comparator<? super PermissionHolder> List<net.luckperms.api.node.types.InheritanceNode> getOwnInheritanceNodes(net.luckperms.api.query.QueryOptions queryOptions) <T extends net.luckperms.api.node.Node>
List<T> getOwnNodes(net.luckperms.api.node.NodeType<T> type, net.luckperms.api.query.QueryOptions queryOptions) List<net.luckperms.api.node.Node> getOwnNodes(net.luckperms.api.query.QueryOptions queryOptions) SortedSet<net.luckperms.api.node.Node> getOwnNodesSorted(net.luckperms.api.query.QueryOptions queryOptions) abstract StringGets a display name for this permission holder, without any formatting.abstract net.luckperms.api.query.QueryOptionsGets the most appropriate query options available at the time for the holder.abstract HolderTypegetType()Returns the type of this PermissionHolder.IntegerResult<net.luckperms.api.node.types.WeightNode> net.luckperms.api.util.TristatehasNode(net.luckperms.api.model.data.DataType type, net.luckperms.api.node.Node node, net.luckperms.api.node.NodeEqualityPredicate equalityPredicate) protected voidvoidloadNodesFromStorage(Iterable<? extends net.luckperms.api.node.Node> set) voidmergeNodes(net.luckperms.api.model.data.DataType type, Iterable<? extends net.luckperms.api.node.Node> set) booleanremoveIf(net.luckperms.api.model.data.DataType dataType, @Nullable net.luckperms.api.context.ContextSet contextSet, Predicate<? super net.luckperms.api.node.Node> predicate, boolean giveDefault) resolveInheritanceTree(net.luckperms.api.query.QueryOptions queryOptions) <T extends net.luckperms.api.node.Node>
List<T> resolveInheritedNodes(net.luckperms.api.node.NodeType<T> type, net.luckperms.api.query.QueryOptions queryOptions) List<net.luckperms.api.node.Node> resolveInheritedNodes(net.luckperms.api.query.QueryOptions queryOptions) SortedSet<net.luckperms.api.node.Node> resolveInheritedNodesSorted(net.luckperms.api.query.QueryOptions queryOptions) net.luckperms.api.model.data.DataMutateResultsetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, boolean callEvent) net.luckperms.api.model.data.DataMutateResult.WithMergedNodesetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, net.luckperms.api.model.data.TemporaryNodeMergeStrategy mergeStrategy) Difference<net.luckperms.api.node.Node> setNodes(net.luckperms.api.model.data.DataType type, Iterable<? extends net.luckperms.api.node.Node> set, boolean callEvent) Difference<net.luckperms.api.node.Node> setNodes(net.luckperms.api.model.data.DataType type, Difference<net.luckperms.api.node.Node> changes, boolean callEvent) net.luckperms.api.model.data.DataMutateResultunsetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node) net.luckperms.api.model.data.DataMutateResult.WithMergedNodeunsetNode(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.node.Node node, @Nullable Duration duration)
-
Constructor Details
-
PermissionHolder
Creates a new instance- Parameters:
plugin- the plugin instance
-
-
Method Details
-
getPlugin
-
getInheritanceComparator
-
getData
-
normalData
-
transientData
-
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
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
Gets the holders cached data- Returns:
- the holders cached data
-
getType
Returns the type of this PermissionHolder.- Returns:
- this holders type
-
invalidateCache
protected void invalidateCache() -
loadNodesFromStorage
-
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
-
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
-
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
-
removeIf
-
clearNodes
public boolean clearNodes(net.luckperms.api.model.data.DataType dataType, net.luckperms.api.context.ContextSet contextSet, boolean giveDefault) -
getWeightResult
-
getWeight
-