Update placeholder impls for API 5.1, lots of cleanup
This commit is contained in:
5 files changed
+113
-94
No files matched your search
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>luckperms-placeholders</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>placeholders-common</artifactId>
|
||||
|
||||
@@ -30,9 +30,9 @@ import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.cacheddata.CachedDataManager;
|
||||
import net.luckperms.api.cacheddata.CachedPermissionData;
|
||||
import net.luckperms.api.metastacking.DuplicateRemovalFunction;
|
||||
import net.luckperms.api.metastacking.MetaStackDefinition;
|
||||
import net.luckperms.api.metastacking.MetaStackElement;
|
||||
@@ -44,12 +44,13 @@ import net.luckperms.api.node.types.InheritanceNode;
|
||||
import net.luckperms.api.query.QueryOptions;
|
||||
import net.luckperms.api.track.Track;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.HashMap;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -84,23 +85,32 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
}
|
||||
|
||||
private void setup(PlaceholderBuilder builder) {
|
||||
builder.addStatic("context", (player, user, userData, queryOptions) ->
|
||||
this.luckPerms.getContextManager().getContext(player).toSet().stream()
|
||||
.map(c -> c.getKey() + "=" + c.getValue())
|
||||
.collect(Collectors.joining(", "))
|
||||
);
|
||||
builder.addDynamic("context", (player, user, userData, queryOptions, key) ->
|
||||
String.join(", ", this.luckPerms.getContextManager().getContext(player).getValues(key))
|
||||
);
|
||||
builder.addStatic("groups", (player, user, userData, queryOptions) ->
|
||||
user.getNodes()
|
||||
user.getNodes(NodeType.INHERITANCE)
|
||||
.stream()
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(InheritanceNode::getGroupName)
|
||||
.map(this::convertGroupDisplayName)
|
||||
.collect(Collectors.joining(", "))
|
||||
);
|
||||
builder.addStatic("inherited_groups", (player, user, userData, queryOptions) ->
|
||||
user.getInheritedGroups(queryOptions)
|
||||
.stream()
|
||||
.map(Group::getFriendlyName)
|
||||
.collect(Collectors.joining(", "))
|
||||
);
|
||||
builder.addStatic("primary_group_name", (player, user, userData, queryOptions) -> convertGroupDisplayName(user.getPrimaryGroup()));
|
||||
builder.addDynamic("has_permission", (player, user, userData, queryOptions, node) ->
|
||||
user.getNodes().stream()
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.anyMatch(n -> n.getKey().equals(node))
|
||||
);
|
||||
builder.addDynamic("inherits_permission", (player, user, userData, queryOptions, node) ->
|
||||
@@ -110,14 +120,16 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
);
|
||||
builder.addDynamic("check_permission", (player, user, userData, queryOptions, node) -> user.getCachedData().getPermissionData(queryOptions).checkPermission(node).asBoolean());
|
||||
builder.addDynamic("in_group", (player, user, userData, queryOptions, groupName) ->
|
||||
user.getNodes().stream()
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
user.getNodes(NodeType.INHERITANCE).stream()
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(InheritanceNode::getGroupName)
|
||||
.anyMatch(s -> s.equalsIgnoreCase(groupName))
|
||||
);
|
||||
builder.addDynamic("inherits_group", (player, user, userData, queryOptions, groupName) -> user.getCachedData().getPermissionData(queryOptions).checkPermission("group." + groupName).asBoolean());
|
||||
builder.addDynamic("inherits_group", (player, user, userData, queryOptions, groupName) ->
|
||||
user.getInheritedGroups(queryOptions)
|
||||
.stream()
|
||||
.anyMatch(g -> g.getName().equalsIgnoreCase(groupName))
|
||||
);
|
||||
builder.addDynamic("on_track", (player, user, userData, queryOptions, trackName) ->
|
||||
Optional.ofNullable(this.luckPerms.getTrackManager().getTrack(trackName))
|
||||
.map(t -> t.containsGroup(user.getPrimaryGroup()))
|
||||
@@ -125,57 +137,57 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
);
|
||||
builder.addDynamic("has_groups_on_track", (player, user, userData, queryOptions, trackName) ->
|
||||
Optional.ofNullable(this.luckPerms.getTrackManager().getTrack(trackName))
|
||||
.map(t -> user.getNodes().stream()
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.map(t -> user.getNodes(NodeType.INHERITANCE).stream()
|
||||
.map(InheritanceNode::getGroupName)
|
||||
.anyMatch(t::containsGroup)
|
||||
)
|
||||
.orElse(false)
|
||||
);
|
||||
builder.addStatic("highest_group_by_weight", (player, user, userData, queryOptions) ->
|
||||
user.getNodes().stream()
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
user.getNodes(NodeType.INHERITANCE).stream()
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(InheritanceNode::getGroupName)
|
||||
.map(n -> this.luckPerms.getGroupManager().getGroup(n))
|
||||
.filter(Objects::nonNull)
|
||||
.min((o1, o2) -> {
|
||||
int ret = Integer.compare(o1.getWeight().orElse(0), o2.getWeight().orElse(0));
|
||||
return ret == 1 ? 1 : -1;
|
||||
})
|
||||
.min(Comparator.comparingInt(g -> g.getWeight().orElse(0)))
|
||||
.map(Group::getName)
|
||||
.map(this::convertGroupDisplayName)
|
||||
.orElse("")
|
||||
);
|
||||
builder.addStatic("lowest_group_by_weight", (player, user, userData, queryOptions) ->
|
||||
user.getNodes().stream()
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
user.getNodes(NodeType.INHERITANCE).stream()
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(InheritanceNode::getGroupName)
|
||||
.map(n -> this.luckPerms.getGroupManager().getGroup(n))
|
||||
.filter(Objects::nonNull)
|
||||
.min((o1, o2) -> {
|
||||
int ret = Integer.compare(o1.getWeight().orElse(0), o2.getWeight().orElse(0));
|
||||
return ret == 1 ? -1 : 1;
|
||||
})
|
||||
.max(Comparator.comparingInt(g -> g.getWeight().orElse(0)))
|
||||
.map(Group::getName)
|
||||
.map(this::convertGroupDisplayName)
|
||||
.orElse("")
|
||||
);
|
||||
builder.addStatic("highest_inherited_group_by_weight", (player, user, userData, queryOptions) ->
|
||||
user.getInheritedGroups(queryOptions).stream()
|
||||
.min(Comparator.comparingInt(g -> g.getWeight().orElse(0)))
|
||||
.map(Group::getName)
|
||||
.map(this::convertGroupDisplayName)
|
||||
.orElse("")
|
||||
);
|
||||
builder.addStatic("lowest_inherited_group_by_weight", (player, user, userData, queryOptions) ->
|
||||
user.getInheritedGroups(queryOptions).stream()
|
||||
.max(Comparator.comparingInt(g -> g.getWeight().orElse(0)))
|
||||
.map(Group::getName)
|
||||
.map(this::convertGroupDisplayName)
|
||||
.orElse("")
|
||||
);
|
||||
builder.addDynamic("first_group_on_tracks", (player, user, userData, queryOptions, argument) -> {
|
||||
List<String> tracks = Splitter.on(',').trimResults().splitToList(argument);
|
||||
CachedPermissionData permData = userData.getPermissionData(queryOptions);
|
||||
Set<String> groups = user.getInheritedGroups(queryOptions).stream().map(Group::getName).collect(Collectors.toSet());
|
||||
|
||||
return tracks.stream()
|
||||
.map(n -> this.luckPerms.getTrackManager().getTrack(n))
|
||||
.filter(Objects::nonNull)
|
||||
.map(Track::getGroups)
|
||||
.map(groups -> groups.stream()
|
||||
.filter(s -> permData.checkPermission("group." + s).asBoolean())
|
||||
.findFirst()
|
||||
)
|
||||
.map(trackGroups -> trackGroups.stream().filter(groups::contains).findFirst())
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.findFirst()
|
||||
@@ -184,67 +196,72 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
});
|
||||
builder.addDynamic("last_group_on_tracks", (player, user, userData, queryOptions, argument) -> {
|
||||
List<String> tracks = Splitter.on(',').trimResults().splitToList(argument);
|
||||
CachedPermissionData permData = userData.getPermissionData(queryOptions);
|
||||
Set<String> groups = user.getInheritedGroups(queryOptions).stream().map(Group::getName).collect(Collectors.toSet());
|
||||
|
||||
return tracks.stream()
|
||||
.map(n -> this.luckPerms.getTrackManager().getTrack(n))
|
||||
.filter(Objects::nonNull)
|
||||
.map(Track::getGroups)
|
||||
.map(Lists::reverse)
|
||||
.map(groups -> groups.stream()
|
||||
.filter(s -> permData.checkPermission("group." + s).asBoolean())
|
||||
.findFirst()
|
||||
)
|
||||
.map(trackGroups -> trackGroups.stream().filter(groups::contains).findFirst())
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.findFirst()
|
||||
.map(this::convertGroupDisplayName)
|
||||
.orElse("");
|
||||
});
|
||||
builder.addDynamic("expiry_time", (player, user, userData, queryOptions, node) -> {
|
||||
long currentTime = System.currentTimeMillis() / 1000L;
|
||||
return user.getNodes().stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> !n.hasExpired())
|
||||
.filter(n -> n.getKey().equals(node))
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
.map(Node::getExpiry)
|
||||
.map(Instant::getEpochSecond)
|
||||
.findFirst()
|
||||
.map(e -> formatTime((int) (e - currentTime)))
|
||||
.orElse("");
|
||||
});
|
||||
builder.addDynamic("inherited_expiry_time", (player, user, userData, queryOptions, node) -> {
|
||||
long currentTime = System.currentTimeMillis() / 1000L;
|
||||
return user.resolveInheritedNodes(QueryOptions.nonContextual()).stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> !n.hasExpired())
|
||||
.filter(n -> n.getKey().equals(node))
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
.map(Node::getExpiry)
|
||||
.map(Instant::getEpochSecond)
|
||||
.findFirst()
|
||||
.map(e -> formatTime((int) (e - currentTime)))
|
||||
.orElse("");
|
||||
});
|
||||
builder.addDynamic("group_expiry_time", (player, user, userData, queryOptions, group) -> {
|
||||
long currentTime = System.currentTimeMillis() / 1000L;
|
||||
return user.getNodes().stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> !n.hasExpired())
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getGroupName().equalsIgnoreCase(group))
|
||||
.filter(n -> n.getContexts().isSatisfiedBy(queryOptions.context()))
|
||||
.map(Node::getExpiry)
|
||||
.map(Instant::getEpochSecond)
|
||||
.findFirst()
|
||||
.map(e -> formatTime((int) (e - currentTime)))
|
||||
.orElse("");
|
||||
});
|
||||
builder.addStatic("prefix", (player, user, userData, queryOptions) -> Strings.nullToEmpty(userData.getMetaData(this.luckPerms.getContextManager().getQueryOptions(player)).getPrefix()));
|
||||
builder.addStatic("suffix", (player, user, userData, queryOptions) -> Strings.nullToEmpty(userData.getMetaData(this.luckPerms.getContextManager().getQueryOptions(player)).getSuffix()));
|
||||
builder.addDynamic("expiry_time", (player, user, userData, queryOptions, node) ->
|
||||
user.getNodes().stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> n.getKey().equals(node))
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(Node::getExpiryDuration)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(d -> !d.isNegative())
|
||||
.findFirst()
|
||||
.map(d -> formatTime((int) d.getSeconds()))
|
||||
.orElse("")
|
||||
);
|
||||
builder.addDynamic("inherited_expiry_time", (player, user, userData, queryOptions, node) ->
|
||||
user.resolveInheritedNodes(queryOptions).stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> n.getKey().equals(node))
|
||||
.map(Node::getExpiryDuration)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(d -> !d.isNegative())
|
||||
.findFirst()
|
||||
.map(d -> formatTime((int) d.getSeconds()))
|
||||
.orElse("")
|
||||
);
|
||||
builder.addDynamic("group_expiry_time", (player, user, userData, queryOptions, group) ->
|
||||
user.getNodes(NodeType.INHERITANCE).stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(n -> n.getGroupName().equals(group))
|
||||
.filter(n -> queryOptions.satisfies(n.getContexts()))
|
||||
.map(Node::getExpiryDuration)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(d -> !d.isNegative())
|
||||
.findFirst()
|
||||
.map(d -> formatTime((int) d.getSeconds()))
|
||||
.orElse("")
|
||||
);
|
||||
builder.addDynamic("inherited_group_expiry_time", (player, user, userData, queryOptions, group) ->
|
||||
user.resolveInheritedNodes(queryOptions).stream()
|
||||
.filter(Node::hasExpiry)
|
||||
.filter(NodeType.INHERITANCE::matches)
|
||||
.map(NodeType.INHERITANCE::cast)
|
||||
.filter(n -> n.getGroupName().equals(group))
|
||||
.map(Node::getExpiryDuration)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(d -> !d.isNegative())
|
||||
.findFirst()
|
||||
.map(d -> formatTime((int) d.getSeconds()))
|
||||
.orElse("")
|
||||
);
|
||||
builder.addStatic("prefix", (player, user, userData, queryOptions) -> Strings.nullToEmpty(userData.getMetaData(queryOptions).getPrefix()));
|
||||
builder.addStatic("suffix", (player, user, userData, queryOptions) -> Strings.nullToEmpty(userData.getMetaData(queryOptions).getSuffix()));
|
||||
builder.addDynamic("meta", (player, user, userData, queryOptions, node) -> {
|
||||
List<String> values = userData.getMetaData(this.luckPerms.getContextManager().getQueryOptions(player)).getMeta().getOrDefault(node, ImmutableList.of());
|
||||
List<String> values = userData.getMetaData(queryOptions).getMeta().getOrDefault(node, ImmutableList.of());
|
||||
return values.isEmpty() ? "" : values.iterator().next();
|
||||
});
|
||||
builder.addDynamic("prefix_element", (player, user, userData, queryOptions, element) -> {
|
||||
@@ -258,6 +275,7 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
.option(MetaStackDefinition.PREFIX_STACK_KEY, stackDefinition)
|
||||
.option(MetaStackDefinition.SUFFIX_STACK_KEY, stackDefinition)
|
||||
.build();
|
||||
|
||||
return Strings.nullToEmpty(userData.getMetaData(newOptions).getPrefix());
|
||||
});
|
||||
builder.addDynamic("suffix_element", (player, user, userData, queryOptions, element) -> {
|
||||
@@ -271,6 +289,7 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
.option(MetaStackDefinition.PREFIX_STACK_KEY, stackDefinition)
|
||||
.option(MetaStackDefinition.SUFFIX_STACK_KEY, stackDefinition)
|
||||
.build();
|
||||
|
||||
return Strings.nullToEmpty(userData.getMetaData(newOptions).getSuffix());
|
||||
});
|
||||
}
|
||||
@@ -364,7 +383,7 @@ public class LPPlaceholderProvider implements PlaceholderProvider {
|
||||
* Builds a placeholder map
|
||||
*/
|
||||
private static final class PlaceholderBuilder {
|
||||
private final Map<String, Placeholder> placeholders = new HashMap<>();
|
||||
private final Map<String, Placeholder> placeholders = new LinkedHashMap<>();
|
||||
|
||||
public void addDynamic(String id, DynamicPlaceholder placeholder) {
|
||||
this.placeholders.put(id + "_", placeholder);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>luckperms-placeholders</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>luckperms-mvdw-hook</artifactId>
|
||||
@@ -67,7 +67,7 @@
|
||||
<dependency>
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>placeholders-common</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>luckperms-placeholders</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>luckperms-papi-expansion</artifactId>
|
||||
@@ -58,7 +58,7 @@
|
||||
<dependency>
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>placeholders-common</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>me.lucko.luckperms</groupId>
|
||||
<artifactId>luckperms-placeholders</artifactId>
|
||||
<version>5.0-SNAPSHOT</version>
|
||||
<version>5.1-SNAPSHOT</version>
|
||||
|
||||
<modules>
|
||||
<module>common</module>
|
||||
@@ -31,7 +31,7 @@
|
||||
<dependency>
|
||||
<groupId>net.luckperms</groupId>
|
||||
<artifactId>api</artifactId>
|
||||
<version>5.0</version>
|
||||
<version>5.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
Reference in new issue
Block a user