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) {