diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index 6159b43..e46a2d1 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -56,6 +56,7 @@ public enum State { Map.of( PingPacket.class, 0x1F, JoinGamePacket.class, 0x23, + ScoreboardDisplayPacket.class, 0x3B, SpawnPositionPacket.class, 0x46, ChunkDataPacket.class, 0x20, PlayerAbilitiesPacket.class,0x2C, diff --git a/protocol/src/main/java/mc/protocol/packets/server/ScoreboardDisplayPacket.java b/protocol/src/main/java/mc/protocol/packets/server/ScoreboardDisplayPacket.java new file mode 100644 index 0000000..9e3acf3 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/server/ScoreboardDisplayPacket.java @@ -0,0 +1,39 @@ +package mc.protocol.packets.server; + +import lombok.Data; +import mc.protocol.io.NetByteBuf; +import mc.protocol.packets.ServerSidePacket; + +/** + * Отображение Scoreboard. + * + *
Структура пакета
+ *+ * | FIELD | TYPE | NOTES | + * |------------|-------------|--------------------------------| + * | Position | Byte | Положение: | + * | | | 0 - list | + * | | | 1 - sidebar | + * | | | 2 - below name | + * | | | 3-18 - team specific sidebar | + * | Score Name | String (16) | Уникальное название Scoreboard | + *+ * + * @see Display Scoreboard + */ +@Data +public class ScoreboardDisplayPacket implements ServerSidePacket { + + private int position; + private String name; + + public void setPosition(int position) { + this.position = (position < 0) ? 0 : (Math.min(position, 18)); + } + + @Override + public void writeSelf(NetByteBuf netByteBuf) { + netByteBuf.writeByte(position); + netByteBuf.writeString(name); + } +} diff --git a/protocol/src/main/java/mc/protocol/utils/ScoreboardPosition.java b/protocol/src/main/java/mc/protocol/utils/ScoreboardPosition.java new file mode 100644 index 0000000..bb5642e --- /dev/null +++ b/protocol/src/main/java/mc/protocol/utils/ScoreboardPosition.java @@ -0,0 +1,10 @@ +package mc.protocol.utils; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class ScoreboardPosition { + public final int LIST = 0; + public final int SIDEBAR = 1; + public final int BELOW_NAME = 2; +} diff --git a/server/src/main/java/mc/server/PacketHandler.java b/server/src/main/java/mc/server/PacketHandler.java index bf35af9..a7ec96d 100644 --- a/server/src/main/java/mc/server/PacketHandler.java +++ b/server/src/main/java/mc/server/PacketHandler.java @@ -16,6 +16,7 @@ import mc.protocol.serializer.TextSerializer; import mc.protocol.utils.Difficulty; import mc.protocol.utils.GameMode; import mc.protocol.utils.LevelType; +import mc.protocol.utils.ScoreboardPosition; import mc.server.config.Config; import org.apache.commons.io.IOUtils; @@ -122,6 +123,14 @@ public class PacketHandler { context.send(pingPacket); context.flushSending(); + + // --- Эксперименты --- // + + ScoreboardDisplayPacket scoreboardDisplayPacket = new ScoreboardDisplayPacket(); + scoreboardDisplayPacket.setPosition(ScoreboardPosition.LIST); + scoreboardDisplayPacket.setName("Score::List"); + + context.sendNow(scoreboardDisplayPacket); } private static String faviconToBase64(Path iconPath) {