Skip to content

Commit

Permalink
Added automatic update of player display name in tab list (#12)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
Fulminazzo and Netherwhal authored Mar 10, 2024
1 parent e0c974a commit 85fb52b
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 41 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
}

group 'net.simplyvanilla'
version '0.2.1'
version '0.2.2'

java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/net/simplyvanilla/simplytab/SimplyTabPlugin.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
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;
import net.simplyvanilla.simplytab.packets.PacketListener;
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 {

Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,30 @@
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;
import net.megavex.scoreboardlibrary.api.team.TeamDisplay;
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);
}

Expand All @@ -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());
}

Expand Down
32 changes: 18 additions & 14 deletions src/main/java/net/simplyvanilla/simplytab/tab/TablistManager.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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);
}, () -> {
});
Expand All @@ -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("<newline>", this.javaPlugin.getConfig().getStringList("tab.header")), resolvers),
miniMessage().deserialize(String.join("<newline>", this.javaPlugin.getConfig().getStringList("tab.footer")), resolvers)
miniMessage().deserialize(String.join("<newline>", this.plugin.getConfig().getStringList("tab.header")), resolvers),
miniMessage().deserialize(String.join("<newline>", this.plugin.getConfig().getStringList("tab.footer")), resolvers)
);
}

Expand All @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,3 @@ sorting:

group-prefix: ''
group-suffix: ''
group-player-color: ''
tab-displayname: '<player_displayname>'

0 comments on commit 85fb52b

Please sign in to comment.