1.16.2 Temporary support patch (#560)

This commit is contained in:
FivePB (Xer) 2020-08-11 22:29:50 +02:00 committed by GitHub
parent c0f946a534
commit 74e388df78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,385 @@
From 410bda8afddf6865905cf495afd65da36740f224 Mon Sep 17 00:00:00 2001
From: "Five (Xer)" <admin@xernium.com>
Date: Tue, 11 Aug 2020 20:03:28 +0200
Subject: [PATCH] Waterfall 1.16.2-patch
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 546564fb..e2a02360 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
@@ -72,7 +72,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x21 ),
map( ProtocolConstants.MINECRAFT_1_14, 0x20 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x21 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x20 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x20 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x1F )
);
TO_CLIENT.registerPacket(
Login.class,
@@ -81,7 +82,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_9, 0x23 ),
map( ProtocolConstants.MINECRAFT_1_13, 0x25 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x26 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x25 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x25 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x24 )
);
TO_CLIENT.registerPacket(
Chat.class,
@@ -102,7 +104,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x38 ),
map( ProtocolConstants.MINECRAFT_1_14, 0x3A ),
map( ProtocolConstants.MINECRAFT_1_15, 0x3B ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x3A )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x3A ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x39 )
);
TO_CLIENT.registerPacket(
BossBar.class,
@@ -135,7 +138,8 @@ public enum Protocol
map(ProtocolConstants.MINECRAFT_1_13, 0x36),
map(ProtocolConstants.MINECRAFT_1_14, 0x38),
map(ProtocolConstants.MINECRAFT_1_15, 0x39),
- map(ProtocolConstants.MINECRAFT_1_16, 0x38)
+ map(ProtocolConstants.MINECRAFT_1_16, 0x38),
+ map(ProtocolConstants.MINECRAFT_1_16_2, 0x37)
);
// Waterfall end
TO_CLIENT.registerPacket(
@@ -147,7 +151,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x30 ),
map( ProtocolConstants.MINECRAFT_1_14, 0x33 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x34 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x33 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x33 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x32 )
);
TO_CLIENT.registerPacket(
TabCompleteResponse.class,
@@ -156,7 +161,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_9, 0x0E ),
map( ProtocolConstants.MINECRAFT_1_13, 0x10 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x11 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x10 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x10 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F )
);
TO_CLIENT.registerPacket(
ScoreboardObjective.class,
@@ -210,7 +216,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x19 ),
map( ProtocolConstants.MINECRAFT_1_14, 0x18 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x19 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x18 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x18 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x17 )
);
TO_CLIENT.registerPacket(
Kick.class,
@@ -220,7 +227,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x1B ),
map( ProtocolConstants.MINECRAFT_1_14, 0x1A ),
map( ProtocolConstants.MINECRAFT_1_15, 0x1B ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x1A )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x1A ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x19 )
);
TO_CLIENT.registerPacket(
Title.class,
@@ -254,21 +262,24 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_13, 0x1C ),
map( ProtocolConstants.MINECRAFT_1_14, 0x1B ),
map( ProtocolConstants.MINECRAFT_1_15, 0x1C ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x1B )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x1B ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x1A )
);
TO_CLIENT.registerPacket(
Commands.class,
Commands::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_13, 0x11 ),
map( ProtocolConstants.MINECRAFT_1_15, 0x12 ),
- map( ProtocolConstants.MINECRAFT_1_16, 0x11 )
+ map( ProtocolConstants.MINECRAFT_1_16, 0x11 ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 )
);
TO_CLIENT.registerPacket(
GameState.class,
GameState::new, // Waterfall - speed up packet construction
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
- map( ProtocolConstants.MINECRAFT_1_15, 0x1F )
+ map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
+ map( ProtocolConstants.MINECRAFT_1_16_2, 0x1E )
);
TO_CLIENT.registerPacket(
ViewDistance.class,
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/ProtocolConstants.java b/protocol/src/main/java/net/md_5/bungee/protocol/ProtocolConstants.java
index a82f2ec8..aa1b770c 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/ProtocolConstants.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/ProtocolConstants.java
@@ -30,6 +30,7 @@ public class ProtocolConstants
public static final int MINECRAFT_1_15_2 = 578;
public static final int MINECRAFT_1_16 = 735;
public static final int MINECRAFT_1_16_1 = 736;
+ public static final int MINECRAFT_1_16_2 = 751;
public static final List<String> SUPPORTED_VERSIONS = Arrays.asList(
"1.8.x",
"1.9.x",
@@ -65,7 +66,8 @@ public class ProtocolConstants
ProtocolConstants.MINECRAFT_1_15_1,
ProtocolConstants.MINECRAFT_1_15_2,
ProtocolConstants.MINECRAFT_1_16,
- ProtocolConstants.MINECRAFT_1_16_1
+ ProtocolConstants.MINECRAFT_1_16_1,
+ ProtocolConstants.MINECRAFT_1_16_2
);
public static final boolean isBeforeOrEq(int before, int other)
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Commands.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Commands.java
index 2b1c8377..1330cac2 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Commands.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Commands.java
@@ -550,6 +550,7 @@ public class Commands extends DefinedPacket
PROVIDERS.put( "minecraft:uuid", VOID ); // 1.16
PROVIDERS.put( "minecraft:test_argument", VOID ); // 1.16, debug
PROVIDERS.put( "minecraft:test_class", VOID ); // 1.16, debug
+ PROVIDERS.put( "minecraft:angle", VOID ); // 1.16
}
private static ArgumentType<?> read(String key, ByteBuf buf)
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Login.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Login.java
index 6ca80e2b..8f02538e 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Login.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Login.java
@@ -35,19 +35,29 @@ public class Login extends DefinedPacket
private String worldName;
private long seed;
private short difficulty;
- private short maxPlayers;
+ private int maxPlayers;
private String levelType;
private int viewDistance;
private boolean reducedDebugInfo;
private boolean normalRespawn;
private boolean debug;
private boolean flat;
+ private boolean hardcoreMode;
@Override
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
entityId = buf.readInt();
- gameMode = buf.readUnsignedByte();
+ if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ hardcoreMode = buf.readBoolean();
+ gameMode = buf.readByte();
+ } else
+ {
+ gameMode = buf.readByte();
+ hardcoreMode = (gameMode & 0x08) != 0;
+ gameMode &= ~0x08;
+ }
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
previousGameMode = buf.readUnsignedByte();
@@ -67,7 +77,13 @@ public class Login extends DefinedPacket
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
- dimension = readString( buf );
+ if ( protocolVersion < ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ dimension = readString( buf );
+
+ } else {
+ dimension = NamedTag.read( new DataInputStream( new ByteBufInputStream( buf ) ) );
+ }
worldName = readString( buf );
} else if ( protocolVersion > ProtocolConstants.MINECRAFT_1_9 )
{
@@ -84,7 +100,12 @@ public class Login extends DefinedPacket
{
difficulty = buf.readUnsignedByte();
}
- maxPlayers = buf.readUnsignedByte();
+ if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ maxPlayers = readVarInt( buf );
+ } else {
+ maxPlayers = buf.readUnsignedByte();
+ }
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_16 )
{
levelType = readString( buf );
@@ -112,7 +133,14 @@ public class Login extends DefinedPacket
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
buf.writeInt( entityId );
- buf.writeByte( gameMode );
+ if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ buf.writeBoolean( hardcoreMode );
+ buf.writeByte( gameMode );
+ } else
+ {
+ buf.writeByte( hardcoreMode ? gameMode | 0x8 : gameMode );
+ }
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
buf.writeByte( previousGameMode );
@@ -134,7 +162,18 @@ public class Login extends DefinedPacket
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
- writeString( (String) dimension, buf );
+ if ( protocolVersion < ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ writeString( (String) dimension, buf );
+ } else {
+ try
+ {
+ ((Tag) dimension).write( new DataOutputStream( new ByteBufOutputStream( buf ) ) );
+ } catch ( IOException ex )
+ {
+ throw new RuntimeException( "Exception writing current dimension", ex );
+ }
+ }
writeString( worldName, buf );
} else if ( protocolVersion > ProtocolConstants.MINECRAFT_1_9 )
{
@@ -151,7 +190,13 @@ public class Login extends DefinedPacket
{
buf.writeByte( difficulty );
}
- buf.writeByte( maxPlayers );
+ if( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ writeVarInt( maxPlayers, buf );
+ } else
+ {
+ buf.writeByte( maxPlayers );
+ }
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_16 )
{
writeString( levelType, buf );
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Respawn.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Respawn.java
index 0d8068ea..ef78db16 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Respawn.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Respawn.java
@@ -1,6 +1,8 @@
package net.md_5.bungee.protocol.packet;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufInputStream;
+import io.netty.buffer.ByteBufOutputStream;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,6 +10,12 @@ import lombok.NoArgsConstructor;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.ProtocolConstants;
+import se.llbit.nbt.NamedTag;
+import se.llbit.nbt.Tag;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
@Data
@NoArgsConstructor
@@ -32,7 +40,13 @@ public class Respawn extends DefinedPacket
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
- dimension = readString( buf );
+ if( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ dimension = NamedTag.read( new DataInputStream( new ByteBufInputStream( buf ) ) );
+ } else
+ {
+ dimension = readString( buf );
+ }
worldName = readString( buf );
} else
{
@@ -64,7 +78,19 @@ public class Respawn extends DefinedPacket
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
- writeString( (String) dimension, buf );
+ if( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 )
+ {
+ try
+ {
+ ((Tag) dimension).write( new DataOutputStream( new ByteBufOutputStream( buf ) ) );
+ } catch ( IOException ex )
+ {
+ throw new RuntimeException( "Exception writing current Dimension (respawn)", ex );
+ }
+ } else
+ {
+ writeString( (String) dimension, buf );
+ }
writeString( worldName, buf );
} else
{
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 78401dae..c473acdb 100644
--- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
+++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
@@ -54,6 +54,7 @@ import net.md_5.bungee.protocol.packet.SetCompression;
import net.md_5.bungee.protocol.packet.ViewDistance;
import net.md_5.bungee.util.BufUtil;
import net.md_5.bungee.util.QuietException;
+import se.llbit.nbt.Tag;
@RequiredArgsConstructor
public class ServerConnector extends PacketHandler
@@ -246,7 +247,7 @@ public class ServerConnector extends PacketHandler
// Set tab list size, TODO: what shall we do about packet mutability
Login modLogin = new Login( login.getEntityId(), login.getGameMode(), login.getPreviousGameMode(), login.getWorldNames(), login.getDimensions(), login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(),
- (byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat() );
+ (byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat(), login.isHardcoreMode() );
user.unsafe().sendPacket( modLogin );
@@ -264,7 +265,7 @@ public class ServerConnector extends PacketHandler
}
user.getSentBossBars().clear();
- user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false ) );
+ user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false) );
user.getServer().disconnect( "Quitting" );
} else
{
@@ -332,7 +333,7 @@ public class ServerConnector extends PacketHandler
}
Login modLogin = new Login( login.getEntityId(), login.getGameMode(), login.getPreviousGameMode(), login.getWorldNames(), login.getDimensions(), login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(),
- (byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat() );
+ (byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat(), login.isHardcoreMode() );
user.unsafe().sendPacket(modLogin);
// Only send if we're in the same dimension
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 e64a11b5..05947c40 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
@@ -70,6 +70,8 @@ public abstract class EntityMap
case ProtocolConstants.MINECRAFT_1_16:
case ProtocolConstants.MINECRAFT_1_16_1:
return EntityMap_1_16.INSTANCE;
+ case ProtocolConstants.MINECRAFT_1_16_2:
+ return EntityMap_Dummy.INSTANCE;
}
throw new RuntimeException( "Version " + version + " has no entity map" );
}
--
2.24.0