3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-26 16:12:46 +01:00

Fix instances of invisible/flickering scoreboards

Dieser Commit ist enthalten in:
Camotoy 2021-10-22 23:31:40 -04:00
Ursprung a7aa255784
Commit 9a159bf8be
2 geänderte Dateien mit 7 neuen und 19 gelöschten Zeilen

Datei anzeigen

@ -150,20 +150,6 @@ public final class Objective {
updateType = UpdateType.REMOVE; updateType = UpdateType.REMOVE;
} }
public ScoreboardPosition getPositionCategory() {
return switch (displaySlot) {
case PLAYER_LIST -> ScoreboardPosition.PLAYER_LIST;
case BELOW_NAME -> ScoreboardPosition.BELOW_NAME;
default -> ScoreboardPosition.SIDEBAR;
};
}
public boolean hasTeamColor() {
return displaySlot != ScoreboardPosition.PLAYER_LIST &&
displaySlot != ScoreboardPosition.BELOW_NAME &&
displaySlot != ScoreboardPosition.SIDEBAR;
}
public TeamColor getTeamColor() { public TeamColor getTeamColor() {
return switch (displaySlot) { return switch (displaySlot) {
case SIDEBAR_TEAM_RED -> TeamColor.RED; case SIDEBAR_TEAM_RED -> TeamColor.RED;

Datei anzeigen

@ -104,7 +104,7 @@ public final class Scoreboard {
Objective storedObjective = objectiveSlots.get(displaySlot); Objective storedObjective = objectiveSlots.get(displaySlot);
if (storedObjective != null && storedObjective != objective) { if (storedObjective != null && storedObjective != objective) {
objective.pendingRemove(); storedObjective.pendingRemove();
} }
objectiveSlots.put(displaySlot, objective); objectiveSlots.put(displaySlot, objective);
@ -166,6 +166,12 @@ public final class Scoreboard {
correctSidebar = objectiveSlots.get(ScoreboardPosition.SIDEBAR); correctSidebar = objectiveSlots.get(ScoreboardPosition.SIDEBAR);
} }
for (Objective objective : removedObjectives) {
// Deletion must be handled before the active objectives are handled - otherwise if a scoreboard display is changed before the current
// scoreboard is removed, the client can crash
deleteObjective(objective, true);
}
handleObjective(objectiveSlots.get(ScoreboardPosition.PLAYER_LIST), addScores, removeScores); handleObjective(objectiveSlots.get(ScoreboardPosition.PLAYER_LIST), addScores, removeScores);
handleObjective(correctSidebar, addScores, removeScores); handleObjective(correctSidebar, addScores, removeScores);
handleObjective(objectiveSlots.get(ScoreboardPosition.BELOW_NAME), addScores, removeScores); handleObjective(objectiveSlots.get(ScoreboardPosition.BELOW_NAME), addScores, removeScores);
@ -194,10 +200,6 @@ public final class Scoreboard {
session.sendUpstreamPacket(setScorePacket); session.sendUpstreamPacket(setScorePacket);
} }
for (Objective objective : removedObjectives) {
deleteObjective(objective, true);
}
lastAddScoreCount = addScores.size(); lastAddScoreCount = addScores.size();
lastRemoveScoreCount = removeScores.size(); lastRemoveScoreCount = removeScores.size();
} }