From fda80d9f9de42f609a0d59b135a4efd7fe2f8bf1 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 6 May 2021 17:05:20 +0300 Subject: [PATCH] ScoreboardDisplayPacket --- protocol/src/main/java/mc/protocol/State.java | 1 + .../server/ScoreboardDisplayPacket.java | 39 +++++++++++++++++++ .../mc/protocol/utils/ScoreboardPosition.java | 10 +++++ .../main/java/mc/server/PacketHandler.java | 9 +++++ 4 files changed, 59 insertions(+) create mode 100644 protocol/src/main/java/mc/protocol/packets/server/ScoreboardDisplayPacket.java create mode 100644 protocol/src/main/java/mc/protocol/utils/ScoreboardPosition.java 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) {