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 6d328ede2..538965f7f 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 @@ -50,7 +50,9 @@ import com.nukkitx.nbt.tag.CompoundTag; import com.nukkitx.protocol.bedrock.data.GamePublishSetting; import com.nukkitx.protocol.bedrock.data.GameRule; import com.nukkitx.protocol.bedrock.packet.*; +import org.geysermc.api.ChatColor; import org.geysermc.connector.network.session.cache.ScoreboardCache; +import org.geysermc.connector.network.translators.scoreboard.Score; import org.geysermc.connector.network.translators.scoreboard.Scoreboard; import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective; import org.geysermc.connector.utils.MessageUtils; @@ -306,21 +308,52 @@ public class TranslatorsInit { if (cache.getScoreboard() != null) scoreboard = cache.getScoreboard(); - System.out.println("new objective registered with " + packet.getName()); - if (packet.getAction() == ObjectiveAction.ADD) { - ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName()); - objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR); - 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()); + switch (packet.getAction()) { + case ADD: + ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName()); + objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR); + objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName())); + break; + case UPDATE: + ScoreboardObjective updateObj = scoreboard.getObjective(packet.getName()); + updateObj.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName())); + break; + case REMOVE: + scoreboard.unregisterObjective(packet.getName()); + break; + } + + scoreboard.onUpdate(); + cache.setScoreboard(scoreboard); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + + Registry.add(ServerUpdateScorePacket.class, (packet, session) -> { + try { + ScoreboardCache cache = session.getScoreboardCache(); + Scoreboard scoreboard = new Scoreboard(session); + if (cache.getScoreboard() != null) + scoreboard = cache.getScoreboard(); + + ScoreboardObjective objective = scoreboard.getObjective(packet.getObjective()); + if (objective == null) { + objective = scoreboard.registerNewObjective(packet.getObjective()); + } + + System.out.println(packet.getEntry() + " <-> objective = " + packet.getObjective() + " val " + packet.getValue()); + switch (packet.getAction()) { + case REMOVE: + objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.REMOVE); + break; + case ADD_OR_UPDATE: + objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.SET); + break; } cache.setScoreboard(scoreboard); + scoreboard.onUpdate(); } catch (Exception ex) { ex.printStackTrace(); } @@ -346,7 +379,6 @@ public class TranslatorsInit { 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; @@ -365,37 +397,6 @@ public class TranslatorsInit { ex.printStackTrace(); } }); - - Registry.add(ServerUpdateScorePacket.class, (packet, session) -> { - try { - ScoreboardCache cache = session.getScoreboardCache(); - Scoreboard scoreboard = new Scoreboard(session); - if (cache.getScoreboard() != null) - scoreboard = cache.getScoreboard(); - - ScoreboardObjective objective = scoreboard.getObjective(packet.getObjective()); - if (objective == null) { - objective = scoreboard.registerNewObjective(packet.getObjective()); - } - - System.out.println(packet.getEntry() + " <-> objective = " + packet.getObjective() + " val " + packet.getValue()); - 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; - } - - cache.setScoreboard(scoreboard); - scoreboard.onUpdate(); - } catch (Exception ex) { - ex.printStackTrace(); - } - }); } /* 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 81ed6cf76..764d9bc7c 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,10 +44,10 @@ public class Score { private long scoreboardId; private ScoreboardObjective objective; + @Getter + @Setter private String fakePlayer; - private long id; - private boolean isFake; @Getter @Setter @@ -60,9 +60,8 @@ public class Score { private String fakeId; public Score(ScoreboardObjective objective, String fakePlayer) { - scoreboardId = -new Random().nextLong(); + this.scoreboardId = -new Random().nextLong(); 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 9fad79bbb..45ce77bad 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 @@ -106,7 +106,7 @@ public class Scoreboard { displayObjectivePacket.setDisplayName(objective.getDisplayName()); displayObjectivePacket.setCriteria("dummy"); displayObjectivePacket.setDisplaySlot("sidebar"); - displayObjectivePacket.setSortOrder(1); + displayObjectivePacket.setSortOrder(0); session.getUpstream().sendPacket(displayObjectivePacket); Map fakeMap = new HashMap(); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/ScoreboardObjective.java b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/ScoreboardObjective.java index d0a354bbd..a140ff677 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/ScoreboardObjective.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/ScoreboardObjective.java @@ -102,6 +102,16 @@ public class ScoreboardObjective { return i; } + public Score getScore(int line) { + Score score = null; + for (Map.Entry entry : scores.entrySet()) { + if (entry.getValue().getScore() == line) + return entry.getValue(); + } + + return null; + } + public void resetScore(String id) { if (scores.containsKey(id)) { Score modifiedScore = scores.get(id);