diff --git a/src/main/java/dev/tatsi/reloadmc/smp/ReloadMC.java b/src/main/java/dev/tatsi/reloadmc/smp/ReloadMC.java index bd57c14..527b053 100644 --- a/src/main/java/dev/tatsi/reloadmc/smp/ReloadMC.java +++ b/src/main/java/dev/tatsi/reloadmc/smp/ReloadMC.java @@ -4,6 +4,7 @@ import dev.tatsi.reloadmc.smp.command.DeathStatsCommand; import dev.tatsi.reloadmc.smp.listener.PlayerDeathListener; import dev.tatsi.reloadmc.smp.listener.PlayerJoinLeaveListener; import dev.tatsi.reloadmc.smp.listener.PrettyChatListener; +import dev.tatsi.reloadmc.smp.listener.TabPingListener; import dev.tatsi.reloadmc.smp.manager.DeathCounterManager; import org.bukkit.plugin.java.JavaPlugin; @@ -19,6 +20,7 @@ public final class ReloadMC extends JavaPlugin { getServer().getPluginManager().registerEvents(new PrettyChatListener(), this); getServer().getPluginManager().registerEvents(new PlayerDeathListener(deathCounterManager), this); getServer().getPluginManager().registerEvents(new PlayerJoinLeaveListener(), this); + getServer().getPluginManager().registerEvents(new TabPingListener(this), this); // Register commands getCommand("deathstats").setExecutor(new DeathStatsCommand(deathCounterManager)); diff --git a/src/main/java/dev/tatsi/reloadmc/smp/listener/TabPingListener.java b/src/main/java/dev/tatsi/reloadmc/smp/listener/TabPingListener.java new file mode 100644 index 0000000..e77faa2 --- /dev/null +++ b/src/main/java/dev/tatsi/reloadmc/smp/listener/TabPingListener.java @@ -0,0 +1,65 @@ +package dev.tatsi.reloadmc.smp.listener; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class TabPingListener implements Listener { + + private final JavaPlugin plugin; + + public TabPingListener(JavaPlugin plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + startPingUpdater(event.getPlayer()); + } + + private void startPingUpdater(Player player) { + new BukkitRunnable() { + @Override + public void run() { + if (!player.isOnline()) { + cancel(); + return; + } + + int ping = player.getPing(); + String pingText = (ping < 0) ? "?? ms" : ping + " ms"; + int online = Bukkit.getOnlinePlayers().size(); + + // --- HEADER --- + Component header = Component.text("\n", NamedTextColor.GRAY) // top padding + .append(Component.text(" » ", NamedTextColor.GRAY)) + .append(Component.text("RLMC SMP ", NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD)) + .append(Component.text("1.21.8", NamedTextColor.GRAY) + .decorate(TextDecoration.BOLD)) + .append(Component.text(" « ", NamedTextColor.GRAY)) + .append(Component.text("\n", NamedTextColor.GRAY)) + .append(Component.text("Online: ", NamedTextColor.GRAY)) + .append(Component.text(online, NamedTextColor.YELLOW)) + .append(Component.text("\n", NamedTextColor.GRAY)); // spacing + + // --- FOOTER --- + Component footer = Component.text("\n", NamedTextColor.GRAY) // obere Leiste + .append(Component.text(" Dein Ping » ", NamedTextColor.GRAY)) // linker Padding + Label + .append(Component.text(pingText, NamedTextColor.YELLOW)) // Ping in Gelb + .append(Component.text(" ", NamedTextColor.GRAY)) // rechter Padding + .append(Component.text("\n", NamedTextColor.GRAY)) // untere Padding-Zeile + .append(Component.text("\n", NamedTextColor.GRAY)); // extra Abstand + + player.sendPlayerListHeaderAndFooter(header, footer); + } + }.runTaskTimerAsynchronously(plugin, 0L, 40L); // alle 2 Sekunden + } +}