From 345ce7fa8aa1407f5ee48663a643e2398ed17579 Mon Sep 17 00:00:00 2001 From: William278 Date: Sun, 4 Feb 2024 14:26:17 +0000 Subject: [PATCH] refactor: require PPB for PAPI placeholder fallback, add setting --- .../velocitab/config/Placeholder.java | 22 ++++++++++++++----- .../william278/velocitab/config/Settings.java | 6 ++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/william278/velocitab/config/Placeholder.java b/src/main/java/net/william278/velocitab/config/Placeholder.java index a7b2b18..98f39c0 100644 --- a/src/main/java/net/william278/velocitab/config/Placeholder.java +++ b/src/main/java/net/william278/velocitab/config/Placeholder.java @@ -51,17 +51,21 @@ public enum Placeholder { USERNAME_LOWER((plugin, player) -> player.getCustomName().orElse(player.getPlayer().getUsername()).toLowerCase()), SERVER((plugin, player) -> player.getServerDisplayName(plugin)), PING((plugin, player) -> Long.toString(player.getPlayer().getPing())), - PREFIX((plugin, player) -> player.getRole().getPrefix().orElse("%luckperms_prefix%")), - SUFFIX((plugin, player) -> player.getRole().getSuffix().orElse("%luckperms_suffix%")), - ROLE((plugin, player) -> player.getRole().getName().orElse("")), - ROLE_DISPLAY_NAME((plugin, player) -> player.getRole().getDisplayName().orElse("")), + PREFIX((plugin, player) -> player.getRole().getPrefix() + .orElse(getPlaceholderFallback(plugin, "%luckperms_prefix%"))), + SUFFIX((plugin, player) -> player.getRole().getSuffix() + .orElse(getPlaceholderFallback(plugin, "%luckperms_suffix%"))), + ROLE((plugin, player) -> player.getRole().getName() + .orElse(getPlaceholderFallback(plugin, "%luckperms_primary_group_name%"))), + ROLE_DISPLAY_NAME((plugin, player) -> player.getRole().getDisplayName() + .orElse(getPlaceholderFallback(plugin, "%luckperms_primary_group_name%"))), ROLE_WEIGHT((plugin, player) -> player.getRoleWeightString()), SERVER_GROUP((plugin, player) -> player.getGroup().name()), SERVER_GROUP_INDEX((plugin, player) -> Integer.toString(player.getServerGroupPosition(plugin))), DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getLastTeamName().orElse(""))), LUCKPERMS_META_((param, plugin, player) -> plugin.getLuckPermsHook() .map(hook -> hook.getMeta(player.getPlayer(), param)) - .orElse("%luckperms_meta_" + param + "%")); + .orElse(getPlaceholderFallback(plugin, "%luckperms_meta_" + param + "%"))); /** * Function to replace placeholders with a real value @@ -91,6 +95,14 @@ public enum Placeholder { .thenApply(v -> new Nametag(v[0], v.length > 1 ? v[1] : "")); } + @NotNull + private static String getPlaceholderFallback(@NotNull Velocitab plugin, @NotNull String fallback) { + if (plugin.getPAPIProxyBridgeHook().isPresent() && plugin.getSettings().isFallbackToPapiIfPlaceholderBlank()) { + return fallback; + } + return ""; + } + public static CompletableFuture replace(@NotNull String format, @NotNull Velocitab plugin, @NotNull TabPlayer player) { diff --git a/src/main/java/net/william278/velocitab/config/Settings.java b/src/main/java/net/william278/velocitab/config/Settings.java index 72542dc..3555492 100644 --- a/src/main/java/net/william278/velocitab/config/Settings.java +++ b/src/main/java/net/william278/velocitab/config/Settings.java @@ -34,7 +34,7 @@ import java.util.Map; @Getter @Configuration @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class Settings implements ConfigValidator{ +public class Settings implements ConfigValidator { public static final String CONFIG_HEADER = """ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ @@ -80,6 +80,10 @@ public class Settings implements ConfigValidator{ + "\nTurn this off if you're using scoreboard teams on backend servers.") private boolean sendScoreboardPackets = true; + @Comment("If built-in placeholders return a blank string, fallback to Placeholder API equivalents.\n" + + "For example, if %prefix% returns a blank string, use %luckperms_prefix%. Requires PAPIProxyBridge.") + private boolean fallbackToPapiIfPlaceholderBlank = false; + @Comment("Whether to sort players in the TAB list.") private boolean sortPlayers = true;