Waterfall/BungeeCord-Patches/0016-Allow-invalid-packet-ids-for-forge-servers.patch
Shane Freeder 86c4420d6d
Updated Upstream (BungeeCord)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Do note that OSX natives are now compiled for Apple Silicon, Long Live ARM

BungeeCord Changes:
6f70b15e Minecraft 1.20.5 support
b30499e2 #3667: Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.0 to 3.4.1
5079181c Minecraft 1.20.5-rc3 support
ee02d98c Minecraft 1.20.5-rc2 support
c7ff3b8a #3654: Update year in README.md
de60af0d #3659: Cleanup command packets for 1.20.5
a9218a7a #3660: Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.3 to 3.2.4
67c65e04 #3658: Minecraft 1.20.5-rc1 support
1be25b6c #3656: Improve online mode support where IP forwarding is disabled
8525b449 Minecraft 1.20.5-pre3 support
1fca510a #3655: Fix 1.20.5-pre1 view distance packet ID
33841852 #3652: Bump org.apache.maven.plugins:maven-jar-plugin from 3.3.0 to 3.4.0
3075d2c1 #3651: Bump io.netty:netty-bom from 4.1.108.Final to 4.1.109.Final
bc528d5d Update native libraries
25cf8d68 #3617: Don't go further if connection is disconnected during handshake event
17e23d5c #3628: Convert PostLoginEvent to AsyncEvent and expose target server
d6c5197c #3599: Bump com.mysql:mysql-connector-j from 8.2.0 to 8.3.0
dd96f0f8 #3647: Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.2 to 3.2.3
8a9501ff Minecraft 1.20.5-pre1 support
2024-04-23 19:11:16 +01:00

105 lines
5.1 KiB
Diff

From ea36c5dc9f008d20bbef476f4af4f0ce9301aed0 Mon Sep 17 00:00:00 2001
From: Techcable <Techcable@techcable.net>
Date: Thu, 19 May 2016 17:09:22 -0600
Subject: [PATCH] Allow invalid packet ids for forge servers
Some forge mods (COFH) use negative packet ids instead of plugin channels for 'reasons'.
Vanilla servers still error on negative/invalid packets.
Original issue: https://github.com/WaterfallMC/Waterfall-Old/issues/11
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
index d79d5e5c..250e7620 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
@@ -18,6 +18,14 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
private final boolean server;
@Setter
private int protocolVersion;
+ @Setter
+ private boolean supportsForge = false;
+
+ public MinecraftDecoder(Protocol protocol, boolean server, int protocolVersion) {
+ this.protocol = protocol;
+ this.server = server;
+ this.protocolVersion = protocolVersion;
+ }
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception
@@ -36,7 +44,7 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
{
int packetId = DefinedPacket.readVarInt( in );
- DefinedPacket packet = prot.createPacket( packetId, protocolVersion );
+ DefinedPacket packet = prot.createPacket( packetId, protocolVersion, supportsForge );
if ( packet != null )
{
packet.read( in, protocol, prot.getDirection(), protocolVersion );
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java
index 2271a2e5..d932b696 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java
@@ -862,14 +862,23 @@ public enum Protocol
return protocol;
}
+ public boolean hasPacket(int i, boolean supportsForge) {
+ return supportsForge || i >= 0 && i <= MAX_PACKET_ID;
+ }
+
public final DefinedPacket createPacket(int id, int version)
+ {
+ return createPacket(id, version, true);
+ }
+
+ public final DefinedPacket createPacket(int id, int version, boolean supportsForge)
{
ProtocolData protocolData = getProtocolData( version );
if ( protocolData == null )
{
throw new BadPacketException( "Unsupported protocol version " + version );
}
- if ( id > MAX_PACKET_ID || id < 0 )
+ if ( !hasPacket(id, supportsForge) )
{
throw new BadPacketException( "Packet with id " + id + " outside of range" );
}
diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
index 7a211f1b..a25a493e 100644
--- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
+++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
@@ -234,6 +234,12 @@ public class ServerConnector extends PacketHandler
public static void handleLogin(ProxyServer bungee, ChannelWrapper ch, UserConnection user, BungeeServerInfo target, ForgeServerHandler handshakeHandler, ServerConnection server, Login login) throws Exception
{
ServerConnectedEvent event = new ServerConnectedEvent( user, server );
+
+ if (server.isForgeServer() && user.isForgeUser()) {
+ ((net.md_5.bungee.protocol.MinecraftDecoder) server.getCh().getHandle().pipeline().get(net.md_5.bungee.netty.PipelineUtils.PACKET_DECODER)).setSupportsForge(true);
+ ((net.md_5.bungee.protocol.MinecraftDecoder) user.getCh().getHandle().pipeline().get(net.md_5.bungee.netty.PipelineUtils.PACKET_DECODER)).setSupportsForge(true);
+ }
+
bungee.getPluginManager().callEvent( event );
ch.write( BungeeCord.getInstance().registerChannels( user.getPendingConnection().getVersion() ) );
diff --git a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java
index 2bf92a03..ccebe19f 100644
--- a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java
+++ b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java
@@ -342,6 +342,12 @@ public abstract class EntityMap
int packetId = DefinedPacket.readVarInt( packet );
int packetIdLength = packet.readerIndex() - readerIndex;
+ if (packetId < 0 || packetId > ints.length || packetId > varints.length) { // Invalid packet id
+ // Ignore these invalid packets for compatibility reasons
+ packet.readerIndex( readerIndex );
+ return;
+ }
+
if ( ints[packetId] )
{
rewriteInt( packet, oldId, newId, readerIndex + packetIdLength );
--
2.44.0