From 045c9f1a04636650c830251116632ffb34fd1558 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 18 May 2020 09:47:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=20=D0=B2?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D0=B0=20=D0=B8=D0=B3=D1=80=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/handler/HandshakeHandler.java | 11 +++++++-- .../network/impl/handler/LoginHandler.java | 23 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/main/java/mc/server/network/impl/handler/LoginHandler.java diff --git a/src/main/java/mc/server/network/impl/handler/HandshakeHandler.java b/src/main/java/mc/server/network/impl/handler/HandshakeHandler.java index b055295..5f4b838 100644 --- a/src/main/java/mc/server/network/impl/handler/HandshakeHandler.java +++ b/src/main/java/mc/server/network/impl/handler/HandshakeHandler.java @@ -5,6 +5,7 @@ import com.google.inject.Provider; import io.netty.channel.ChannelHandlerContext; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import mc.protocol.State; import mc.protocol.handshake.client.HandshakePacket; import static mc.server.network.impl.NettyConstants.ATTR_STATE; @@ -15,13 +16,19 @@ public class HandshakeHandler extends AbstractPacketHandler { private final Provider statusHandlerProvider; private final Provider pingHandlerProvider; + private final Provider loginHandlerProvider; @Override protected void channelRead1(ChannelHandlerContext ctx, HandshakePacket packet) { log.info("{}", packet); ctx.channel().attr(ATTR_STATE).set(packet.getNextState()); - ctx.channel().pipeline().replace("handshake_handler", "status_handler", statusHandlerProvider.get()); - ctx.channel().pipeline().addAfter("status_handler", "ping_handler", pingHandlerProvider.get()); + + if (packet.getNextState() == State.STATUS) { + ctx.channel().pipeline().replace("handshake_handler", "status_handler", statusHandlerProvider.get()); + ctx.channel().pipeline().addAfter("status_handler", "ping_handler", pingHandlerProvider.get()); + } else if (packet.getNextState() == State.LOGIN) { + ctx.channel().pipeline().replace("handshake_handler", "login_handler", loginHandlerProvider.get()); + } } } diff --git a/src/main/java/mc/server/network/impl/handler/LoginHandler.java b/src/main/java/mc/server/network/impl/handler/LoginHandler.java new file mode 100644 index 0000000..29a56c7 --- /dev/null +++ b/src/main/java/mc/server/network/impl/handler/LoginHandler.java @@ -0,0 +1,23 @@ +package mc.server.network.impl.handler; + +import io.netty.channel.ChannelHandlerContext; +import mc.protocol.login.client.LoginStartPacket; +import mc.protocol.login.server.DisconnectPacket; +import mc.protocol.text.Text; +import mc.protocol.text.TextColor; +import mc.protocol.text.TextStyle; + +public class LoginHandler extends AbstractPacketHandler { + + @Override + protected void channelRead1(ChannelHandlerContext ctx, LoginStartPacket packet) { + DisconnectPacket disconnectPacket = new DisconnectPacket(); + disconnectPacket.setReason(Text.builder() + .append(Text.of(TextColor.WHITE, "Server is ")) + .color(TextColor.RED).style(TextStyle.BOLD).append("NOT ") + .color(TextColor.WHITE).append("available.") + .build()); + + ctx.channel().writeAndFlush(disconnectPacket).channel().disconnect(); + } +}