Show each player's current score in the tab list

This commit is contained in:
MineTec committed 2026-10-08 00:11:28 +02:00
1 parent 9e1edbfc7c
commit f56a3765c6
3 files changed
+47 -2

No files matched your search

@@ -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);
@@ -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<Player, Integer> 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);
}
}
@@ -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();