From 85fb52bc9279e19cda324983f71e3e197399a271 Mon Sep 17 00:00:00 2001 From: Alexander <88254229+Fulminazzo@users.noreply.github.com> Date: Sun, 10 Mar 2024 13:28:05 +0100 Subject: [PATCH] Added automatic update of player display name in tab list (#12) * Added automatic update of player display name in tab list * Added getPrefix and getSuffix methods * Reimplemented using new plugin methods * Changed plugin variable to SimplyTabPlugin * Fixed player list name ignoring prefix and suffix of player * Removed unused parameter tab-displayname * cleanups --------- Co-authored-by: Netherwhal --- build.gradle | 2 +- .../simplytab/SimplyTabPlugin.java | 19 +++++++++++ .../simplytab/rank/TablistRankHandler.java | 27 ++-------------- .../simplytab/tab/TablistManager.java | 32 +++++++++++-------- src/main/resources/config.yml | 2 -- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/build.gradle b/build.gradle index 78aba2c..b1a0a3d 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group 'net.simplyvanilla' -version '0.2.1' +version '0.2.2' java { toolchain.languageVersion.set(JavaLanguageVersion.of(17)) diff --git a/src/main/java/net/simplyvanilla/simplytab/SimplyTabPlugin.java b/src/main/java/net/simplyvanilla/simplytab/SimplyTabPlugin.java index 7d3d4b2..2b8c566 100644 --- a/src/main/java/net/simplyvanilla/simplytab/SimplyTabPlugin.java +++ b/src/main/java/net/simplyvanilla/simplytab/SimplyTabPlugin.java @@ -1,5 +1,8 @@ package net.simplyvanilla.simplytab; +import io.github.miniplaceholders.api.MiniPlaceholders; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.megavex.scoreboardlibrary.api.ScoreboardLibrary; import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException; import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary; @@ -7,7 +10,9 @@ import net.simplyvanilla.simplytab.rank.TablistRankHandler; import net.simplyvanilla.simplytab.tab.TablistManager; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; public class SimplyTabPlugin extends JavaPlugin { @@ -49,6 +54,20 @@ public static boolean isFolia() { } } + public @NotNull Component getPrefix(Player player) { + return MiniMessage.miniMessage().deserialize( + getConfig().getString("group-prefix", ""), + MiniPlaceholders.getAudienceGlobalPlaceholders(player) + ); + } + + public @NotNull Component getSuffix(Player player) { + return MiniMessage.miniMessage().deserialize( + getConfig().getString("group-suffix", ""), + MiniPlaceholders.getAudienceGlobalPlaceholders(player) + ); + } + public ScoreboardLibrary getScoreboardLibrary() { return this.scoreboardLibrary; } diff --git a/src/main/java/net/simplyvanilla/simplytab/rank/TablistRankHandler.java b/src/main/java/net/simplyvanilla/simplytab/rank/TablistRankHandler.java index a449a1f..c1b0641 100644 --- a/src/main/java/net/simplyvanilla/simplytab/rank/TablistRankHandler.java +++ b/src/main/java/net/simplyvanilla/simplytab/rank/TablistRankHandler.java @@ -1,8 +1,6 @@ package net.simplyvanilla.simplytab.rank; import io.github.miniplaceholders.api.MiniPlaceholders; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; @@ -10,27 +8,23 @@ import net.megavex.scoreboardlibrary.api.team.TeamManager; import net.simplyvanilla.simplytab.SimplyTabPlugin; import org.bukkit.Bukkit; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class TablistRankHandler implements Listener { private final SimplyTabPlugin plugin; private final TeamManager teamManager; - private final String groupPlayerColor; - private final String tabDisplayName; public TablistRankHandler(SimplyTabPlugin plugin) { this.plugin = plugin; this.teamManager = this.plugin.getScoreboardLibrary().createTeamManager(); - this.groupPlayerColor = plugin.getConfig().getString("group-player-color"); - this.tabDisplayName = plugin.getConfig().getString("tab-displayname"); - plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -56,21 +50,6 @@ public void createTab(Player player) { String teamName = this.getTeamName(player); ScoreboardTeam scoreboardTeam = this.teamManager.createIfAbsent(teamName); TeamDisplay display = scoreboardTeam.defaultDisplay(); - - display.prefix(MiniMessage.miniMessage().deserialize( - this.plugin.getConfig().getString("group-prefix", ""), - MiniPlaceholders.getAudienceGlobalPlaceholders(player) - )); - - display.suffix(MiniMessage.miniMessage().deserialize( - this.plugin.getConfig().getString("group-suffix", ""), - MiniPlaceholders.getAudienceGlobalPlaceholders(player) - )); - - Component component = MiniMessage.miniMessage().deserialize(this.groupPlayerColor, MiniPlaceholders.getAudienceGlobalPlaceholders(player)); - - display.playerColor(NamedTextColor.nearestTo(component.style().color() == null ? NamedTextColor.WHITE : component.style().color())); - display.displayName(MiniMessage.miniMessage().deserialize(this.tabDisplayName, MiniPlaceholders.getAudienceGlobalPlaceholders(player))); display.addEntry(player.getName()); } diff --git a/src/main/java/net/simplyvanilla/simplytab/tab/TablistManager.java b/src/main/java/net/simplyvanilla/simplytab/tab/TablistManager.java index ab524bd..8d1a181 100644 --- a/src/main/java/net/simplyvanilla/simplytab/tab/TablistManager.java +++ b/src/main/java/net/simplyvanilla/simplytab/tab/TablistManager.java @@ -1,10 +1,10 @@ package net.simplyvanilla.simplytab.tab; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.simplyvanilla.simplytab.SimplyTabPlugin; import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; import java.util.concurrent.TimeUnit; @@ -16,20 +16,20 @@ import static net.kyori.adventure.text.minimessage.tag.resolver.TagResolver.resolver; public class TablistManager { - private final JavaPlugin javaPlugin; + private final SimplyTabPlugin plugin; private final TpsProvider tpsProvider; - public TablistManager(JavaPlugin plugin) { - this.javaPlugin = plugin; + public TablistManager(SimplyTabPlugin plugin) { + this.plugin = plugin; this.tpsProvider = SimplyTabPlugin.isFolia() ? new FoliaTpsProvider() : TpsProvider.DEFAULT; - this.javaPlugin.getServer().getAsyncScheduler().runAtFixedRate(this.javaPlugin, this::updateTablist, 0, 1, TimeUnit.SECONDS); + this.plugin.getServer().getAsyncScheduler().runAtFixedRate(this.plugin, this::updateTablist, 0, 1, TimeUnit.SECONDS); } private void updateTablist(ScheduledTask task) { - for (Player onlinePlayer : this.javaPlugin.getServer().getOnlinePlayers()) { + for (Player onlinePlayer : this.plugin.getServer().getOnlinePlayers()) { if (SimplyTabPlugin.isFolia()) { - onlinePlayer.getScheduler().run(this.javaPlugin, scheduledTask -> { + onlinePlayer.getScheduler().run(this.plugin, scheduledTask -> { this.updateTablistForPlayer(onlinePlayer); }, () -> { }); @@ -40,19 +40,23 @@ private void updateTablist(ScheduledTask task) { } private void updateTablistForPlayer(Player player) { + Component component = this.plugin.getPrefix(player) + .append(player.displayName()) + .append(this.plugin.getSuffix(player)); + player.playerListName(component); TagResolver tpsResolver = resolver("tps", inserting(miniMessage().deserialize(this.getTps()))); TagResolver resolvers = resolver( getAudienceGlobalPlaceholders(player), tpsResolver, - resolver("mc-version", inserting(text(this.javaPlugin.getServer().getMinecraftVersion()))), - resolver("online-count", inserting(text(valueOf(this.javaPlugin.getServer().getOnlinePlayers().size())))) + resolver("mc-version", inserting(text(this.plugin.getServer().getMinecraftVersion()))), + resolver("online-count", inserting(text(valueOf(this.plugin.getServer().getOnlinePlayers().size())))) ); player.sendPlayerListHeaderAndFooter( - miniMessage().deserialize(String.join("", this.javaPlugin.getConfig().getStringList("tab.header")), resolvers), - miniMessage().deserialize(String.join("", this.javaPlugin.getConfig().getStringList("tab.footer")), resolvers) + miniMessage().deserialize(String.join("", this.plugin.getConfig().getStringList("tab.header")), resolvers), + miniMessage().deserialize(String.join("", this.plugin.getConfig().getStringList("tab.footer")), resolvers) ); } @@ -61,9 +65,9 @@ private String getTps() { String absoluteTps = valueOf((int) tps); - var placeholder = this.javaPlugin.getConfig().getString("tab.tps.*", "%value%"); - if (this.javaPlugin.getConfig().contains("tab.tps.%s".formatted(absoluteTps))) { - placeholder = this.javaPlugin.getConfig().getString("tab.tps.%s".formatted(absoluteTps), "%value%"); + var placeholder = this.plugin.getConfig().getString("tab.tps.*", "%value%"); + if (this.plugin.getConfig().contains("tab.tps.%s".formatted(absoluteTps))) { + placeholder = this.plugin.getConfig().getString("tab.tps.%s".formatted(absoluteTps), "%value%"); } String formattedTps = String.format("%.2f", tps); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9d79795..a7bb760 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -32,5 +32,3 @@ sorting: group-prefix: '' group-suffix: '' -group-player-color: '' -tab-displayname: ''