use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class EventDispatcher method dispatchNodeClear.
public void dispatchNodeClear(PermissionHolder target, DataType dataType, Difference<Node> changes) {
if (!this.eventBus.shouldPost(NodeClearEvent.class)) {
return;
}
if (changes.isEmpty()) {
return;
}
ApiPermissionHolder proxy = proxy(target);
ImmutableSet<Node> state = target.getData(dataType).asImmutableSet();
// call clear event
ImmutableSet<Node> nodes = ImmutableSet.copyOf(changes.getRemoved());
postAsync(NodeClearEvent.class, proxy, dataType, state, nodes);
// call add event if needed for any nodes that were added
for (Node added : changes.getAdded()) {
postAsync(NodeAddEvent.class, proxy, dataType, state, added);
}
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class LuckPermsVaultChat method setChatMeta.
private void setChatMeta(PermissionHolder holder, ChatMetaType type, String value, String world) {
// remove all prefixes/suffixes directly set on the user/group
holder.removeIf(DataType.NORMAL, null, type.nodeType()::matches, false);
if (value == null) {
this.vaultPermission.holderSave(holder);
return;
}
// find the max inherited priority & add 10
MetaAccumulator metaAccumulator = holder.accumulateMeta(createQueryOptionsForWorldSet(world));
int priority = metaAccumulator.getChatMeta(type).keySet().stream().mapToInt(e -> e).max().orElse(0) + 10;
Node node = type.builder(value, priority).withContext(DefaultContextKeys.SERVER_KEY, this.vaultPermission.getVaultServer()).withContext(DefaultContextKeys.WORLD_KEY, world == null ? "global" : world).build();
holder.setNode(DataType.NORMAL, node, true);
this.vaultPermission.holderSave(holder);
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class HolderShowTracks method execute.
@Override
public void execute(LuckPermsPlugin plugin, Sender sender, T target, ArgumentList args, String label) {
if (ArgumentPermissions.checkViewPerms(plugin, sender, getPermission().get(), target)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
try {
plugin.getStorage().loadAllTracks().get();
} catch (Exception e) {
plugin.getLogger().warn("Error whilst loading tracks", e);
Message.TRACKS_LOAD_ERROR.send(sender);
return;
}
List<Map.Entry<Track, Component>> lines = new ArrayList<>();
if (target.getType() == HolderType.USER) {
// if the holder is a user, we want to query parent groups for tracks
Set<InheritanceNode> nodes = target.normalData().inheritanceAsList().stream().filter(Node::getValue).filter(n -> !n.hasExpiry()).collect(Collectors.toSet());
for (InheritanceNode node : nodes) {
String groupName = node.getGroupName();
List<Track> tracks = plugin.getTrackManager().getAll().values().stream().filter(t -> t.containsGroup(groupName)).collect(Collectors.toList());
for (Track track : tracks) {
Component line = Component.text().append(Message.formatContextSetBracketed(node.getContexts(), Component.empty())).append(Component.newline()).append(Message.formatTrackPath(track.getGroups(), groupName)).build();
lines.add(Maps.immutableEntry(track, line));
}
}
} else {
// otherwise, just lookup for the actual group
String groupName = ((Group) target).getName();
List<Track> tracks = plugin.getTrackManager().getAll().values().stream().filter(t -> t.containsGroup(groupName)).collect(Collectors.toList());
for (Track track : tracks) {
lines.add(Maps.immutableEntry(track, Message.formatTrackPath(track.getGroups(), groupName)));
}
}
if (lines.isEmpty()) {
Message.LIST_TRACKS_EMPTY.send(sender, target);
return;
}
Message.LIST_TRACKS.send(sender, target);
for (Map.Entry<Track, Component> line : lines) {
Message.LIST_TRACKS_ENTRY.send(sender, line.getKey().getName(), line.getValue());
}
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class ParentRemoveTemp method execute.
@Override
public void execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder target, ArgumentList args, String label, CommandPermission permission) throws CommandException {
if (ArgumentPermissions.checkModifyPerms(plugin, sender, permission, target)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
String groupName = args.getLowercase(0, DataConstraints.GROUP_NAME_TEST_ALLOW_SPACE);
Duration duration = args.getDurationOrDefault(1, null);
int fromIndex = duration == null ? 1 : 2;
MutableContextSet context = args.getContextOrDefault(fromIndex, plugin);
if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || ArgumentPermissions.checkGroup(plugin, sender, target, context) || ArgumentPermissions.checkGroup(plugin, sender, groupName, context) || ArgumentPermissions.checkArguments(plugin, sender, permission, groupName)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
DataMutateResult.WithMergedNode result = target.unsetNode(DataType.NORMAL, Inheritance.builder(groupName).expiry(10L).withContext(context).build(), duration);
if (result.getResult().wasSuccessful()) {
Node mergedNode = result.getMergedNode();
// noinspection ConstantConditions
if (mergedNode != null) {
Message.UNSET_TEMP_INHERIT_SUBTRACT_SUCCESS.send(sender, target, Component.text(groupName), mergedNode.getExpiryDuration(), context, duration);
LoggedAction.build().source(sender).target(target).description("parent", "removetemp", groupName, duration, context).build().submit(plugin, sender);
} else {
Message.UNSET_TEMP_INHERIT_SUCCESS.send(sender, target, Component.text(groupName), context);
LoggedAction.build().source(sender).target(target).description("parent", "removetemp", groupName, context).build().submit(plugin, sender);
}
StorageAssistant.save(target, sender, plugin);
} else {
Message.DOES_NOT_TEMP_INHERIT.send(sender, target, Component.text(groupName), context);
}
}
use of net.luckperms.api.node.Node in project LuckPerms by lucko.
the class PermissionUnset method execute.
@Override
public void execute(LuckPermsPlugin plugin, Sender sender, PermissionHolder target, ArgumentList args, String label, CommandPermission permission) throws CommandException {
if (ArgumentPermissions.checkModifyPerms(plugin, sender, permission, target)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
String node = args.get(0);
MutableContextSet context = args.getContextOrDefault(1, plugin);
if (node.isEmpty()) {
Message.PERMISSION_INVALID_ENTRY_EMPTY.send(sender);
}
if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || ArgumentPermissions.checkGroup(plugin, sender, target, context) || ArgumentPermissions.checkArguments(plugin, sender, permission, node)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
Node builtNode = NodeBuilders.determineMostApplicable(node).withContext(context).build();
if (builtNode instanceof InheritanceNode) {
if (ArgumentPermissions.checkGroup(plugin, sender, ((InheritanceNode) builtNode).getGroupName(), context)) {
Message.COMMAND_NO_PERMISSION.send(sender);
return;
}
}
DataMutateResult result = target.unsetNode(DataType.NORMAL, builtNode);
if (result.wasSuccessful()) {
Message.UNSETPERMISSION_SUCCESS.send(sender, node, target, context);
LoggedAction.build().source(sender).target(target).description("permission", "unset", node, context).build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin);
} else {
Message.DOES_NOT_HAVE_PERMISSION.send(sender, target, node, context);
}
}
Aggregations