# Conflicts:
#	connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java
#	connector/src/main/java/org/geysermc/connector/network/translators/scoreboard/Score.java
This commit is contained in:
Logicism 2019-07-23 16:26:34 -07:00
commit afdd4f40c7
4 changed files with 59 additions and 49 deletions

View file

@ -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();
}
});
}
/*

View file

@ -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;
}
}

View file

@ -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<String, Score> fakeMap = new HashMap<String, Score>();

View file

@ -102,6 +102,16 @@ public class ScoreboardObjective {
return i;
}
public Score getScore(int line) {
Score score = null;
for (Map.Entry<String, Score> 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);