[Scoreboard] Fix line score recalculate issue (#1632)

This commit is contained in:
NEZNAMY committed 2026-03-30 19:43:59 +02:00
1 parent 66cb30d235
commit 655bc176fa
2 files changed
+8 -8

No files matched your search

@@ -1,7 +1,8 @@
package me.neznamy.tab.shared.features.scoreboard;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import me.neznamy.tab.shared.Property;
import me.neznamy.tab.shared.chat.component.TabComponent;
import me.neznamy.tab.shared.cpu.ThreadExecutor;
@@ -16,7 +17,7 @@ import org.jetbrains.annotations.Nullable;
/**
* Feature refreshing score / NumberFormat in a scoreboard line for players.
*/
@RequiredArgsConstructor
@AllArgsConstructor
public class ScoreRefresher extends RefreshableFeature implements CustomThreaded {
private static final StringToComponentCache cache = new StringToComponentCache("Scoreboard NumberFormat", 1000);
@@ -25,7 +26,7 @@ public class ScoreRefresher extends RefreshableFeature implements CustomThreaded
@NonNull private final ScoreboardLine line;
/** Line number to use if nothing is configured (1-15) */
private final int lineNumber;
@Setter private int lineNumber;
/** Configured score for <1.20.3 (can be null if not configured) */
@Nullable private final String score;
@@ -204,16 +204,15 @@ public class ScoreboardImpl extends RefreshableFeature implements me.neznamy.tab
* Player to recalculate scores for
*/
public void recalculateScores(@NonNull TabPlayer p) {
List<Line> linesReversed = new ArrayList<>(lines);
Collections.reverse(linesReversed);
int score = 0;
for (Line line : linesReversed) {
int score = 1;
for (Line line : lines) {
Property pr = p.scoreboardData.lineProperties.get((ScoreboardLine) line);
if (pr.getCurrentRawValue().isEmpty() || (!pr.getCurrentRawValue().isEmpty() && !pr.get().isEmpty())) {
((ScoreboardLine)line).getScoreRefresher().setLineNumber(score++);
p.getScoreboard().setScore(
ScoreboardManagerImpl.OBJECTIVE_NAME,
((ScoreboardLine)line).getPlayerName(p),
((ScoreboardLine)line).getScoreRefresher().getScore(p, score++),
((ScoreboardLine)line).getScoreRefresher().getScore(p),
null, // Makes no sense for TAB
((ScoreboardLine) line).getScoreRefresher().getNumberFormat(p)
);