diff --git a/src/main/java/me/steinborn/krypton/mixin/shared/network/pipeline/compression/ClientConnectionMixin.java b/src/main/java/me/steinborn/krypton/mixin/shared/network/pipeline/compression/ClientConnectionMixin.java index 89b3faa..76c2637 100644 --- a/src/main/java/me/steinborn/krypton/mixin/shared/network/pipeline/compression/ClientConnectionMixin.java +++ b/src/main/java/me/steinborn/krypton/mixin/shared/network/pipeline/compression/ClientConnectionMixin.java @@ -6,6 +6,8 @@ import me.steinborn.krypton.mod.shared.network.compression.MinecraftCompressDecoder; import me.steinborn.krypton.mod.shared.network.compression.MinecraftCompressEncoder; import net.minecraft.network.ClientConnection; +import net.minecraft.network.PacketDeflater; +import net.minecraft.network.PacketInflater; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -37,9 +39,13 @@ private static void krypton_findViaEvent() { @Inject(method = "setCompressionThreshold", at = @At("HEAD"), cancellable = true) public void setCompressionThreshold(int compressionThreshold, boolean validate, CallbackInfo ci) { - if (compressionThreshold == -1) { - this.channel.pipeline().remove("decompress"); - this.channel.pipeline().remove("compress"); + if (compressionThreshold < 0) { + if (isKryptonOrVanillaDecompressor(this.channel.pipeline().get("decompress"))) { + this.channel.pipeline().remove("decompress"); + } + if (isKryptonOrVanillaCompressor(this.channel.pipeline().get("compress"))) { + this.channel.pipeline().remove("compress"); + } } else { MinecraftCompressDecoder decoder = (MinecraftCompressDecoder) channel.pipeline() .get("decompress"); @@ -64,6 +70,14 @@ public void setCompressionThreshold(int compressionThreshold, boolean validate, ci.cancel(); } + private static boolean isKryptonOrVanillaDecompressor(Object o) { + return o instanceof PacketInflater || o instanceof MinecraftCompressDecoder; + } + + private static boolean isKryptonOrVanillaCompressor(Object o) { + return o instanceof PacketDeflater || o instanceof MinecraftCompressEncoder; + } + private void handleViaCompression() { if (krypton_viaEventConstructor == null) return; try {