From 96854a41e9e8f681bf08061f06f99dab80e52eb1 Mon Sep 17 00:00:00 2001 From: Logicism Date: Sun, 28 Jul 2019 09:41:39 -0700 Subject: [PATCH] Scoreboard Partial Fix? + Additional Classes --- .../JavaScoreboardDisplayTranslator.java | 19 +++++++++ .../JavaScoreboardObjectiveTranslator.java | 41 +++++++++++++++++++ .../JavaScoreboardTeamTranslator.java | 17 ++++++++ .../scoreboard/JavaUpdateScoreTranslator.java | 39 ++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardDisplayTranslator.java create mode 100644 connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java create mode 100644 connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardTeamTranslator.java create mode 100644 connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardDisplayTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardDisplayTranslator.java new file mode 100644 index 000000000..db4eef2f2 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardDisplayTranslator.java @@ -0,0 +1,19 @@ +package org.geysermc.connector.network.translators.java.scoreboard; + +import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerDisplayScoreboardPacket; +import org.geysermc.connector.network.session.GeyserSession; +import org.geysermc.connector.network.session.cache.ScoreboardCache; +import org.geysermc.connector.network.translators.PacketTranslator; +import org.geysermc.connector.network.translators.scoreboard.Scoreboard; + +public class JavaScoreboardDisplayTranslator extends PacketTranslator { + @Override + public void translate(ServerDisplayScoreboardPacket packet, GeyserSession session) { + try { + ScoreboardCache cache = session.getScoreboardCache(); + Scoreboard scoreboard = new Scoreboard(session); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java new file mode 100644 index 000000000..7076d1c66 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java @@ -0,0 +1,41 @@ +package org.geysermc.connector.network.translators.java.scoreboard; + +import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerScoreboardObjectivePacket; +import org.geysermc.connector.network.session.GeyserSession; +import org.geysermc.connector.network.session.cache.ScoreboardCache; +import org.geysermc.connector.network.translators.PacketTranslator; +import org.geysermc.connector.network.translators.scoreboard.Scoreboard; +import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective; +import org.geysermc.connector.utils.MessageUtils; + +public class JavaScoreboardObjectiveTranslator extends PacketTranslator { + @Override + public void translate(ServerScoreboardObjectivePacket packet, GeyserSession session) { + try { + ScoreboardCache cache = session.getScoreboardCache(); + Scoreboard scoreboard = new Scoreboard(session); + if (cache.getScoreboard() != null) + scoreboard = cache.getScoreboard(); + + 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(); + } + } +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardTeamTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardTeamTranslator.java new file mode 100644 index 000000000..85845a4ff --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardTeamTranslator.java @@ -0,0 +1,17 @@ +package org.geysermc.connector.network.translators.java.scoreboard; + +import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerTeamPacket; +import com.nukkitx.protocol.bedrock.packet.SetScorePacket; +import org.geysermc.connector.network.session.GeyserSession; +import org.geysermc.connector.network.session.cache.ScoreboardCache; +import org.geysermc.connector.network.translators.PacketTranslator; +import org.geysermc.connector.network.translators.scoreboard.Scoreboard; +import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective; +import org.geysermc.connector.utils.MessageUtils; + +public class JavaScoreboardTeamTranslator extends PacketTranslator { + @Override + public void translate(ServerTeamPacket packet, GeyserSession session) { + + } +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java new file mode 100644 index 000000000..3f67ed192 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaUpdateScoreTranslator.java @@ -0,0 +1,39 @@ +package org.geysermc.connector.network.translators.java.scoreboard; + +import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerUpdateScorePacket; +import com.nukkitx.protocol.bedrock.packet.SetScorePacket; +import org.geysermc.connector.network.session.GeyserSession; +import org.geysermc.connector.network.session.cache.ScoreboardCache; +import org.geysermc.connector.network.translators.PacketTranslator; +import org.geysermc.connector.network.translators.scoreboard.Scoreboard; +import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective; + +public class JavaUpdateScoreTranslator extends PacketTranslator { + @Override + public void translate(ServerUpdateScorePacket packet, GeyserSession 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()); + } + + 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(); + } + } +}