Minecraft 1.17.1 support (#530)

This commit is contained in:
Andrew Steinborn 2021-07-06 07:32:13 +00:00 committed by GitHub
parent 1f7d14f6d1
commit 540d970a4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 6 additions and 45 deletions

View File

@ -54,7 +54,8 @@ public enum ProtocolVersion {
MINECRAFT_1_16_2(751, "1.16.2"),
MINECRAFT_1_16_3(753, "1.16.3"),
MINECRAFT_1_16_4(754, "1.16.4", "1.16.5"),
MINECRAFT_1_17(755, "1.17");
MINECRAFT_1_17(755, "1.17"),
MINECRAFT_1_17_1(756, "1.17.1");
private static final int SNAPSHOT_BIT = 30;

View File

@ -35,17 +35,6 @@ public class Velocity {
// How inconvenient. Force AWT to work with its head chopped off.
System.setProperty("java.awt.headless", "true");
// By default, Netty allocates 16MiB arenas for the PooledByteBufAllocator. This is too much
// memory for Minecraft, which imposes a maximum packet size of 2MiB! We'll use 4MiB as a more
// sane default.
//
// Note: io.netty.allocator.pageSize << io.netty.allocator.maxOrder is the formula used to
// compute the chunk size. We lower maxOrder from its default of 11 to 9. (We also use a null
// check, so that the user is free to choose another setting if need be.)
if (System.getProperty("io.netty.allocator.maxOrder") == null) {
System.setProperty("io.netty.allocator.maxOrder", "9");
}
// If Velocity's natives are being extracted to a different temporary directory, make sure the
// Netty natives are extracted there as well
if (System.getProperty("velocity.natives-tmpdir") != null) {

View File

@ -30,7 +30,7 @@ import java.util.List;
public class MinecraftCompressDecoder extends MessageToMessageDecoder<ByteBuf> {
private static final int VANILLA_MAXIMUM_UNCOMPRESSED_SIZE = 2 * 1024 * 1024; // 2MiB
private static final int VANILLA_MAXIMUM_UNCOMPRESSED_SIZE = 8 * 1024 * 1024; // 8MiB
private static final int HARD_MAXIMUM_UNCOMPRESSED_SIZE = 16 * 1024 * 1024; // 16MiB
private static final int UNCOMPRESSED_CAP =

View File

@ -29,9 +29,6 @@ import java.util.zip.DataFormatException;
public class MinecraftCompressorAndLengthEncoder extends MessageToByteEncoder<ByteBuf> {
private static final boolean MUST_USE_SAFE_AND_SLOW_COMPRESSION_HANDLING =
Boolean.getBoolean("velocity.increased-compression-cap");
private int threshold;
private final VelocityCompressor compressor;
@ -49,15 +46,11 @@ public class MinecraftCompressorAndLengthEncoder extends MessageToByteEncoder<By
ProtocolUtils.writeVarInt(out, 0);
out.writeBytes(msg);
} else {
if (MUST_USE_SAFE_AND_SLOW_COMPRESSION_HANDLING) {
handleCompressedSafe(ctx, msg, out);
} else {
handleCompressedFast(ctx, msg, out);
}
handleCompressed(ctx, msg, out);
}
}
private void handleCompressedFast(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out)
private void handleCompressed(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out)
throws DataFormatException {
int uncompressed = msg.readableBytes();
@ -73,9 +66,7 @@ public class MinecraftCompressorAndLengthEncoder extends MessageToByteEncoder<By
}
int compressedLength = out.writerIndex() - startCompressed;
if (compressedLength >= 1 << 21) {
throw new DataFormatException("The server sent a very large (over 2MiB compressed) packet. "
+ "Please restart Velocity with the JVM flag -Dvelocity.increased-compression-cap=true "
+ "to fix this issue.");
throw new DataFormatException("The server sent a very large (over 2MiB compressed) packet.");
}
int writerIndex = out.writerIndex();
@ -85,26 +76,6 @@ public class MinecraftCompressorAndLengthEncoder extends MessageToByteEncoder<By
out.writerIndex(writerIndex);
}
private void handleCompressedSafe(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out)
throws DataFormatException {
int uncompressed = msg.readableBytes();
ByteBuf tmpBuf = MoreByteBufUtils.preferredBuffer(ctx.alloc(), compressor, uncompressed - 1);
try {
ProtocolUtils.writeVarInt(tmpBuf, uncompressed);
ByteBuf compatibleIn = MoreByteBufUtils.ensureCompatible(ctx.alloc(), compressor, msg);
try {
compressor.deflate(compatibleIn, tmpBuf);
} finally {
compatibleIn.release();
}
ProtocolUtils.writeVarInt(out, tmpBuf.readableBytes());
out.writeBytes(tmpBuf);
} finally {
tmpBuf.release();
}
}
@Override
protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, ByteBuf msg, boolean preferDirect)
throws Exception {