запрет входа игроку на сервер
This commit is contained in:
@@ -5,6 +5,7 @@ import com.google.inject.Provider;
|
|||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import mc.protocol.State;
|
||||||
import mc.protocol.handshake.client.HandshakePacket;
|
import mc.protocol.handshake.client.HandshakePacket;
|
||||||
|
|
||||||
import static mc.server.network.impl.NettyConstants.ATTR_STATE;
|
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<StatusHandler> statusHandlerProvider;
|
||||||
private final Provider<PingHandler> pingHandlerProvider;
|
private final Provider<PingHandler> pingHandlerProvider;
|
||||||
|
private final Provider<LoginHandler> loginHandlerProvider;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void channelRead1(ChannelHandlerContext ctx, HandshakePacket packet) {
|
protected void channelRead1(ChannelHandlerContext ctx, HandshakePacket packet) {
|
||||||
log.info("{}", packet);
|
log.info("{}", packet);
|
||||||
|
|
||||||
ctx.channel().attr(ATTR_STATE).set(packet.getNextState());
|
ctx.channel().attr(ATTR_STATE).set(packet.getNextState());
|
||||||
|
|
||||||
|
if (packet.getNextState() == State.STATUS) {
|
||||||
ctx.channel().pipeline().replace("handshake_handler", "status_handler", statusHandlerProvider.get());
|
ctx.channel().pipeline().replace("handshake_handler", "status_handler", statusHandlerProvider.get());
|
||||||
ctx.channel().pipeline().addAfter("status_handler", "ping_handler", pingHandlerProvider.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