From b2d2413377a1540df124dd7440643f0e8796d6dc Mon Sep 17 00:00:00 2001 From: Ytnoos Date: Sun, 11 Oct 2026 16:55:07 +0200 Subject: [PATCH] Only write the 1.7 length prefix on Velocity --- .../viaversion/viarewind/api/ViaRewindPlatform.java | 9 +++++++++ .../minecraft/netty/ForwardMessageToByteEncoder.java | 10 +++++++++- .../TrackingCompressionHandlerProvider.java | 2 +- .../java/com/viaversion/viarewind/VelocityPlugin.java | 5 +++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/viaversion/viarewind/api/ViaRewindPlatform.java b/common/src/main/java/com/viaversion/viarewind/api/ViaRewindPlatform.java index 832abcf4e..715c66097 100644 --- a/common/src/main/java/com/viaversion/viarewind/api/ViaRewindPlatform.java +++ b/common/src/main/java/com/viaversion/viarewind/api/ViaRewindPlatform.java @@ -91,4 +91,13 @@ default String decompressHandlerName() { return "decompress"; } + /** + * Returns whether the platform's compression handler also writes the packet length. Only used in the 1.8 -> 1.7 protocol. + * + * @return true if the compression handler writes the packet length + */ + default boolean compressHandlerWritesLength() { + return false; + } + } diff --git a/common/src/main/java/com/viaversion/viarewind/api/minecraft/netty/ForwardMessageToByteEncoder.java b/common/src/main/java/com/viaversion/viarewind/api/minecraft/netty/ForwardMessageToByteEncoder.java index af953bfb4..6cf95c44b 100644 --- a/common/src/main/java/com/viaversion/viarewind/api/minecraft/netty/ForwardMessageToByteEncoder.java +++ b/common/src/main/java/com/viaversion/viarewind/api/minecraft/netty/ForwardMessageToByteEncoder.java @@ -24,9 +24,17 @@ public class ForwardMessageToByteEncoder extends MessageToByteEncoder { + private final boolean writeLength; + + public ForwardMessageToByteEncoder(final boolean writeLength) { + this.writeLength = writeLength; + } + @Override protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) { - Types.VAR_INT.writePrimitive(out, msg.readableBytes()); + if (writeLength) { + Types.VAR_INT.writePrimitive(out, msg.readableBytes()); + } out.writeBytes(msg); } } diff --git a/common/src/main/java/com/viaversion/viarewind/protocol/v1_8to1_7_6_10/provider/compression/TrackingCompressionHandlerProvider.java b/common/src/main/java/com/viaversion/viarewind/protocol/v1_8to1_7_6_10/provider/compression/TrackingCompressionHandlerProvider.java index dc5459c2d..6c5f3db0d 100644 --- a/common/src/main/java/com/viaversion/viarewind/protocol/v1_8to1_7_6_10/provider/compression/TrackingCompressionHandlerProvider.java +++ b/common/src/main/java/com/viaversion/viarewind/protocol/v1_8to1_7_6_10/provider/compression/TrackingCompressionHandlerProvider.java @@ -66,7 +66,7 @@ public void onTransformPacket(UserConnection user) { if (compressor != null) { // We can neutralize the effect of compressor to the client pipeline.replace(decompressor, decompressor, new EmptyChannelHandler()); - pipeline.replace(compressor, compressor, new ForwardMessageToByteEncoder()); + pipeline.replace(compressor, compressor, new ForwardMessageToByteEncoder(ViaRewind.getPlatform().compressHandlerWritesLength())); } else { throw new IllegalStateException("Couldn't remove compression for 1.7!"); } diff --git a/velocity/src/main/java/com/viaversion/viarewind/VelocityPlugin.java b/velocity/src/main/java/com/viaversion/viarewind/VelocityPlugin.java index a1b44cb59..deaa3ec63 100644 --- a/velocity/src/main/java/com/viaversion/viarewind/VelocityPlugin.java +++ b/velocity/src/main/java/com/viaversion/viarewind/VelocityPlugin.java @@ -79,4 +79,9 @@ public String decompressHandlerName() { return "compression-decoder"; } + @Override + public boolean compressHandlerWritesLength() { + return true; + } + }