refactor: require PPB for PAPI placeholder fallback, add setting

This commit is contained in:
William278 2024-02-04 14:26:17 +00:00
parent 65e93781eb
commit 345ce7fa8a
2 changed files with 22 additions and 6 deletions

View File

@ -51,17 +51,21 @@ public enum Placeholder {
USERNAME_LOWER((plugin, player) -> player.getCustomName().orElse(player.getPlayer().getUsername()).toLowerCase()), USERNAME_LOWER((plugin, player) -> player.getCustomName().orElse(player.getPlayer().getUsername()).toLowerCase()),
SERVER((plugin, player) -> player.getServerDisplayName(plugin)), SERVER((plugin, player) -> player.getServerDisplayName(plugin)),
PING((plugin, player) -> Long.toString(player.getPlayer().getPing())), PING((plugin, player) -> Long.toString(player.getPlayer().getPing())),
PREFIX((plugin, player) -> player.getRole().getPrefix().orElse("%luckperms_prefix%")), PREFIX((plugin, player) -> player.getRole().getPrefix()
SUFFIX((plugin, player) -> player.getRole().getSuffix().orElse("%luckperms_suffix%")), .orElse(getPlaceholderFallback(plugin, "%luckperms_prefix%"))),
ROLE((plugin, player) -> player.getRole().getName().orElse("")), SUFFIX((plugin, player) -> player.getRole().getSuffix()
ROLE_DISPLAY_NAME((plugin, player) -> player.getRole().getDisplayName().orElse("")), .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()), ROLE_WEIGHT((plugin, player) -> player.getRoleWeightString()),
SERVER_GROUP((plugin, player) -> player.getGroup().name()), SERVER_GROUP((plugin, player) -> player.getGroup().name()),
SERVER_GROUP_INDEX((plugin, player) -> Integer.toString(player.getServerGroupPosition(plugin))), SERVER_GROUP_INDEX((plugin, player) -> Integer.toString(player.getServerGroupPosition(plugin))),
DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getLastTeamName().orElse(""))), DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getLastTeamName().orElse(""))),
LUCKPERMS_META_((param, plugin, player) -> plugin.getLuckPermsHook() LUCKPERMS_META_((param, plugin, player) -> plugin.getLuckPermsHook()
.map(hook -> hook.getMeta(player.getPlayer(), param)) .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 * 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] : "")); .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<String> replace(@NotNull String format, @NotNull Velocitab plugin, public static CompletableFuture<String> replace(@NotNull String format, @NotNull Velocitab plugin,
@NotNull TabPlayer player) { @NotNull TabPlayer player) {

View File

@ -34,7 +34,7 @@ import java.util.Map;
@Getter @Getter
@Configuration @Configuration
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Settings implements ConfigValidator{ public class Settings implements ConfigValidator {
public static final String CONFIG_HEADER = """ 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.") + "\nTurn this off if you're using scoreboard teams on backend servers.")
private boolean sendScoreboardPackets = true; 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.") @Comment("Whether to sort players in the TAB list.")
private boolean sortPlayers = true; private boolean sortPlayers = true;