Fix retrieving meta keys from Vault which contain delimited characters - closes #270
This commit is contained in:
parent
afd491ecea
commit
fae49096f3
@ -43,9 +43,6 @@ import net.milkbowl.vault.chat.Chat;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static me.lucko.luckperms.api.MetaUtils.escapeCharacters;
|
|
||||||
import static me.lucko.luckperms.api.MetaUtils.unescapeCharacters;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LuckPerms Vault Chat implementation
|
* LuckPerms Vault Chat implementation
|
||||||
* All user lookups are cached.
|
* All user lookups are cached.
|
||||||
@ -68,8 +65,7 @@ public class VaultChatHook extends Chat {
|
|||||||
|
|
||||||
private void setMeta(PermissionHolder holder, String world, String node, String value) {
|
private void setMeta(PermissionHolder holder, String world, String node, String value) {
|
||||||
String finalWorld = perms.isIgnoreWorld() ? null : world;
|
String finalWorld = perms.isIgnoreWorld() ? null : world;
|
||||||
if (holder == null) return;
|
if (holder == null || node.equals("")) return;
|
||||||
if (node.equals("")) return;
|
|
||||||
|
|
||||||
perms.log("Setting meta: '" + node + "' for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Setting meta: '" + node + "' for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
@ -97,7 +93,6 @@ public class VaultChatHook extends Chat {
|
|||||||
perms.log("Setting " + (prefix ? "prefix" : "suffix") + " for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Setting " + (prefix ? "prefix" : "suffix") + " for " + holder.getObjectName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
perms.getScheduler().execute(() -> {
|
perms.getScheduler().execute(() -> {
|
||||||
|
|
||||||
// remove all prefixes/suffixes directly set on the user/group
|
// remove all prefixes/suffixes directly set on the user/group
|
||||||
holder.removeIf(n -> prefix ? n.isPrefix() : n.isSuffix());
|
holder.removeIf(n -> prefix ? n.isPrefix() : n.isSuffix());
|
||||||
|
|
||||||
@ -122,16 +117,11 @@ public class VaultChatHook extends Chat {
|
|||||||
private String getUserMeta(User user, String world, String node, String defaultValue) {
|
private String getUserMeta(User user, String world, String node, String defaultValue) {
|
||||||
if (user == null) return defaultValue;
|
if (user == null) return defaultValue;
|
||||||
world = perms.isIgnoreWorld() ? null : world;
|
world = perms.isIgnoreWorld() ? null : world;
|
||||||
node = escapeCharacters(node);
|
|
||||||
|
|
||||||
perms.log("Getting meta: '" + node + "' for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Getting meta: '" + node + "' for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
String ret = user.getUserData().getMetaData(perms.createContextForWorld(world)).getMeta().get(node);
|
String ret = user.getUserData().getMetaData(perms.createContextForWorld(world)).getMeta().get(node);
|
||||||
if (ret == null) {
|
return ret != null ? ret : defaultValue;
|
||||||
return defaultValue;
|
|
||||||
} else {
|
|
||||||
return unescapeCharacters(ret);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getUserChatMeta(boolean prefix, User user, String world) {
|
private String getUserChatMeta(boolean prefix, User user, String world) {
|
||||||
@ -141,15 +131,13 @@ public class VaultChatHook extends Chat {
|
|||||||
perms.log("Getting " + (prefix ? "prefix" : "suffix") + " for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Getting " + (prefix ? "prefix" : "suffix") + " for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
MetaData data = user.getUserData().getMetaData(perms.createContextForWorld(world));
|
MetaData data = user.getUserData().getMetaData(perms.createContextForWorld(world));
|
||||||
String v = prefix ? data.getPrefix() : data.getSuffix();
|
String ret = prefix ? data.getPrefix() : data.getSuffix();
|
||||||
return v == null ? "" : unescapeCharacters(v);
|
return ret != null ? ret : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getGroupMeta(Group group, String world, String node, String defaultValue) {
|
private String getGroupMeta(Group group, String world, String node, String defaultValue) {
|
||||||
world = perms.isIgnoreWorld() ? null : world;
|
world = perms.isIgnoreWorld() ? null : world;
|
||||||
if (group == null) return defaultValue;
|
if (group == null || node.equals("")) return defaultValue;
|
||||||
if (node.equals("")) return defaultValue;
|
|
||||||
node = escapeCharacters(node);
|
|
||||||
|
|
||||||
perms.log("Getting meta: '" + node + "' for group " + group.getName() + " on world " + world + ", server " + perms.getServer());
|
perms.log("Getting meta: '" + node + "' for group " + group.getName() + " on world " + world + ", server " + perms.getServer());
|
||||||
|
|
||||||
@ -161,7 +149,7 @@ public class VaultChatHook extends Chat {
|
|||||||
|
|
||||||
Map.Entry<String, String> meta = n.getMeta();
|
Map.Entry<String, String> meta = n.getMeta();
|
||||||
if (meta.getKey().equalsIgnoreCase(node)) {
|
if (meta.getKey().equalsIgnoreCase(node)) {
|
||||||
return unescapeCharacters(meta.getValue());
|
return meta.getValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +185,7 @@ public class VaultChatHook extends Chat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return meta == null ? "" : unescapeCharacters(meta);
|
return meta != null ? meta : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user