mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-06-26 14:35:05 +02:00
86c4420d6d
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
105 lines
5.1 KiB
Diff
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
|
|
|