diff --git a/pom.xml b/pom.xml
index ad79324..f2b9363 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,7 @@
com.github.luben
zstd-jni
- 1.5.4-2
+ 1.5.5-4
dev.waterdog.waterdogpe
diff --git a/src/main/java/org/nethergames/proxytransport/compression/ZstdCompressionCodec.java b/src/main/java/org/nethergames/proxytransport/compression/ZstdCompressionCodec.java
new file mode 100644
index 0000000..9505039
--- /dev/null
+++ b/src/main/java/org/nethergames/proxytransport/compression/ZstdCompressionCodec.java
@@ -0,0 +1,136 @@
+package org.nethergames.proxytransport.compression;
+
+import com.github.luben.zstd.Zstd;
+import dev.waterdog.waterdogpe.ProxyServer;
+import dev.waterdog.waterdogpe.network.NetworkMetrics;
+import dev.waterdog.waterdogpe.network.PacketDirection;
+import dev.waterdog.waterdogpe.network.connection.client.ClientConnection;
+import dev.waterdog.waterdogpe.network.connection.codec.BedrockBatchWrapper;
+import dev.waterdog.waterdogpe.network.connection.codec.compression.SnappyCompressionCodec;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.CompositeByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.MessageToMessageCodec;
+import io.netty.util.ReferenceCountUtil;
+import lombok.AllArgsConstructor;
+import org.cloudburstmc.protocol.common.util.Zlib;
+import org.nethergames.proxytransport.utils.CompressionType;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+
+@AllArgsConstructor
+public class ZstdCompressionCodec extends MessageToMessageCodec {
+ public static final String NAME = "compression-codec";
+
+ private static final SnappyCompressionCodec snappyCompressionCodec = new SnappyCompressionCodec();
+
+ private final int compressionLevel;
+ private final ClientConnection connection;
+
+ @Override
+ protected void encode(ChannelHandlerContext ctx, BedrockBatchWrapper msg, List