9
0
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:
jhqwqmc
2025-12-29 09:36:00 +08:00
parent 01c7cb4435
commit a4f184bd21
4 changed files with 28 additions and 12 deletions

View File

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

View File

@@ -506,6 +506,11 @@ public class BukkitServerPlayer extends Player {
}
}
@Override
public void forceDisconnect() {
this.nettyChannel().pipeline().disconnect();
}
@Override
public ConnectionState decoderState() {
return decoderState;

View File

@@ -25,6 +25,10 @@ public class FakeBukkitServerPlayer extends BukkitServerPlayer {
public void kick(Component message) {
}
@Override
public void forceDisconnect() {
}
@Override
public boolean isFakePlayer() {
return true;

View File

@@ -58,6 +58,8 @@ public interface NetWorkUser {
void kick(Component message);
void forceDisconnect();
void simulatePacket(Object packet);
@ApiStatus.Internal