3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-11-20 06:50:09 +01:00

Allow scores and teams to update more than once every millisecond

Dieser Commit ist enthalten in:
Tim203 2021-10-04 20:46:38 +02:00
Ursprung 11bc083885
Commit 6011520043
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 064EE9F5BF7C3EE8
3 geänderte Dateien mit 45 neuen und 37 gelöschten Zeilen

Datei anzeigen

@ -59,6 +59,10 @@ public final class Score {
return name; return name;
} }
public int getScore() {
return currentData.getScore();
}
public Score setScore(int score) { public Score setScore(int score) {
currentData.score = score; currentData.score = score;
return this; return this;
@ -90,14 +94,14 @@ public final class Score {
public Score setUpdateType(UpdateType updateType) { public Score setUpdateType(UpdateType updateType) {
if (updateType != UpdateType.NOTHING) { if (updateType != UpdateType.NOTHING) {
currentData.updateTime = System.currentTimeMillis(); currentData.changed = true;
} }
currentData.updateType = updateType; currentData.updateType = updateType;
return this; return this;
} }
public boolean shouldUpdate() { public boolean shouldUpdate() {
return cachedData == null || currentData.updateTime > cachedData.updateTime || return cachedData == null || currentData.changed ||
(currentData.team != null && currentData.team.shouldUpdate()); (currentData.team != null && currentData.team.shouldUpdate());
} }
@ -112,7 +116,7 @@ public final class Score {
cachedData.updateType = currentData.updateType; cachedData.updateType = currentData.updateType;
} }
cachedData.updateTime = currentData.updateTime; currentData.changed = false;
cachedData.team = currentData.team; cachedData.team = currentData.team;
cachedData.score = currentData.score; cachedData.score = currentData.score;
@ -127,7 +131,7 @@ public final class Score {
@Getter @Getter
public static final class ScoreData { public static final class ScoreData {
private UpdateType updateType; private UpdateType updateType;
private long updateTime; private boolean changed;
private Team team; private Team team;
private int score; private int score;

Datei anzeigen

@ -135,35 +135,6 @@ public final class Scoreboard {
return team; return team;
} }
public Objective getObjective(String objectiveName) {
return objectives.get(objectiveName);
}
public Collection<Objective> getObjectives() {
return objectives.values();
}
public Team getTeam(String teamName) {
return teams.get(teamName);
}
public void unregisterObjective(String objectiveName) {
Objective objective = getObjective(objectiveName);
if (objective != null) {
objective.pendingRemove();
}
}
public void removeTeam(String teamName) {
Team remove = teams.remove(teamName);
if (remove != null) {
remove.setUpdateType(REMOVE);
// We need to use the direct entities list here, so #refreshSessionPlayerDisplays also updates accordingly
// With the player's lack of a team in visibility checks
updateEntityNames(remove, remove.getEntities(), true);
}
}
public void onUpdate() { public void onUpdate() {
List<ScoreInfo> addScores = new ArrayList<>(lastAddScoreCount); List<ScoreInfo> addScores = new ArrayList<>(lastAddScoreCount);
List<ScoreInfo> removeScores = new ArrayList<>(lastRemoveScoreCount); List<ScoreInfo> removeScores = new ArrayList<>(lastRemoveScoreCount);
@ -324,6 +295,29 @@ public final class Scoreboard {
session.sendUpstreamPacket(removeObjectivePacket); session.sendUpstreamPacket(removeObjectivePacket);
} }
public Objective getObjective(String objectiveName) {
return objectives.get(objectiveName);
}
public Collection<Objective> getObjectives() {
return objectives.values();
}
public void unregisterObjective(String objectiveName) {
Objective objective = getObjective(objectiveName);
if (objective != null) {
objective.pendingRemove();
}
}
public Objective getSlot(ScoreboardPosition slot) {
return objectiveSlots.get(slot);
}
public Team getTeam(String teamName) {
return teams.get(teamName);
}
public Team getTeamFor(String entity) { public Team getTeamFor(String entity) {
for (Team team : teams.values()) { for (Team team : teams.values()) {
if (team.hasEntity(entity)) { if (team.hasEntity(entity)) {
@ -333,6 +327,16 @@ public final class Scoreboard {
return null; return null;
} }
public void removeTeam(String teamName) {
Team remove = teams.remove(teamName);
if (remove != null) {
remove.setUpdateType(REMOVE);
// We need to use the direct entities list here, so #refreshSessionPlayerDisplays also updates accordingly
// With the player's lack of a team in visibility checks
updateEntityNames(remove, remove.getEntities(), true);
}
}
/** /**
* Updates the display names of all entities in a given team. * Updates the display names of all entities in a given team.
* @param teamChange the players have either joined or left the team. Used for optimizations when just the display name updated. * @param teamChange the players have either joined or left the team. Used for optimizations when just the display name updated.

Datei anzeigen

@ -139,7 +139,7 @@ public final class Team {
} }
public boolean shouldUpdate() { public boolean shouldUpdate() {
return updating || cachedData == null || currentData.updateTime > cachedData.updateTime; return updating || cachedData == null || currentData.changed;
} }
public void prepareUpdate() { public void prepareUpdate() {
@ -155,7 +155,7 @@ public final class Team {
cachedData.updateType = currentData.updateType; cachedData.updateType = currentData.updateType;
} }
cachedData.updateTime = currentData.updateTime; cachedData.changed = currentData.changed;
cachedData.name = currentData.name; cachedData.name = currentData.name;
cachedData.prefix = currentData.prefix; cachedData.prefix = currentData.prefix;
cachedData.suffix = currentData.suffix; cachedData.suffix = currentData.suffix;
@ -171,7 +171,7 @@ public final class Team {
public Team setUpdateType(UpdateType updateType) { public Team setUpdateType(UpdateType updateType) {
if (updateType != UpdateType.NOTHING) { if (updateType != UpdateType.NOTHING) {
currentData.updateTime = System.currentTimeMillis(); currentData.changed = true;
} }
currentData.updateType = updateType; currentData.updateType = updateType;
return this; return this;
@ -198,7 +198,7 @@ public final class Team {
@Getter @Getter
public static final class TeamData { public static final class TeamData {
private UpdateType updateType; private UpdateType updateType;
private long updateTime; private boolean changed;
private String name; private String name;
private String prefix; private String prefix;