From ef7e07c59d4d51132f6444c06d5d2fec0b823e76 Mon Sep 17 00:00:00 2001 From: FreeMonoid <49086127+FreeMonoid@users.noreply.github.com> Date: Fri, 31 Mar 2023 16:21:17 +0300 Subject: [PATCH] Allow setting display name for servers (#30) --- .../velocitab/config/Placeholder.java | 2 +- .../william278/velocitab/config/Settings.java | 17 +++++++++++++++++ .../william278/velocitab/player/TabPlayer.java | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/william278/velocitab/config/Placeholder.java b/src/main/java/net/william278/velocitab/config/Placeholder.java index 8007f65..2c43c93 100644 --- a/src/main/java/net/william278/velocitab/config/Placeholder.java +++ b/src/main/java/net/william278/velocitab/config/Placeholder.java @@ -23,7 +23,7 @@ public enum Placeholder { CURRENT_DATE((plugin, player) -> DateTimeFormatter.ofPattern("dd MMM yyyy").format(LocalDateTime.now())), CURRENT_TIME((plugin, player) -> DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now())), USERNAME((plugin, player) -> plugin.getFormatter().escape(player.getPlayer().getUsername())), - SERVER((plugin, player) -> player.getServerName()), + SERVER((plugin, player) -> player.getServerDisplayName(plugin)), PING((plugin, player) -> Long.toString(player.getPlayer().getPing())), PREFIX((plugin, player) -> player.getRole().getPrefix().orElse("")), SUFFIX((plugin, player) -> player.getRole().getSuffix().orElse("")), diff --git a/src/main/java/net/william278/velocitab/config/Settings.java b/src/main/java/net/william278/velocitab/config/Settings.java index f662ba1..fef5911 100644 --- a/src/main/java/net/william278/velocitab/config/Settings.java +++ b/src/main/java/net/william278/velocitab/config/Settings.java @@ -56,6 +56,12 @@ public class Settings { @YamlComment("Only show other players on a server that is part of the same server group as the player.") private boolean onlyListPlayersInSameGroup = true; + @Getter + @YamlKey("server_display_names") + @YamlComment("Define custom names to be shown in the TAB list for specific server names.\n" + + "If no custom display name is provided for a server, its original name will be used.") + private Map serverDisplayNames = Map.of("very-long-server-name", "VLSN"); + @YamlKey("enable_papi_hook") private boolean enablePapiHook = true; @@ -110,6 +116,17 @@ public class Settings { formats.getOrDefault(serverGroup, "%username%")); } + /** + * Get display name for the server + * + * @param serverName The server name + * @return The display name, or the server name if no display name is defined + */ + @NotNull + public String getServerDisplayName(@NotNull String serverName) { + return serverDisplayNames.getOrDefault(serverName, serverName); + } + /** * Get the server group that a server is in * diff --git a/src/main/java/net/william278/velocitab/player/TabPlayer.java b/src/main/java/net/william278/velocitab/player/TabPlayer.java index 0d267fd..a2c4a81 100644 --- a/src/main/java/net/william278/velocitab/player/TabPlayer.java +++ b/src/main/java/net/william278/velocitab/player/TabPlayer.java @@ -34,6 +34,12 @@ public final class TabPlayer implements Comparable { return role; } + /** + * Get the server name the player is currently on. + * Isn't affected by server aliases defined in the config. + * + * @return The server name + */ @NotNull public String getServerName() { return player.getCurrentServer() @@ -41,6 +47,18 @@ public final class TabPlayer implements Comparable { .orElse("unknown"); } + /** + * Get the display name of the server the player is currently on. + * Affected by server aliases defined in the config. + * + * @param plugin The plugin instance + * @return The display name of the server + */ + @NotNull + public String getServerDisplayName(@NotNull Velocitab plugin) { + return plugin.getSettings().getServerDisplayName(getServerName()); + } + @NotNull public CompletableFuture getDisplayName(@NotNull Velocitab plugin) { final String serverGroup = plugin.getSettings().getServerGroup(getServerName());