From 4d8f1e1e3910f459f380fd8df5ab08616f20e2ea Mon Sep 17 00:00:00 2001 From: Logicism Date: Mon, 22 Jul 2019 15:04:56 -0700 Subject: [PATCH] Scoreboard fix --- .../network/translators/TranslatorsInit.java | 54 +++++++++++++++++-- .../network/translators/scoreboard/Score.java | 5 +- .../translators/scoreboard/Scoreboard.java | 4 +- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java index 7ec70ba67..6d328ede2 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java @@ -40,6 +40,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.entity.ServerEntit import com.github.steveice10.mc.protocol.packet.ingame.server.entity.ServerEntityVelocityPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerDisplayScoreboardPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerScoreboardObjectivePacket; +import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerTeamPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerUpdateScorePacket; import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket; import com.nukkitx.nbt.CompoundTagBuilder; @@ -307,21 +308,64 @@ public class TranslatorsInit { System.out.println("new objective registered with " + packet.getName()); - if (packet.getAction() == ObjectiveAction.ADD || packet.getAction() == ObjectiveAction.UPDATE) { + if (packet.getAction() == ObjectiveAction.ADD) { ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName()); objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR); - objective.setDisplayName(packet.getDisplayName().getFullText()); + objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName())); + scoreboard.onUpdate(); + } else if (packet.getAction() == ObjectiveAction.UPDATE) { + ScoreboardObjective objective = scoreboard.getObjective(packet.getName()); + objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName())); + scoreboard.onUpdate(); } else { scoreboard.unregisterObjective(packet.getName()); } - - scoreboard.onUpdate(); cache.setScoreboard(scoreboard); } catch (Exception ex) { ex.printStackTrace(); } }); + Registry.add(ServerTeamPacket.class, (packet, session) -> { + try { + ScoreboardCache cache = session.getScoreboardCache(); + Scoreboard scoreboard = new Scoreboard(session); + if (cache.getScoreboard() != null) + scoreboard = cache.getScoreboard(); + + ScoreboardObjective objective = scoreboard.getObjective(); + if (objective == null) { + return; + } + + System.out.println("Team name: " + packet.getTeamName()); + // System.out.println("Team Name: " + packet.getTeamName() + " displ: " + packet.getDisplayName() + " <-> objective team = " + packet.getTeamName()); + String scoreboardText = MessageUtils.getBedrockMessage(packet.getPrefix()) + MessageUtils.getBedrockMessage(packet.getSuffix()); + + // System.out.println("scoreboard text: " + scoreboardText); + switch (packet.getAction()) { + case REMOVE: + case REMOVE_PLAYER: + + objective.registerScore(packet.getTeamName(), scoreboardText, Integer.parseInt(packet.getTeamName()), SetScorePacket.Action.REMOVE); + objective.setScoreText(packet.getTeamName(), scoreboardText); + break; + case UPDATE: + objective.setScoreText(packet.getTeamName(), scoreboardText); + case ADD_PLAYER: + case CREATE: + objective.registerScore(packet.getTeamName(), scoreboardText, Integer.parseInt(packet.getTeamName()), SetScorePacket.Action.SET); + objective.setScoreText(packet.getTeamName(), scoreboardText); + break; + } + + cache.setScoreboard(scoreboard); + scoreboard.onUpdate(); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + Registry.add(ServerUpdateScorePacket.class, (packet, session) -> { try { ScoreboardCache cache = session.getScoreboardCache(); @@ -338,9 +382,11 @@ public class TranslatorsInit { switch (packet.getAction()) { case REMOVE: objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.REMOVE); + objective.setScoreText(packet.getEntry(), packet.getEntry()); break; case ADD_OR_UPDATE: objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.SET); + objective.setScoreText(packet.getEntry(), packet.getEntry()); break; } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Score.java b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Score.java index 44937bbc2..81ed6cf76 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Score.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Score.java @@ -44,6 +44,7 @@ public class Score { private long scoreboardId; private ScoreboardObjective objective; + @Getter private String fakePlayer; private long id; private boolean isFake; @@ -60,8 +61,8 @@ public class Score { public Score(ScoreboardObjective objective, String fakePlayer) { scoreboardId = -new Random().nextLong(); - objective = objective; - fakePlayer = fakePlayer; + this.objective = objective; + this.fakePlayer = fakePlayer; isFake = true; } } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Scoreboard.java b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Scoreboard.java index 72fecbd26..9fad79bbb 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Scoreboard.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Scoreboard.java @@ -89,7 +89,7 @@ public class Scoreboard { if (!objectiveMap.containsKey(objectiveName)) return; - if (objective.getObjectiveName().equals(objective)) { + if (objective.getObjectiveName().equals(objectiveName)) { objective = null; } @@ -116,7 +116,7 @@ public class Scoreboard { for (String string : fakeMap.keySet()) { Score score = fakeMap.get(string); - ScoreInfo scoreInfo = new ScoreInfo(score.getScoreboardId(), objective.getObjectiveName(), score.getScore(), score.getFakeId()); + ScoreInfo scoreInfo = new ScoreInfo(score.getScoreboardId(), objective.getObjectiveName(), score.getScore(), score.getFakePlayer()); SetScorePacket setScorePacket = new SetScorePacket(); setScorePacket.setAction(score.getAction());