mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Merge branch 'scoreboard' of https://github.com/GeyserMC/Geyser
# 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:
commit
afdd4f40c7
4 changed files with 59 additions and 49 deletions
|
|
@ -50,7 +50,9 @@ import com.nukkitx.nbt.tag.CompoundTag;
|
||||||
import com.nukkitx.protocol.bedrock.data.GamePublishSetting;
|
import com.nukkitx.protocol.bedrock.data.GamePublishSetting;
|
||||||
import com.nukkitx.protocol.bedrock.data.GameRule;
|
import com.nukkitx.protocol.bedrock.data.GameRule;
|
||||||
import com.nukkitx.protocol.bedrock.packet.*;
|
import com.nukkitx.protocol.bedrock.packet.*;
|
||||||
|
import org.geysermc.api.ChatColor;
|
||||||
import org.geysermc.connector.network.session.cache.ScoreboardCache;
|
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.Scoreboard;
|
||||||
import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective;
|
import org.geysermc.connector.network.translators.scoreboard.ScoreboardObjective;
|
||||||
import org.geysermc.connector.utils.MessageUtils;
|
import org.geysermc.connector.utils.MessageUtils;
|
||||||
|
|
@ -306,21 +308,52 @@ public class TranslatorsInit {
|
||||||
if (cache.getScoreboard() != null)
|
if (cache.getScoreboard() != null)
|
||||||
scoreboard = cache.getScoreboard();
|
scoreboard = cache.getScoreboard();
|
||||||
|
|
||||||
|
|
||||||
System.out.println("new objective registered with " + packet.getName());
|
System.out.println("new objective registered with " + packet.getName());
|
||||||
if (packet.getAction() == ObjectiveAction.ADD) {
|
switch (packet.getAction()) {
|
||||||
ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName());
|
case ADD:
|
||||||
objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR);
|
ScoreboardObjective objective = scoreboard.registerNewObjective(packet.getName());
|
||||||
objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName()));
|
objective.setDisplaySlot(ScoreboardObjective.DisplaySlot.SIDEBAR);
|
||||||
scoreboard.onUpdate();
|
objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName()));
|
||||||
} else if (packet.getAction() == ObjectiveAction.UPDATE) {
|
break;
|
||||||
ScoreboardObjective objective = scoreboard.getObjective(packet.getName());
|
case UPDATE:
|
||||||
objective.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName()));
|
ScoreboardObjective updateObj = scoreboard.getObjective(packet.getName());
|
||||||
scoreboard.onUpdate();
|
updateObj.setDisplayName(MessageUtils.getBedrockMessage(packet.getDisplayName()));
|
||||||
} else {
|
break;
|
||||||
scoreboard.unregisterObjective(packet.getName());
|
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);
|
cache.setScoreboard(scoreboard);
|
||||||
|
scoreboard.onUpdate();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
@ -346,7 +379,6 @@ public class TranslatorsInit {
|
||||||
switch (packet.getAction()) {
|
switch (packet.getAction()) {
|
||||||
case REMOVE:
|
case REMOVE:
|
||||||
case REMOVE_PLAYER:
|
case REMOVE_PLAYER:
|
||||||
|
|
||||||
objective.registerScore(packet.getTeamName(), scoreboardText, Integer.parseInt(packet.getTeamName()), SetScorePacket.Action.REMOVE);
|
objective.registerScore(packet.getTeamName(), scoreboardText, Integer.parseInt(packet.getTeamName()), SetScorePacket.Action.REMOVE);
|
||||||
objective.setScoreText(packet.getTeamName(), scoreboardText);
|
objective.setScoreText(packet.getTeamName(), scoreboardText);
|
||||||
break;
|
break;
|
||||||
|
|
@ -365,37 +397,6 @@ public class TranslatorsInit {
|
||||||
ex.printStackTrace();
|
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();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,10 @@ public class Score {
|
||||||
private long scoreboardId;
|
private long scoreboardId;
|
||||||
|
|
||||||
private ScoreboardObjective objective;
|
private ScoreboardObjective objective;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
@Setter
|
||||||
private String fakePlayer;
|
private String fakePlayer;
|
||||||
private long id;
|
|
||||||
private boolean isFake;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
|
@ -60,9 +60,8 @@ public class Score {
|
||||||
private String fakeId;
|
private String fakeId;
|
||||||
|
|
||||||
public Score(ScoreboardObjective objective, String fakePlayer) {
|
public Score(ScoreboardObjective objective, String fakePlayer) {
|
||||||
scoreboardId = -new Random().nextLong();
|
this.scoreboardId = -new Random().nextLong();
|
||||||
this.objective = objective;
|
this.objective = objective;
|
||||||
this.fakePlayer = fakePlayer;
|
this.fakePlayer = fakePlayer;
|
||||||
isFake = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ public class Scoreboard {
|
||||||
displayObjectivePacket.setDisplayName(objective.getDisplayName());
|
displayObjectivePacket.setDisplayName(objective.getDisplayName());
|
||||||
displayObjectivePacket.setCriteria("dummy");
|
displayObjectivePacket.setCriteria("dummy");
|
||||||
displayObjectivePacket.setDisplaySlot("sidebar");
|
displayObjectivePacket.setDisplaySlot("sidebar");
|
||||||
displayObjectivePacket.setSortOrder(1);
|
displayObjectivePacket.setSortOrder(0);
|
||||||
session.getUpstream().sendPacket(displayObjectivePacket);
|
session.getUpstream().sendPacket(displayObjectivePacket);
|
||||||
|
|
||||||
Map<String, Score> fakeMap = new HashMap<String, Score>();
|
Map<String, Score> fakeMap = new HashMap<String, Score>();
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,16 @@ public class ScoreboardObjective {
|
||||||
return i;
|
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) {
|
public void resetScore(String id) {
|
||||||
if (scores.containsKey(id)) {
|
if (scores.containsKey(id)) {
|
||||||
Score modifiedScore = scores.get(id);
|
Score modifiedScore = scores.get(id);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue