use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class NodeMapMutable method addAll.
@Override
public Difference<Node> addAll(Iterable<? extends Node> set) {
Difference<Node> result = new Difference<>();
this.lock.lock();
try {
for (Node n : set) {
result.mergeFrom(add(n));
}
} finally {
this.lock.unlock();
}
return result;
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class PermissionHolder method resolveInheritedNodes.
public List<Node> resolveInheritedNodes(QueryOptions queryOptions) {
if (!queryOptions.flag(Flag.RESOLVE_INHERITANCE)) {
return getOwnNodes(queryOptions);
}
List<Node> nodes = new ArrayList<>();
InheritanceGraph graph = this.plugin.getInheritanceGraphFactory().getGraph(queryOptions);
for (PermissionHolder holder : graph.traverse(this)) {
for (DataType dataType : holder.queryOrder(queryOptions)) {
holder.getData(dataType).copyTo(nodes, queryOptions);
}
}
return nodes;
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class PermissionHolder method unsetNode.
public DataMutateResult.WithMergedNode unsetNode(DataType dataType, Node node, @Nullable Duration duration) {
if (node.getExpiry() != null && duration != null) {
Node otherMatch = getData(dataType).nodesInContext(node.getContexts()).stream().filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node)).findFirst().orElse(null);
if (otherMatch != null && otherMatch.getExpiry() != null) {
NodeMap data = getData(dataType);
Instant newExpiry = otherMatch.getExpiry().minus(duration);
if (newExpiry.isAfter(Instant.now())) {
Node newNode = node.toBuilder().expiry(newExpiry).build();
// Remove the old Node & add the new one.
Difference<Node> changes = data.removeThenAdd(otherMatch, newNode);
invalidateCache();
this.plugin.getEventDispatcher().dispatchNodeChanges(this, dataType, changes);
return new MergedNodeResult(DataMutateResult.SUCCESS, newNode);
}
}
}
// Fallback to the normal handling.
return new MergedNodeResult(unsetNode(dataType, node), null);
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class PermissionHolder method resolveInheritedNodesSorted.
public SortedSet<Node> resolveInheritedNodesSorted(QueryOptions queryOptions) {
if (!queryOptions.flag(Flag.RESOLVE_INHERITANCE)) {
return getOwnNodesSorted(queryOptions);
}
SortedSet<Node> nodes = new TreeSet<>(NodeWithContextComparator.reverse());
InheritanceGraph graph = this.plugin.getInheritanceGraphFactory().getGraph(queryOptions);
for (PermissionHolder holder : graph.traverse(this)) {
for (DataType dataType : holder.queryOrder(queryOptions)) {
holder.getData(dataType).copyTo(nodes, queryOptions);
}
}
return nodes;
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class PermissionHolder method setNode.
public DataMutateResult.WithMergedNode setNode(DataType dataType, Node node, TemporaryNodeMergeStrategy mergeStrategy) {
if (node.getExpiry() != null && mergeStrategy != TemporaryNodeMergeStrategy.NONE) {
Node otherMatch = getData(dataType).nodesInContext(node.getContexts()).stream().filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node)).findFirst().orElse(null);
if (otherMatch != null && otherMatch.getExpiry() != null) {
NodeMap data = getData(dataType);
Node newNode = null;
switch(mergeStrategy) {
case ADD_NEW_DURATION_TO_EXISTING:
{
// Create a new Node with the same properties, but add the expiry dates together
Instant newExpiry = otherMatch.getExpiry().plus(Duration.between(Instant.now(), node.getExpiry()));
newNode = node.toBuilder().expiry(newExpiry).build();
break;
}
case REPLACE_EXISTING_IF_DURATION_LONGER:
{
// Only replace if the new expiry time is greater than the old one.
if (node.getExpiry().compareTo(otherMatch.getExpiry()) > 0) {
newNode = node;
}
break;
}
}
if (newNode != null) {
// Remove the old Node & add the new one.
Difference<Node> changes = data.removeThenAdd(otherMatch, newNode);
invalidateCache();
this.plugin.getEventDispatcher().dispatchNodeChanges(this, dataType, changes);
return new MergedNodeResult(DataMutateResult.SUCCESS, newNode);
}
}
}
// Fallback to the normal handling.
return new MergedNodeResult(setNode(dataType, node, true), node);
}
Aggregations