forked from Upstream/Velocitab
Add sorting by server name, customise sort element order
This commit is contained in:
parent
68f17b14a1
commit
28c5398c6b
@ -28,7 +28,7 @@ public enum Placeholder {
|
|||||||
PREFIX((plugin, player) -> player.getRole().getPrefix().orElse("")),
|
PREFIX((plugin, player) -> player.getRole().getPrefix().orElse("")),
|
||||||
SUFFIX((plugin, player) -> player.getRole().getSuffix().orElse("")),
|
SUFFIX((plugin, player) -> player.getRole().getSuffix().orElse("")),
|
||||||
ROLE((plugin, player) -> player.getRole().getName().orElse("")),
|
ROLE((plugin, player) -> player.getRole().getName().orElse("")),
|
||||||
DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getTeamName()));
|
DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getTeamName(plugin)));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to replace placeholders with a real value
|
* Function to replace placeholders with a real value
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package net.william278.velocitab.config;
|
package net.william278.velocitab.config;
|
||||||
|
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.william278.annotaml.YamlComment;
|
import net.william278.annotaml.YamlComment;
|
||||||
import net.william278.annotaml.YamlFile;
|
import net.william278.annotaml.YamlFile;
|
||||||
import net.william278.annotaml.YamlKey;
|
import net.william278.annotaml.YamlKey;
|
||||||
import net.william278.velocitab.Velocitab;
|
import net.william278.velocitab.Velocitab;
|
||||||
|
import net.william278.velocitab.player.TabPlayer;
|
||||||
import org.apache.commons.text.StringEscapeUtils;
|
import org.apache.commons.text.StringEscapeUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -56,6 +56,13 @@ public class Settings {
|
|||||||
@YamlComment("If you are using MINIMESSAGE formatting, enable this to support MiniPlaceholders in formatting.")
|
@YamlComment("If you are using MINIMESSAGE formatting, enable this to support MiniPlaceholders in formatting.")
|
||||||
private boolean enableMiniPlaceholdersHook = true;
|
private boolean enableMiniPlaceholdersHook = true;
|
||||||
|
|
||||||
|
@YamlKey("sort_players_by")
|
||||||
|
@YamlComment("Ordered list of elements by which players should be sorted. (ROLE_WEIGHT, ROLE_NAME and SERVER are supported)")
|
||||||
|
private List<TabPlayer.SortableElement> sortPlayersBy = List.of(
|
||||||
|
TabPlayer.SortableElement.ROLE_WEIGHT,
|
||||||
|
TabPlayer.SortableElement.ROLE_NAME
|
||||||
|
);
|
||||||
|
|
||||||
@YamlKey("update_rate")
|
@YamlKey("update_rate")
|
||||||
@YamlComment("How often to periodically update the TAB list, including header and footer, for all users.\nWill only update on player join/leave if set to 0.")
|
@YamlComment("How often to periodically update the TAB list, including header and footer, for all users.\nWill only update on player join/leave if set to 0.")
|
||||||
private int updateRate = 0;
|
private int updateRate = 0;
|
||||||
@ -109,6 +116,11 @@ public class Settings {
|
|||||||
return enableMiniPlaceholdersHook;
|
return enableMiniPlaceholdersHook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public List<TabPlayer.SortableElement> getSortingElementList() {
|
||||||
|
return sortPlayersBy;
|
||||||
|
}
|
||||||
|
|
||||||
public int getUpdateRate() {
|
public int getUpdateRate() {
|
||||||
return updateRate;
|
return updateRate;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@ import net.william278.velocitab.tab.PlayerTabList;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class TabPlayer implements Comparable<TabPlayer> {
|
public final class TabPlayer implements Comparable<TabPlayer> {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
@ -34,7 +36,7 @@ public final class TabPlayer implements Comparable<TabPlayer> {
|
|||||||
public String getServerName() {
|
public String getServerName() {
|
||||||
return player.getCurrentServer()
|
return player.getCurrentServer()
|
||||||
.map(serverConnection -> serverConnection.getServerInfo().getName())
|
.map(serverConnection -> serverConnection.getServerInfo().getName())
|
||||||
.orElse("Unknown");
|
.orElse("unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@ -46,8 +48,10 @@ public final class TabPlayer implements Comparable<TabPlayer> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public String getTeamName() {
|
public String getTeamName(@NotNull Velocitab plugin) {
|
||||||
return role.getWeightString(highestWeight) + role.getName().map(name -> "-" + name).orElse("");
|
return plugin.getSettings().getSortingElementList().stream()
|
||||||
|
.map(element -> element.resolve(this, plugin))
|
||||||
|
.collect(Collectors.joining("-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendHeaderAndFooter(@NotNull PlayerTabList tabList) {
|
public void sendHeaderAndFooter(@NotNull PlayerTabList tabList) {
|
||||||
@ -68,4 +72,28 @@ public final class TabPlayer implements Comparable<TabPlayer> {
|
|||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
return obj instanceof TabPlayer other && player.getUniqueId().equals(other.player.getUniqueId());
|
return obj instanceof TabPlayer other && player.getUniqueId().equals(other.player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Elements for sorting players
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public enum SortableElement {
|
||||||
|
ROLE_WEIGHT((player, plugin) -> player.getRole().getWeightString(player.highestWeight)),
|
||||||
|
ROLE_NAME((player, plugin) -> player.getRole().getName()
|
||||||
|
.map(name -> name.length() > 3 ? name.substring(0, 3) : name)
|
||||||
|
.orElse("")),
|
||||||
|
SERVER_NAME((player, plugin) -> player.getServerName());
|
||||||
|
|
||||||
|
private final BiFunction<TabPlayer, Velocitab, String> elementResolver;
|
||||||
|
|
||||||
|
SortableElement(@NotNull BiFunction<TabPlayer, Velocitab, String> elementResolver) {
|
||||||
|
this.elementResolver = elementResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private String resolve(@NotNull TabPlayer tabPlayer, @NotNull Velocitab plugin) {
|
||||||
|
return elementResolver.apply(tabPlayer, plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public class PlayerTabList {
|
|||||||
if (serversInGroup.isPresent() && !serversInGroup.get().contains(player.getServerName())) {
|
if (serversInGroup.isPresent() && !serversInGroup.get().contains(player.getServerName())) {
|
||||||
continue; // Skip players on other servers
|
continue; // Skip players on other servers
|
||||||
}
|
}
|
||||||
playerRoles.put(player.getPlayer().getUsername(), player.getTeamName());
|
playerRoles.put(player.getPlayer().getUsername(), player.getTeamName(plugin));
|
||||||
tabList.getEntries().stream()
|
tabList.getEntries().stream()
|
||||||
.filter(e -> e.getProfile().getId().equals(player.getPlayer().getUniqueId())).findFirst()
|
.filter(e -> e.getProfile().getId().equals(player.getPlayer().getUniqueId())).findFirst()
|
||||||
.ifPresentOrElse(
|
.ifPresentOrElse(
|
||||||
@ -118,7 +118,7 @@ public class PlayerTabList {
|
|||||||
);
|
);
|
||||||
plugin.getScoreboardManager().updateRoles(
|
plugin.getScoreboardManager().updateRoles(
|
||||||
player.getPlayer(),
|
player.getPlayer(),
|
||||||
newPlayer.getTeamName(),
|
newPlayer.getTeamName(plugin),
|
||||||
newPlayer.getPlayer().getUsername()
|
newPlayer.getPlayer().getUsername()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ public class PlayerTabList {
|
|||||||
.filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst()
|
.filter(e -> e.getProfile().getId().equals(tabPlayer.getPlayer().getUniqueId())).findFirst()
|
||||||
.ifPresent(entry -> entry.setDisplayName(displayName));
|
.ifPresent(entry -> entry.setDisplayName(displayName));
|
||||||
plugin.getScoreboardManager().updateRoles(player.getPlayer(),
|
plugin.getScoreboardManager().updateRoles(player.getPlayer(),
|
||||||
tabPlayer.getTeamName(), tabPlayer.getPlayer().getUsername());
|
tabPlayer.getTeamName(plugin), tabPlayer.getPlayer().getUsername());
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user