Refactor leaderboard management: replace UserConfig-based implementation with new Leaderboard SQL class, update related classes to use LeaderboardManager, and fix query/logic for best time retrieval.

This commit is contained in:
2025-10-20 16:39:35 +02:00
committed by Chaoscaot
parent e6848b27a0
commit 9e9f405e30
4 changed files with 115 additions and 64 deletions
@@ -22,8 +22,9 @@ package de.steamwar.lobby.boatrace;
import de.steamwar.entity.REntity;
import de.steamwar.entity.REntityServer;
import de.steamwar.lobby.LobbySystem;
import de.steamwar.lobby.util.Leaderboard;
import de.steamwar.sql.UserConfig;
import de.steamwar.lobby.util.LeaderboardManager;
import de.steamwar.sql.Leaderboard;
import de.steamwar.sql.SteamwarUser;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Sound;
@@ -43,16 +44,18 @@ import org.bukkit.scheduler.BukkitTask;
import java.util.EventListener;
import static de.steamwar.lobby.util.Leaderboard.renderTime;
import static de.steamwar.lobby.util.LeaderboardManager.renderTime;
public class BoatRace implements EventListener, Listener {
private static final String CONFIG_KEY = "lobby@boatrace";
private static final double MIN_HEIGHT = 4.3;
public static final REntityServer boatNpcServer;
private static boolean oneNotStarted = false;
private static final Leaderboard leaderboard;
private static final LeaderboardManager leaderboard;
static {
boatNpcServer = new REntityServer();
@@ -65,7 +68,7 @@ public class BoatRace implements EventListener, Listener {
new BoatRace(player);
}
});
leaderboard = new Leaderboard(boatNpcServer, "lobby@boatrace", BoatRacePositions.LEADERBOARD, 5);
leaderboard = new LeaderboardManager(boatNpcServer, CONFIG_KEY, BoatRacePositions.LEADERBOARD);
}
private final Player player;
@@ -123,12 +126,11 @@ public class BoatRace implements EventListener, Listener {
HandlerList.unregisterAll(this);
task.cancel();
LobbySystem.getMessage().send("BOAT_RACE_TIME", player, renderTime(time));
String conf = UserConfig.getConfig(player.getUniqueId(), "lobby@boatrace");
long best = Long.parseLong(conf == null ? String.valueOf(Long.MAX_VALUE) : conf);
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
long best = leaderboard.getPlayerTime(user);
if (time < best) {
LobbySystem.getMessage().send("BOAT_RACE_NEW_BEST", player);
UserConfig.updatePlayerConfig(player.getUniqueId(), "lobby@boatrace", String.valueOf(time));
leaderboard.update();
leaderboard.updateBestTime(user, time);
}
} else {
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1);