diff --git a/bukkit-placeholders/pom.xml b/bukkit-placeholders/pom.xml
index f2ae87a63..dc6355e6a 100644
--- a/bukkit-placeholders/pom.xml
+++ b/bukkit-placeholders/pom.xml
@@ -30,8 +30,8 @@
me.lucko.luckperms
luckperms-api
- 2.5
- compile
+ 2.8
+ provided
diff --git a/bukkit-placeholders/src/main/java/me/lucko/luckperms/api/placeholders/LuckPermsPlaceholderExpansion.java b/bukkit-placeholders/src/main/java/me/lucko/luckperms/api/placeholders/LuckPermsPlaceholderExpansion.java
index 3be84f2ca..8debfaa7e 100644
--- a/bukkit-placeholders/src/main/java/me/lucko/luckperms/api/placeholders/LuckPermsPlaceholderExpansion.java
+++ b/bukkit-placeholders/src/main/java/me/lucko/luckperms/api/placeholders/LuckPermsPlaceholderExpansion.java
@@ -25,15 +25,11 @@ package me.lucko.luckperms.api.placeholders;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.clip.placeholderapi.util.TimeUtil;
-import me.lucko.luckperms.api.LuckPermsApi;
-import me.lucko.luckperms.api.Track;
-import me.lucko.luckperms.api.User;
+import me.lucko.luckperms.api.*;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-import java.util.Map;
import java.util.Optional;
-import java.util.regex.Pattern;
/*
* PlaceholderAPI Expansion for LuckPerms, implemented using the LuckPerms API.
@@ -75,7 +71,7 @@ public class LuckPermsPlaceholderExpansion extends PlaceholderExpansion {
@Override
public String getVersion() {
- return "2.5";
+ return "2.8";
}
@Override
@@ -127,17 +123,11 @@ public class LuckPermsPlaceholderExpansion extends PlaceholderExpansion {
if (identifier.startsWith("expiry_time_") && identifier.length() > "expiry_time_".length()) {
String node = identifier.substring("expiry_time_".length());
-
-
long currentTime = System.currentTimeMillis() / 1000L;
- Map, Long> temps = user.getTemporaryNodes();
-
- for (Map.Entry, Long> e : temps.entrySet()) {
- if (!e.getKey().getKey().equalsIgnoreCase(node)) {
- continue;
+ for (Node n : user.getTemporaryPermissionNodes()) {
+ if (n.getPermission().equalsIgnoreCase(node)) {
+ return TimeUtil.getTime((int) (n.getExpiryUnixTime() - currentTime));
}
-
- return TimeUtil.getTime((int) (e.getValue() - currentTime));
}
return "";
@@ -145,42 +135,27 @@ public class LuckPermsPlaceholderExpansion extends PlaceholderExpansion {
if (identifier.startsWith("group_expiry_time_") && identifier.length() > "group_expiry_time_".length()) {
String node = "group." + identifier.substring("group_expiry_time_".length());
-
long currentTime = System.currentTimeMillis() / 1000L;
- Map, Long> temps = user.getTemporaryNodes();
-
- for (Map.Entry, Long> e : temps.entrySet()) {
- if (!e.getKey().getKey().equalsIgnoreCase(node)) {
- continue;
+ for (Node n : user.getTemporaryPermissionNodes()) {
+ if (n.getPermission().equalsIgnoreCase(node)) {
+ return TimeUtil.getTime((int) (n.getExpiryUnixTime() - currentTime));
}
-
- return TimeUtil.getTime((int) (e.getValue() - currentTime));
}
return "";
}
if (identifier.equalsIgnoreCase("prefix")) {
- return getChatMeta(PREFIX_PATTERN, user);
+ return MetaUtils.getPrefix(user, null, null, true);
}
if (identifier.equalsIgnoreCase("suffix")) {
- return getChatMeta(SUFFIX_PATTERN, user);
+ return MetaUtils.getSuffix(user, null, null, true);
}
if (identifier.startsWith("meta_") && identifier.length() > "meta_".length()) {
- String node = "meta." + escapeCharacters(identifier.substring("meta_".length())) + ".";
- Map nodes = user.getNodes();
-
- for (Map.Entry e : nodes.entrySet()) {
- if (!e.getValue()) continue;
- if (!e.getKey().toLowerCase().startsWith(node)) continue;
-
- String meta = e.getKey().substring(node.length());
- return unescapeCharacters(meta);
- }
-
- return "";
+ String node = identifier.substring("meta_".length());
+ return MetaUtils.getMeta(user, null, null, node, "", true);
}
return null;
@@ -204,44 +179,4 @@ public class LuckPermsPlaceholderExpansion extends PlaceholderExpansion {
private static String formatBoolean(boolean b) {
return b ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse();
}
-
- private static String escapeCharacters(String s) {
- s = s.replace(".", "{SEP}");
- s = s.replace("/", "{FSEP}");
- s = s.replace("$", "{DSEP}");
-
- return s;
- }
-
- private static String unescapeCharacters(String s) {
- s = s.replace("{SEP}", ".");
- s = s.replace("{FSEP}", "/");
- s = s.replace("{DSEP}", "$");
-
- return s;
- }
-
- private static final Pattern PREFIX_PATTERN = Pattern.compile("(?i)prefix\\.\\d+\\..*");
- private static final Pattern SUFFIX_PATTERN = Pattern.compile("(?i)suffix\\.\\d+\\..*");
- private static final Pattern DOT_PATTERN = Pattern.compile("\\.");
-
- private static String getChatMeta(Pattern pattern, User user) {
- int priority = 0;
- String meta = null;
- for (Map.Entry e : user.getLocalPermissions(null, null).entrySet()) {
- if (!e.getValue()) continue;
-
- if (pattern.matcher(e.getKey()).matches()) {
- String[] parts = DOT_PATTERN.split(e.getKey(), 3);
- int p = Integer.parseInt(parts[1]);
-
- if (meta == null || p > priority) {
- meta = parts[2];
- priority = p;
- }
- }
- }
-
- return meta == null ? "" : unescapeCharacters(meta);
- }
}