From f56a3765c6462a2dd7e9c5eea69b7699b6cd77ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Thu, 8 Oct 2026 00:11:28 +0200 Subject: [PATCH] Show each player's current score in the tab list --- .../endlessjumper/EndlessJumper.java | 10 +++++- .../minecraft/endlessjumper/ScoreTab.java | 34 +++++++++++++++++++ .../generator/JumpGenerator.java | 5 ++- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/main/java/eu/mhsl/minecraft/endlessjumper/ScoreTab.java diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java index ffb6b9c..1ba9bc3 100644 --- a/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java @@ -11,6 +11,7 @@ import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; import net.minestom.server.event.player.PlayerBlockBreakEvent; import net.minestom.server.event.player.PlayerDisconnectEvent; import net.minestom.server.event.player.PlayerMoveEvent; +import net.minestom.server.event.player.PlayerSpawnEvent; import net.minestom.server.instance.InstanceContainer; import net.minestom.server.instance.InstanceManager; import net.minestom.server.instance.block.Block; @@ -82,7 +83,14 @@ public class EndlessJumper { eventHandler.addListener(PlayerBlockBreakEvent.class, event -> event.setCancelled(true)); - eventHandler.addListener(PlayerDisconnectEvent.class, event -> games.remove(event.getPlayer())); + eventHandler.addListener(PlayerSpawnEvent.class, event -> { + if(event.isFirstSpawn()) ScoreTab.join(event.getPlayer()); + }); + + eventHandler.addListener(PlayerDisconnectEvent.class, event -> { + games.remove(event.getPlayer()); + ScoreTab.leave(event.getPlayer()); + }); server.start("0.0.0.0", 25501); diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/ScoreTab.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/ScoreTab.java new file mode 100644 index 0000000..2b3fc03 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/ScoreTab.java @@ -0,0 +1,34 @@ +package eu.mhsl.minecraft.endlessjumper; + +import net.minestom.server.entity.Player; +import net.minestom.server.network.packet.server.play.ScoreboardObjectivePacket; +import net.minestom.server.scoreboard.TabList; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Zeigt den aktuellen Fortschritt jedes Spielers als Zahl in der Tab-Liste. + */ +public class ScoreTab { + private static final TabList TAB_LIST = new TabList("jumps", ScoreboardObjectivePacket.Type.INTEGER); + private static final Map scores = new ConcurrentHashMap<>(); + + public static void join(Player player) { + TAB_LIST.addViewer(player); + scores.put(player, 0); + // dem neuen Spieler auch die Scores aller anderen zeigen + scores.forEach(TAB_LIST::updateScore); + } + + public static void update(Player player, int score) { + if(!scores.containsKey(player)) return; + scores.put(player, score); + TAB_LIST.updateScore(player, score); + } + + public static void leave(Player player) { + scores.remove(player); + TAB_LIST.removeViewer(player); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java index 277dfa6..a9f5389 100644 --- a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java @@ -4,6 +4,7 @@ import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.title.Title; +import eu.mhsl.minecraft.endlessjumper.ScoreTab; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; import net.minestom.server.instance.InstanceContainer; @@ -50,7 +51,9 @@ public class JumpGenerator { float pitch = 1 + (combo * 0.025f); this.player.playSound(Sound.sound(SoundEvent.BLOCK_NOTE_BLOCK_PLING, Sound.Source.MASTER, 0.1f, pitch)); this.player.showTitle(Title.title(Component.text(""), Component.text((combo)+"", TextColor.color(255, 69, 0)))); - this.player.setLevel((this.blocks.size()-this.preview-1)); + int score = Math.max(0, this.blocks.size()-this.preview-1); + this.player.setLevel(score); + ScoreTab.update(this.player, score); Random r = new Random(); int index = this.blocks.size();