Scoreboard fix

This commit is contained in:
Logicism 2019-07-22 15:04:56 -07:00
parent 7a1bea1d13
commit 4d8f1e1e39
3 changed files with 55 additions and 8 deletions

View file

@ -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.entity.ServerEntityVelocityPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerDisplayScoreboardPacket; 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.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.scoreboard.ServerUpdateScorePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket; import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket;
import com.nukkitx.nbt.CompoundTagBuilder; import com.nukkitx.nbt.CompoundTagBuilder;
@ -307,21 +308,64 @@ public class TranslatorsInit {
System.out.println("new objective registered with " + packet.getName()); 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()); ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName());
objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR); 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 { } else {
scoreboard.unregisterObjective(packet.getName()); scoreboard.unregisterObjective(packet.getName());
} }
scoreboard.onUpdate();
cache.setScoreboard(scoreboard); cache.setScoreboard(scoreboard);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); 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) -> { Registry.add(ServerUpdateScorePacket.class, (packet, session) -> {
try { try {
ScoreboardCache cache = session.getScoreboardCache(); ScoreboardCache cache = session.getScoreboardCache();
@ -338,9 +382,11 @@ public class TranslatorsInit {
switch (packet.getAction()) { switch (packet.getAction()) {
case REMOVE: case REMOVE:
objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.REMOVE); objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.REMOVE);
objective.setScoreText(packet.getEntry(), packet.getEntry());
break; break;
case ADD_OR_UPDATE: case ADD_OR_UPDATE:
objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.SET); objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.SET);
objective.setScoreText(packet.getEntry(), packet.getEntry());
break; break;
} }

View file

@ -44,6 +44,7 @@ public class Score {
private long scoreboardId; private long scoreboardId;
private ScoreboardObjective objective; private ScoreboardObjective objective;
@Getter
private String fakePlayer; private String fakePlayer;
private long id; private long id;
private boolean isFake; private boolean isFake;
@ -60,8 +61,8 @@ public class Score {
public Score(ScoreboardObjective objective, String fakePlayer) { public Score(ScoreboardObjective objective, String fakePlayer) {
scoreboardId = -new Random().nextLong(); scoreboardId = -new Random().nextLong();
objective = objective; this.objective = objective;
fakePlayer = fakePlayer; this.fakePlayer = fakePlayer;
isFake = true; isFake = true;
} }
} }

View file

@ -89,7 +89,7 @@ public class Scoreboard {
if (!objectiveMap.containsKey(objectiveName)) if (!objectiveMap.containsKey(objectiveName))
return; return;
if (objective.getObjectiveName().equals(objective)) { if (objective.getObjectiveName().equals(objectiveName)) {
objective = null; objective = null;
} }
@ -116,7 +116,7 @@ public class Scoreboard {
for (String string : fakeMap.keySet()) { for (String string : fakeMap.keySet()) {
Score score = fakeMap.get(string); 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 setScorePacket = new SetScorePacket();
setScorePacket.setAction(score.getAction()); setScorePacket.setAction(score.getAction());