diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/RegistrySyncManager.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/RegistrySyncManager.java index 778d80496..ed9a37cc8 100644 --- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/RegistrySyncManager.java +++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/RegistrySyncManager.java @@ -25,9 +25,11 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; +import java.util.zip.Deflater; import com.google.common.base.Joiner; import com.google.common.collect.Sets; +import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; @@ -90,6 +92,38 @@ public final class RegistrySyncManager { } public static void receivePacket(ThreadExecutor<?> executor, RegistrySyncPacket packet, PacketByteBuf buf, boolean accept, Consumer<Exception> errorHandler) { + if (DEBUG) { + LOGGER.info("{} raw size: {}", packet.getClass().getSimpleName(), buf.readableBytes()); + + // see PacketDeflater + final byte[] deflateBuffer = new byte[8192]; + ByteBuf byteBuf = buf.copy(); + Deflater deflater = new Deflater(); + + int i = byteBuf.readableBytes(); + PacketByteBuf packetByteBuf = new PacketByteBuf(Unpooled.buffer()); + + if (i < 256) { + packetByteBuf.writeVarInt(0); + packetByteBuf.writeBytes(byteBuf); + } else { + byte[] bs = new byte[i]; + byteBuf.readBytes(bs); + packetByteBuf.writeVarInt(bs.length); + deflater.setInput(bs, 0, i); + deflater.finish(); + + while (!deflater.finished()) { + int j = deflater.deflate(deflateBuffer); + packetByteBuf.writeBytes(deflateBuffer, 0, j); + } + + deflater.reset(); + } + + LOGGER.info("{} deflated size: {}", packet.getClass().getSimpleName(), packetByteBuf.readableBytes()); + } + RegistryMap map = packet.readBuffer(buf); if (accept) {