Update placeholder impls for API 5.1, lots of cleanup

This commit is contained in:
Luck committed 2020-05-27 20:02:11 +01:00
1 parent d15e2bd516
commit 46fcebb9d7
5 files changed
+113 -94

No files matched your search

+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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>
+2 -2
View File
@@ -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>
+2 -2
View File
@@ -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>