mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
More work on scoreboard translation
This commit is contained in:
parent
13c000ec66
commit
eb9b4927e8
4 changed files with 73 additions and 16 deletions
|
|
@ -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;
|
||||
|
|
@ -49,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;
|
||||
|
|
@ -305,14 +308,20 @@ public class TranslatorsInit {
|
|||
if (cache.getScoreboard() != null)
|
||||
scoreboard = cache.getScoreboard();
|
||||
|
||||
|
||||
System.out.println("new objective registered with " + packet.getName());
|
||||
if (packet.getAction() == ObjectiveAction.ADD || packet.getAction() == ObjectiveAction.UPDATE) {
|
||||
switch (packet.getAction()) {
|
||||
case ADD:
|
||||
ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName());
|
||||
objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR);
|
||||
objective.setDisplayName(packet.getDisplayName().getFullText());
|
||||
} else {
|
||||
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();
|
||||
|
|
@ -343,6 +352,44 @@ public class TranslatorsInit {
|
|||
objective.registerScore(packet.getEntry(), packet.getEntry(), packet.getValue(), SetScorePacket.Action.SET);
|
||||
break;
|
||||
}
|
||||
cache.setScoreboard(scoreboard);
|
||||
scoreboard.onUpdate();
|
||||
} 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();
|
||||
|
|
|
|||
|
|
@ -44,9 +44,10 @@ public class Score {
|
|||
private long scoreboardId;
|
||||
|
||||
private ScoreboardObjective objective;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String fakePlayer;
|
||||
private long id;
|
||||
private boolean isFake;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
|
@ -59,9 +60,8 @@ public class Score {
|
|||
private String fakeId;
|
||||
|
||||
public Score(ScoreboardObjective objective, String fakePlayer) {
|
||||
scoreboardId = -new Random().nextLong();
|
||||
objective = objective;
|
||||
fakePlayer = fakePlayer;
|
||||
isFake = true;
|
||||
this.scoreboardId = -new Random().nextLong();
|
||||
this.objective = objective;
|
||||
this.fakePlayer = fakePlayer;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public class Scoreboard {
|
|||
if (!objectiveMap.containsKey(objectiveName))
|
||||
return;
|
||||
|
||||
if (objective.getObjectiveName().equals(objective)) {
|
||||
if (objective.getObjectiveName().equals(objectiveName)) {
|
||||
objective = null;
|
||||
}
|
||||
|
||||
|
|
@ -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>();
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue