From 25d75d4f030f10ada2a5bcecf18b24a2367eb8b2 Mon Sep 17 00:00:00 2001 From: Dawson Date: Sat, 14 Jun 2025 14:42:50 -0400 Subject: [PATCH] Fixed false positives in movement emulation while sprinting, and fixed bug that prevents some chunks from loading on the client side --- .../brighten/ac/listener/JoinListener.java | 3 +- .../ac/packet/handler/LegacyHandler.java | 43 ++++++---- .../ac/packet/handler/ModernHandler.java | 82 +++++++++++-------- Neo | 2 +- 4 files changed, 78 insertions(+), 52 deletions(-) diff --git a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java index 79cc177..2222032 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java +++ b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java @@ -45,7 +45,7 @@ public class JoinListener implements Listener { APlayer player = op.get(); - if(player.isSendingPackets() || !player.isInitialized()) return; + if(!player.isInitialized()) return; if(event.getType().equals(PacketType.CLIENT_TRANSACTION)) { if(!player.getPacketQueue().isEmpty()) { @@ -68,6 +68,7 @@ public class JoinListener implements Listener { player.getPacketQueue().add(event.getPacket()); } event.setCancelled(true); + player.getBukkitPlayer().sendMessage("§cPlease wait a moment before sending packets again."); } } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/packet/handler/LegacyHandler.java b/Anticheat/src/main/java/dev/brighten/ac/packet/handler/LegacyHandler.java index 1e22693..9c64b2f 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/packet/handler/LegacyHandler.java +++ b/Anticheat/src/main/java/dev/brighten/ac/packet/handler/LegacyHandler.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.logging.Level; //TODO Make this feature-parody with ModernHandler public class LegacyHandler extends HandlerAbstract { @@ -48,7 +49,9 @@ public class LegacyHandler extends HandlerAbstract { } else uninjectedChannels.add(channel); } } catch(IllegalArgumentException e) { - e.printStackTrace(); + Anticheat.INSTANCE.getLogger().log(Level.WARNING, "Failed to add packet handler for player " + player.getName(), e); + } catch (Exception e) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Unexpected error while adding packet handler for player " + player.getName(), e); } } @@ -107,28 +110,38 @@ public class LegacyHandler extends HandlerAbstract { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - String name = msg.getClass().getName(); - int index = name.lastIndexOf("."); - String packetName = name.substring(index + 1); - Object packet = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, PacketType - .getByPacketId(packetName).orElse(PacketType.UNKNOWN)); + try { + String name = msg.getClass().getName(); + int index = name.lastIndexOf("."); + String packetName = name.substring(index + 1); + Object packet = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, PacketType + .getByPacketId(packetName).orElse(PacketType.UNKNOWN)); - if(packet != null) { - super.channelRead(ctx, packet); + if(packet != null) { + super.channelRead(ctx, packet); + } + } catch (Throwable throwable) { + Anticheat.INSTANCE.getLogger().log(Level.WARNING, "Error on channel read for player " + player.getName(), throwable); + super.channelRead(ctx, msg); } } @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - String name = msg.getClass().getName(); - int index = name.lastIndexOf("."); - String packetName = name.substring(index + 1); - Object packet = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, PacketType - .getByPacketId(packetName).orElse(PacketType.UNKNOWN)); + try { + String name = msg.getClass().getName(); + int index = name.lastIndexOf("."); + String packetName = name.substring(index + 1); + Object packet = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, PacketType + .getByPacketId(packetName).orElse(PacketType.UNKNOWN)); - if(packet != null) { - super.write(ctx, packet, promise); + if(packet != null) { + super.write(ctx, packet, promise); + } + } catch (Throwable throwable) { + Anticheat.INSTANCE.getLogger().log(Level.WARNING, "Error on channel write for player " + player.getName(), throwable); + super.write(ctx, msg, promise); } } } diff --git a/Anticheat/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java b/Anticheat/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java index 1ecb139..e2e1104 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java +++ b/Anticheat/src/main/java/dev/brighten/ac/packet/handler/ModernHandler.java @@ -214,37 +214,43 @@ public class ModernHandler extends HandlerAbstract { return; } - PacketType type = HandlerAbstract.getPacketType(msg); + try { + PacketType type = HandlerAbstract.getPacketType(msg); - if(type == PacketType.LOGIN_START) { - PacketLoginInStart packet = (PacketLoginInStart) msg; + if(type == PacketType.LOGIN_START) { + PacketLoginInStart packet = (PacketLoginInStart) msg; - channelCache.put(packet.a().getName(), ctx.channel()); - } else if(type == PacketType.LOGIN_HANDSHAKE) { - WPacketHandshakingInSetProtocol packet = (WPacketHandshakingInSetProtocol) PacketType.processType(type, msg); + channelCache.put(packet.a().getName(), ctx.channel()); + } else if(type == PacketType.LOGIN_HANDSHAKE) { + WPacketHandshakingInSetProtocol packet = (WPacketHandshakingInSetProtocol) PacketType.processType(type, msg); - if(packet.getProtocol() == WPacketHandshakingInSetProtocol.EnumProtocol.LOGIN) { - protocolLookup.put(ctx.channel(), packet.getVersionNumber()); - } - } - - if(player != null && Anticheat.INSTANCE.getPacketProcessor() != null) { - try { - Object returnedObject = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, - type); - - if (returnedObject != null) { - super.channelRead(ctx, returnedObject); + if(packet.getProtocol() == WPacketHandshakingInSetProtocol.EnumProtocol.LOGIN) { + protocolLookup.put(ctx.channel(), packet.getVersionNumber()); } - } catch (Throwable throwable) { - Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, throwable); + } + + if(player != null && Anticheat.INSTANCE.getPacketProcessor() != null) { try { - super.channelRead(ctx, msg); - } catch (Exception e) { - Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, e); + Object returnedObject = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, + type); + + if (returnedObject != null) { + super.channelRead(ctx, returnedObject); + } + } catch (Throwable throwable) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, throwable); + try { + super.channelRead(ctx, msg); + } catch (Exception e) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, e); + } } + } else { + super.channelRead(ctx, msg); } - } else { + } catch (Throwable t) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Error on channel read for player: " + + player.getName(), t); super.channelRead(ctx, msg); } } @@ -257,19 +263,25 @@ public class ModernHandler extends HandlerAbstract { return; } - if(player != null) { - try { - Object returnedObject = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, - HandlerAbstract.getPacketType(msg)); + try { + if(player != null) { + try { + Object returnedObject = Anticheat.INSTANCE.getPacketProcessor().call(player, msg, + HandlerAbstract.getPacketType(msg)); - if (returnedObject != null) { - super.write(ctx, returnedObject, promise); + if (returnedObject != null) { + super.write(ctx, returnedObject, promise); + } + } catch(Throwable throwable) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, throwable); + super.write(ctx, msg, promise); } - } catch(Throwable throwable) { - Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Cannot call packet " + msg, throwable); - super.write(ctx, msg, promise); - } - } else super.write(ctx, msg, promise); + } else super.write(ctx, msg, promise); + } catch (Throwable t) { + Anticheat.INSTANCE.getLogger().log(Level.SEVERE, "Error on channel write for player: " + + (player != null ? player.getName() : "Unknown"), t); + super.write(ctx, msg, promise); + } } } } diff --git a/Neo b/Neo index 493c3bd..10cf844 160000 --- a/Neo +++ b/Neo @@ -1 +1 @@ -Subproject commit 493c3bda353d14832704641ed10a551684f9b7c5 +Subproject commit 10cf844dd26c4f7249cf50a12f6802195ff50388