From 8ad443f4fc01383b3fce00fde952c024d8967d0c Mon Sep 17 00:00:00 2001 From: William Date: Sun, 19 Feb 2023 13:05:02 +0000 Subject: [PATCH] Fix role sort order --- .../java/net/william278/velocitab/Velocitab.java | 3 ++- .../velocitab/luckperms/LuckPermsHook.java | 13 +++++++++++++ .../java/net/william278/velocitab/player/Role.java | 4 ++-- .../net/william278/velocitab/player/TabPlayer.java | 4 ++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/william278/velocitab/Velocitab.java b/src/main/java/net/william278/velocitab/Velocitab.java index 3bbf66e..4748090 100644 --- a/src/main/java/net/william278/velocitab/Velocitab.java +++ b/src/main/java/net/william278/velocitab/Velocitab.java @@ -104,7 +104,8 @@ public class Velocitab { @NotNull public TabPlayer getTabPlayer(@NotNull Player player) { - return new TabPlayer(player, getLuckPerms().map(hook -> hook.getPlayerRole(player)).orElse(Role.DEFAULT_ROLE)); + return new TabPlayer(player, getLuckPerms().map(hook -> hook.getPlayerRole(player)).orElse(Role.DEFAULT_ROLE), + getLuckPerms().map(LuckPermsHook::getHighestWeight).orElse(0)); } } diff --git a/src/main/java/net/william278/velocitab/luckperms/LuckPermsHook.java b/src/main/java/net/william278/velocitab/luckperms/LuckPermsHook.java index 26ab201..6de99ff 100644 --- a/src/main/java/net/william278/velocitab/luckperms/LuckPermsHook.java +++ b/src/main/java/net/william278/velocitab/luckperms/LuckPermsHook.java @@ -19,6 +19,7 @@ import java.util.UUID; public class LuckPermsHook { + private int highestWeight = Role.DEFAULT_WEIGHT; private final Velocitab plugin; private final LuckPerms api; @@ -60,6 +61,18 @@ public class LuckPermsHook { return group.getWeight(); } + public int getHighestWeight() { + if (highestWeight == Role.DEFAULT_WEIGHT) { + api.getGroupManager().getLoadedGroups().forEach(group -> { + final OptionalInt weight = group.getWeight(); + if (weight.isPresent() && weight.getAsInt() > highestWeight) { + highestWeight = weight.getAsInt(); + } + }); + } + return highestWeight; + } + private User getUser(@NotNull UUID uuid) { return api.getUserManager().getUser(uuid); } diff --git a/src/main/java/net/william278/velocitab/player/Role.java b/src/main/java/net/william278/velocitab/player/Role.java index 0ad3727..fcf8bf9 100644 --- a/src/main/java/net/william278/velocitab/player/Role.java +++ b/src/main/java/net/william278/velocitab/player/Role.java @@ -41,7 +41,7 @@ public class Role implements Comparable { } @NotNull - public String getStringComparableWeight() { - return String.format("%03d", weight); + public String getStringComparableWeight(int highestWeight) { + return String.format("%0" + (highestWeight + "").length() + "d", highestWeight - weight); } } diff --git a/src/main/java/net/william278/velocitab/player/TabPlayer.java b/src/main/java/net/william278/velocitab/player/TabPlayer.java index 5e27e39..f1f3d74 100644 --- a/src/main/java/net/william278/velocitab/player/TabPlayer.java +++ b/src/main/java/net/william278/velocitab/player/TabPlayer.java @@ -22,10 +22,10 @@ public final class TabPlayer implements Comparable { private final Role role; private final GameProfile profile; - public TabPlayer(@NotNull Player player, @NotNull Role role) { + public TabPlayer(@NotNull Player player, @NotNull Role role, int highestWeight) { this.player = player; this.role = role; - final String profileName = role.getStringComparableWeight() + "-" + getServerName() + "-" + player.getUsername(); + final String profileName = role.getStringComparableWeight(highestWeight) + getServerName() + player.getUsername(); this.profile = new GameProfile( new UUID(0, new Random().nextLong()), profileName.length() > 16 ? profileName.substring(0, 16) : profileName,