запрет входа игроку на сервер
This commit is contained in:
@@ -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<HandshakePacket> {
|
||||
|
||||
private final Provider<StatusHandler> statusHandlerProvider;
|
||||
private final Provider<PingHandler> pingHandlerProvider;
|
||||
private final Provider<LoginHandler> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LoginStartPacket> {
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user