From a317e3e2c289993fff1c6734ed7783f26f85b54d Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 2 May 2021 15:29:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D0=B2?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BD=D0=B0=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/src/main/java/mc/protocol/State.java | 6 +++- .../packets/server/LoginSuccessPacket.java | 33 +++++++++++++++++++ .../main/java/mc/server/PacketHandler.java | 12 ++++--- 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index b849adf..98e929e 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -10,6 +10,7 @@ import mc.protocol.packets.client.HandshakePacket; import mc.protocol.packets.client.LoginStartPacket; import mc.protocol.packets.client.StatusServerRequestPacket; import mc.protocol.packets.server.DisconnectPacket; +import mc.protocol.packets.server.LoginSuccessPacket; import mc.protocol.packets.server.StatusServerResponse; import javax.annotation.Nullable; @@ -39,7 +40,10 @@ public enum State { // server bound Map.of(0x00, LoginStartPacket.class), // client bound - Map.of(DisconnectPacket.class, 0x00) + Map.of( + DisconnectPacket.class, 0x00, + LoginSuccessPacket.class, 0x02 + ) ); @Nullable diff --git a/protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java b/protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java new file mode 100644 index 0000000..9f8db49 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java @@ -0,0 +1,33 @@ +package mc.protocol.packets.server; + +import lombok.Data; +import mc.protocol.io.NetByteBuf; +import mc.protocol.packets.ServerSidePacket; + +import java.util.UUID; + +/** + * Подтверждение успешного логина. + * + *

Структура пакета

+ *
+ * | FIELD    | TYPE        | NOTES                         |
+ * |----------|-------------|-------------------------------|
+ * | UUID     | String (36) | Уникальный ID игрока          |
+ * | Username | String (16) | Имя игрока, выданное сервером |
+ * 
+ * + * @see Login Success + */ +@Data +public class LoginSuccessPacket implements ServerSidePacket { + + private UUID uuid; + private String name; + + @Override + public void writeSelf(NetByteBuf netByteBuf) { + netByteBuf.writeString(uuid.toString()); + netByteBuf.writeString(name); + } +} diff --git a/server/src/main/java/mc/server/PacketHandler.java b/server/src/main/java/mc/server/PacketHandler.java index b037ec1..b016bd0 100644 --- a/server/src/main/java/mc/server/PacketHandler.java +++ b/server/src/main/java/mc/server/PacketHandler.java @@ -9,7 +9,7 @@ import mc.protocol.packets.PingPacket; import mc.protocol.packets.client.HandshakePacket; import mc.protocol.packets.client.LoginStartPacket; import mc.protocol.packets.client.StatusServerRequestPacket; -import mc.protocol.packets.server.DisconnectPacket; +import mc.protocol.packets.server.LoginSuccessPacket; import mc.protocol.packets.server.StatusServerResponse; import mc.protocol.serializer.TextSerializer; import mc.server.config.Config; @@ -20,6 +20,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Base64; import java.util.Collections; +import java.util.UUID; @Slf4j @RequiredArgsConstructor @@ -55,10 +56,13 @@ public class PacketHandler { } public void onLoginStart(ChannelContext channel) { - DisconnectPacket disconnectPacket = new DisconnectPacket(); - disconnectPacket.setReason(TextSerializer.fromPlain(config.disconnectReason())); + LoginStartPacket loginStartPacket = channel.getPacket(); - channel.getCtx().writeAndFlush(disconnectPacket).channel().disconnect(); + LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(); + loginSuccessPacket.setUuid(UUID.randomUUID()); + loginSuccessPacket.setName(loginStartPacket.getName()); + + channel.getCtx().writeAndFlush(loginSuccessPacket); } private static String faviconToBase64(Path iconPath) {