mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-31 21:06:31 +00:00
完善intention包意外数据处理
This commit is contained in:
@@ -2142,19 +2142,24 @@ public class BukkitNetworkManager implements NetworkManager, Listener {
|
||||
@Override
|
||||
public void onPacketReceive(NetWorkUser user, ByteBufPacketEvent event) {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
int protocolVersion = buf.readVarInt();
|
||||
buf.readUtf(); // serverAddress
|
||||
buf.readUnsignedShort(); // serverPort
|
||||
ConnectionState nextState = switch (buf.readVarInt()) {
|
||||
case 1 -> ConnectionState.STATUS;
|
||||
case 2, 3 -> ConnectionState.LOGIN;
|
||||
default -> null;
|
||||
};
|
||||
int protocolVersion;
|
||||
ConnectionState nextState;
|
||||
try {
|
||||
protocolVersion = buf.readVarInt();
|
||||
buf.readUtf(); // serverAddress
|
||||
buf.readUnsignedShort(); // serverPort
|
||||
nextState = switch (buf.readVarInt()) {
|
||||
case 1 -> ConnectionState.STATUS;
|
||||
case 2, 3 -> ConnectionState.LOGIN;
|
||||
default -> null;
|
||||
};
|
||||
} catch (Throwable e) { // 客户端乱发包
|
||||
Debugger.COMMON.warn(() -> "Failed to read intention packet", e);
|
||||
user.forceDisconnect();
|
||||
return;
|
||||
}
|
||||
if (nextState == null) { // 如果乱发包直接强行断开连接
|
||||
Channel channel = user.nettyChannel();
|
||||
if (channel != null) {
|
||||
channel.pipeline().disconnect();
|
||||
}
|
||||
user.forceDisconnect();
|
||||
return;
|
||||
}
|
||||
if (BukkitNetworkManager.instance.hasViaVersion) {
|
||||
|
||||
@@ -506,6 +506,11 @@ public class BukkitServerPlayer extends Player {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceDisconnect() {
|
||||
this.nettyChannel().pipeline().disconnect();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConnectionState decoderState() {
|
||||
return decoderState;
|
||||
|
||||
@@ -25,6 +25,10 @@ public class FakeBukkitServerPlayer extends BukkitServerPlayer {
|
||||
public void kick(Component message) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceDisconnect() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFakePlayer() {
|
||||
return true;
|
||||
|
||||
@@ -58,6 +58,8 @@ public interface NetWorkUser {
|
||||
|
||||
void kick(Component message);
|
||||
|
||||
void forceDisconnect();
|
||||
|
||||
void simulatePacket(Object packet);
|
||||
|
||||
@ApiStatus.Internal
|
||||
|
||||
Reference in New Issue
Block a user