PacketIO class

Пакет: com.hypixel.hytale.protocol.io

Файл: com/hypixel/hytale/protocol/io/PacketIO.java

Поля (129)

МодификаторыТипИмя
final int FRAME_HEADER_SIZE
continue
int var1
int var1
int var1
int var1
int var1
int var10
long var10
int var10
MemorySegment var10
Packet var10
long var11
ByteBuffer var12
long var13
ByteBuf var14
byte var17
var17
var17
int var2
long var2
long var2
int var2
int var2
int var2
byte[] var3
byte[] var3
byte[] var3
byte[] var3
byte[] var3
int var3
int var3
var3
var3
var3
char var3
byte[] var3
byte[] var3
byte[] var3
byte[] var3
int var3
int var3
var3
int var3
byte[] var3
int var4
int var4
int var4
int var4
int var4
byte[] var4
int var4
var4
var4
var4
byte[] var4
byte[] var4
byte[] var4
byte[] var4
long var4
long var4
int var4
int var4
int var4
var4
var4
var4
int var4
int var4
byte[] var5
int var5
var5
var5
var5
int var5
int var5
int var5
byte[] var5
byte[] var5
Integer var5
int var5
byte[] var5
PacketRegistry.PacketInfo var5
ByteBuf var5
var5
var5
var5
PacketRegistry.PacketInfo var5
int var6
byte[] var6
long var6
MemorySegment var6
PacketRegistry.PacketInfo var6
int var6
int var6
var6
var6
var6
int var6
var6
var6
int var7
int var7
long var7
int var7
int var7
int var7
var7
int var7
int var7
var7
int var8
int var8
int var8
byte[] var8
ByteBuf var8
Packet var8
int var8
MemorySegment var8
var8
var8
byte[] var9
byte[] var9
ByteBuffer var9
MemorySegment var9
int var9
MemorySegment var9
Arena var9
var9

Методы (118)

МодификаторыВозвратСигнатура
abstract throw new ProtocolExceptionthrow new ProtocolException("Fixed ASCII string exceeds length: " + var3.length + " > " + var2)
abstract throw new ProtocolExceptionthrow new ProtocolException("Fixed UTF-8 string exceeds length: " + var3.length + " > " + var2)
abstract throw new ProtocolExceptionthrow new ProtocolException("String exceeds max bytes: " + var3.length + " > " + var2)
abstract throw new ProtocolExceptionthrow new ProtocolException("String exceeds max bytes: " + var4.length + " > " + var3)
abstract throw new ProtocolExceptionthrow new ProtocolException("Fixed ASCII string exceeds length: " + var4.length + " > " + var3)
abstract throw new ProtocolExceptionthrow new ProtocolException("Fixed UTF-8 string exceeds length: " + var4.length + " > " + var3)
abstract throw new ProtocolExceptionthrow new ProtocolException("Compressed size " + var3 + " exceeds max decompressed size " + var4)
abstract throw new ProtocolExceptionthrow new ProtocolException("Invalid Zstd frame or unknown content size")
abstract throw new ProtocolExceptionthrow new ProtocolException("Decompressed size " + var13 + " exceeds maximum " + var4)
abstract throw new ProtocolExceptionthrow new ProtocolException("Decompressed size " + var6 + " exceeds maximum " + var4)
abstract throw new ProtocolExceptionthrow new ProtocolException("Compressed size " + var4 + " exceeds max decompressed size " + var5)
abstract throw new ProtocolExceptionthrow new ProtocolException("Decompressed size " + var7 + " exceeds maximum " + var5)
abstract throw new ProtocolExceptionthrow new ProtocolException("Unknown packet ID: " + var4)
abstract return new Stringreturn new String(var3, 0, var4, StandardCharsets.US_ASCII)
abstract return new Stringreturn new String(var3, 0, var4, StandardCharsets.UTF_8)
abstract return new Stringreturn new String(var5, var2)
abstract return new Stringreturn new String(var4, StandardCharsets.US_ASCII)
abstract return new Stringreturn new String(var9, UTF8)
abstract return new Stringreturn new String(var9, StandardCharsets.US_ASCII)
abstract return new UUIDreturn new UUID(var2, var4)
static int compressToBufferint compressToBuffer(@Nonnull ByteBuf var0, @Nonnull ByteBuf var1, int var2, int var3)
static MemorySegment decompressFromBufferMemorySegment decompressFromBuffer(@Nonnull MemorySegment var0, @Nonnull Arena var1, @Nonnull MemorySegment var2, int var3, int var4, int var5)
static short floatToHalfshort floatToHalf(float var0)
for for(int var5 = 0; var5 < var2; var5++)
for for(int var7 = 2; var7 <= var5; var7++)
for for(int var10 = 0; var10 < var7; var10++)
abstract for for(int var2 = 0; var2 < var0.length()
static float halfToFloatfloat halfToFloat(short var0)
if if(var7 == -1)
if if(var2 >= 128)
if if(var2 >= 194 && var2 <= 244)
if if(var2 < 224)
if if(var1 + var5 >= var0.length)
if if(var6 >= var3 && var6 <= var4)
if if(var8 < 128 || var8 > 191)
if if(var7 == -1)
if if(var7 > var4)
if if(var7 < var3)
if if(var3 < 128)
if if(var1 != null)
if if(var3.length > var2)
if if(var1 != null)
if if(var3.length > var2)
if if(var3.length > var2)
if if(var3.length > var2)
if if(var4.length > var3)
if if(var4.length > var3)
if if(var2 != null)
if if(var4.length > var3)
if if(var2 != null)
if if(var4.length > var3)
if if(var3 == 0)
if if(var4 == 0)
if if(var3 >= 1199570944)
if if(var3 >= 947912704)
if if(var3 < 855638016)
if if(var3 > var4)
if if(var13 < 0L)
if if(var13 > var4)
if if(var6 < 0L)
if if(var6 > var4)
if if(var4 > var5)
if if(var7 < 0L)
if if(var5 == null)
if if(var7 == 0)
if if(var10 > 1677721600)
if if(var6 > 1677721600)
if if(var2 == 0)
if if(var5 == null)
if if(var1 > 0)
if if(var1 == 0)
if if(var11 > 1677721600L)
if if(var8 > 1677721600)
if if(var5 == null)
if if(var9 != null)
static boolean isFiniteboolean isFinite(float var0)
static boolean isFiniteboolean isFinite(double var0)
static boolean isFiniteboolean isFinite(@Nonnull Vector2fc var0)
static boolean isFiniteboolean isFinite(@Nonnull Vector3fc var0)
static boolean isFiniteboolean isFinite(@Nonnull Vector4fc var0)
static boolean isFiniteboolean isFinite(@Nonnull Quaternionfc var0)
static boolean isFiniteboolean isFinite(@Nonnull Matrix4fc var0)
static boolean isWellFormedUtf8boolean isWellFormedUtf8(@Nonnull byte[] var0)
abstract return readFramedPacketWithInforeturn readFramedPacketWithInfo(var0, var1, var2, var5, var3)
abstract return readValidatedAsciiStringreturn readValidatedAsciiString(var0, var1, var2, 0, var3)
abstract return readVarStringreturn readVarString(var0, var1, StandardCharsets.UTF_8)
abstract return readVarStringreturn readVarString(var0, var1, var2, 0, var3)
static float requireFinitefloat requireFinite(float var0, @Nonnull String var1)
static double requireFinitedouble requireFinite(double var0, @Nonnull String var2)
static int serializeIntoint serializeInto(@Nonnull Packet var0, @Nonnull ByteBuf var1, int var2)
abstract serializeInto serializeInto(var0, var8, var7)
static int stringSizeint stringSize(@Nonnull String var0)
static int utf8ByteLengthint utf8ByteLength(@Nonnull String var0)
while while(var4 < var2 && var3[var4] != 0)
while while(var4 < var2 && var3[var4] != 0)
while while(var4 < var2 && var3[var4] != 0)
while while(var4 < var2 && var3[var4] != 0)
while while(var1 < var0.length)
static void writeCompressedvoid writeCompressed(@Nonnull Packet var0, @Nonnull PacketRegistry.PacketInfo var1, int var2, @Nonnull ByteBuf var3, @Nonnull ByteBufAllocator var4, @Nonnull PacketStatsRecorder var5, int var6)
static void writeFixedAsciiStringvoid writeFixedAsciiString(@Nonnull ByteBuf var0, @Nullable String var1, int var2)
static void writeFixedAsciiStringvoid writeFixedAsciiString(@Nonnull MemorySegment var0, int var1, @Nullable String var2, int var3)
static void writeFixedStringvoid writeFixedString(@Nonnull ByteBuf var0, @Nullable String var1, int var2)
static void writeFixedStringvoid writeFixedString(@Nonnull MemorySegment var0, int var1, @Nullable String var2, int var3)
static void writeFramedPacketvoid writeFramedPacket(@Nonnull Packet var0, @Nonnull Class<? extends Packet> var1, @Nonnull ByteBuf var2, @Nonnull ByteBufAllocator var3, @Nonnull PacketStatsRecorder var4)
static int writeFramedPacketint writeFramedPacket(@Nonnull MemorySegment var0, @Nonnull Packet var1, @Nonnull PacketRegistry.PacketInfo var2, @Nonnull MemorySegment var3, int var4, int var5, @Nonnull PacketStatsRecorder var6)
static void writeFramedPacketWithInfovoid writeFramedPacketWithInfo(@Nonnull Packet var0, @Nonnull PacketRegistry.PacketInfo var1, @Nonnull ByteBuf var2, @Nonnull ByteBufAllocator var3, @Nonnull PacketStatsRecorder var4)
abstract writeFramedPacketWithInfo writeFramedPacketWithInfo(var0, var6, var2, var3, var4)
static void writeQuaternionfvoid writeQuaternionf(@Nonnull MemorySegment var0, int var1, @Nonnull Quaternionfc var2)
static void writeUUIDvoid writeUUID(@Nonnull ByteBuf var0, @Nonnull UUID var1)
static void writeUUIDvoid writeUUID(@Nonnull MemorySegment var0, int var1, @Nonnull UUID var2)
static void writeUncompressedvoid writeUncompressed(@Nonnull Packet var0, @Nonnull PacketRegistry.PacketInfo var1, int var2, @Nonnull ByteBuf var3, @Nonnull PacketStatsRecorder var4, int var5)
static void writeVarAsciiStringvoid writeVarAsciiString(@Nonnull ByteBuf var0, @Nonnull String var1, int var2)
static int writeVarAsciiStringint writeVarAsciiString(@Nonnull MemorySegment var0, int var1, @Nonnull String var2, int var3)
static void writeVarStringvoid writeVarString(@Nonnull ByteBuf var0, @Nonnull String var1, int var2)
static int writeVarStringint writeVarString(@Nonnull MemorySegment var0, int var1, @Nonnull String var2, int var3)
static void writeVector2fvoid writeVector2f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector2fc var2)
static void writeVector3fvoid writeVector3f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector3fc var2)
static void writeVector4fvoid writeVector4f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector4fc var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.protocol.io;

class="kw">import com.github.luben.zstd.Zstd;
class="kw">import com.hypixel.hytale.protocol.Packet;
class="kw">import com.hypixel.hytale.protocol.PacketRegistry;
class="kw">import io.netty.buffer.ByteBuf;
class="kw">import io.netty.buffer.ByteBufAllocator;
class="kw">import io.netty.buffer.Unpooled;
class="kw">import java.lang.foreign.Arena;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.lang.foreign.ValueLayout.OfBoolean;
class="kw">import java.lang.foreign.ValueLayout.OfByte;
class="kw">import java.lang.foreign.ValueLayout.OfDouble;
class="kw">import java.lang.foreign.ValueLayout.OfFloat;
class="kw">import java.lang.foreign.ValueLayout.OfInt;
class="kw">import java.lang.foreign.ValueLayout.OfLong;
class="kw">import java.lang.foreign.ValueLayout.OfShort;
class="kw">import java.nio.ByteBuffer;
class="kw">import java.nio.ByteOrder;
class="kw">import java.nio.charset.Charset;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Matrix4f;
class="kw">import org.joml.Matrix4fc;
class="kw">import org.joml.Quaternionf;
class="kw">import org.joml.Quaternionfc;
class="kw">import org.joml.Vector2f;
class="kw">import org.joml.Vector2fc;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector3fc;
class="kw">import org.joml.Vector4f;
class="kw">import org.joml.Vector4fc;

class="kw">public class="kw">final class PacketIO {
   class="kw">public class="kw">static class="kw">final int FRAME_HEADER_SIZE = 4;
   class="kw">public class="kw">static class="kw">final int PACKET_HEADER_SIZE = 8;
   class="kw">public class="kw">static class="kw">final Charset UTF8 = StandardCharsets.UTF_8;
   class="kw">public class="kw">static class="kw">final Charset ASCII = StandardCharsets.US_ASCII;
   class="kw">public class="kw">static class="kw">final OfBoolean PROTO_BOOL = ValueLayout.JAVA_BOOLEAN.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfByte PROTO_BYTE = ValueLayout.JAVA_BYTE.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfShort PROTO_SHORT = ValueLayout.JAVA_SHORT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfInt PROTO_INT = ValueLayout.JAVA_INT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfLong PROTO_LONG = ValueLayout.JAVA_LONG_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfFloat PROTO_FLOAT = ValueLayout.JAVA_FLOAT_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfDouble PROTO_DOUBLE = ValueLayout.JAVA_DOUBLE_UNALIGNED.withOrder(ByteOrder.LITTLE_ENDIAN);
   class="kw">public class="kw">static class="kw">final OfLong UUID_LONG = ValueLayout.JAVA_LONG_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN);
   class="kw">public class="kw">static class="kw">final Vector2fc ZERO_VECTOR2 = new Vector2f();
   class="kw">public class="kw">static class="kw">final Vector3fc ZERO_VECTOR3 = new Vector3f();
   class="kw">public class="kw">static class="kw">final Vector4fc ZERO_VECTOR4 = new Vector4f();
   class="kw">public class="kw">static class="kw">final Quaternionfc ZERO_QUATERNION = new Quaternionf(0.0F, 0.0F, 0.0F, 0.0F);
   class="kw">public class="kw">static class="kw">final Matrix4fc ZERO_MATRIX = new Matrix4f().zero();
   class="kw">private class="kw">static class="kw">final int COMPRESSION_LEVEL = Integer.getInteger("hytale.protocol.compressionLevel", Zstd.defaultCompressionLevel());
   class="kw">private class="kw">static class="kw">final byte[] EMPTY_PAYLOAD = new byte[0];

   class="kw">private PacketIO() {
   }

   @Nonnull
   class="kw">public class="kw">static byte[] readBytes(@Nonnull ByteBuf var0, int var1, int var2) {
      byte[] var3 = new byte[var2];
      var0.getBytes(var1, var3);
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static String readFixedAsciiString(@Nonnull ByteBuf var0, int var1, int var2) {
      byte[] var3 = new byte[var2];
      var0.getBytes(var1, var3);
      int var4 = 0;

      while (var4 < var2 && var3[var4] != 0) {
         var4++;
      }

      class="kw">return new String(var3, 0, var4, StandardCharsets.US_ASCII);
   }

   @Nonnull
   class="kw">public class="kw">static String readFixedString(@Nonnull ByteBuf var0, int var1, int var2) {
      byte[] var3 = new byte[var2];
      var0.getBytes(var1, var3);
      int var4 = 0;

      while (var4 < var2 && var3[var4] != 0) {
         var4++;
      }

      class="kw">return new String(var3, 0, var4, StandardCharsets.UTF_8);
   }

   @Nonnull
   class="kw">public class="kw">static String readFixedAsciiString(@Nonnull MemorySegment var0, int var1, int var2) {
      byte[] var3 = new byte[var2];
      MemorySegment.copy(var0, PROTO_BYTE, var1, var3, 0, var2);
      int var4 = 0;

      while (var4 < var2 && var3[var4] != 0) {
         var4++;
      }

      class="kw">return new String(var3, 0, var4, StandardCharsets.US_ASCII);
   }

   @Nonnull
   class="kw">public class="kw">static String readFixedString(@Nonnull MemorySegment var0, int var1, int var2) {
      byte[] var3 = new byte[var2];
      MemorySegment.copy(var0, PROTO_BYTE, var1, var3, 0, var2);
      int var4 = 0;

      while (var4 < var2 && var3[var4] != 0) {
         var4++;
      }

      class="kw">return new String(var3, 0, var4, StandardCharsets.UTF_8);
   }

   @Nonnull
   class="kw">public class="kw">static String readVarString(@Nonnull ByteBuf var0, int var1) {
      class="kw">return readVarString(var0, var1, StandardCharsets.UTF_8);
   }

   @Nonnull
   class="kw">public class="kw">static String readVarString(@Nonnull ByteBuf var0, int var1, Charset var2) {
      int var3 = VarInt.peek(var0, var1);
      int var4 = VarInt.length(var0, var1);
      byte[] var5 = new byte[var3];
      var0.getBytes(var1 + var4, var5);
      class="kw">return new String(var5, var2);
   }

   @Nonnull
   class="kw">public class="kw">static String readValidatedAsciiString(@Nonnull ByteBuf var0, int var1, int var2, @Nonnull String var3) {
      byte[] var4 = new byte[var2];
      var0.getBytes(var1, var4);

      for (int var5 = 0; var5 < var2; var5++) {
         if ((var4[var5] & 255) > 127) {
            throw ProtocolException.invalidAsciiString(var3);
         }
      }

      class="kw">return new String(var4, StandardCharsets.US_ASCII);
   }

   @Nonnull
   class="kw">public class="kw">static String readVarString(String var0, @Nonnull MemorySegment var1, int var2, int var3, int var4) {
      class="kw">return readVarString(var0, var1, var2, var3, var4, VarInt.getWithLength(var1, var2));
   }

   @Nonnull
   class="kw">public class="kw">static String readVarString(String var0, @Nonnull MemorySegment var1, int var2, int var3, int var4, long var5) {
      int var7 = (int)var5;
      if (var7 == -1) {
         throw ProtocolException.invalidVarInt(var0);
      } else if (var7 > var4) {
         throw ProtocolException.stringTooLong(var0, var7, var4);
      } else if (var7 < var3) {
         throw ProtocolException.stringTooShort(var0, var7, var3);
      } else {
         int var8 = (int)(var5 >>> 32);
         if (var2 + var7 + var8 > var1.byteSize()) {
            throw ProtocolException.bufferTooSmall(var0, var7 + var8, (int)(var1.byteSize() - var2));
         } else {
            byte[] var9 = new byte[var7];
            MemorySegment.copy(var1, PROTO_BYTE, var2 + var8, var9, 0, var7);
            if (!isWellFormedUtf8(var9)) {
               throw ProtocolException.malformedString(var0);
            } else {
               class="kw">return new String(var9, UTF8);
            }
         }
      }
   }

   class="kw">public class="kw">static boolean isWellFormedUtf8(@Nonnull byte[] var0) {
      int var1 = 0;

      while (var1 < var0.length) {
         int var2 = var0[var1] & 255;
         if (var2 >= 128) {
            if (var2 >= 194 && var2 <= 244) {
               int var3;
               int var4;
               int var5;
               if (var2 < 224) {
                  var3 = 128;
                  var4 = 191;
                  var5 = 1;
               } else if (var2 < 240) {
                  var3 = var2 == 224 ? 160 : 128;
                  var4 = var2 == 237 ? 159 : 191;
                  var5 = 2;
               } else {
                  var3 = var2 == 240 ? 144 : 128;
                  var4 = var2 == 244 ? 143 : 191;
                  var5 = 3;
               }

               if (var1 + var5 >= var0.length) {
                  class="kw">return false;
               }

               int var6 = var0[var1 + 1] & 255;
               if (var6 >= var3 && var6 <= var4) {
                  for (int var7 = 2; var7 <= var5; var7++) {
                     int var8 = var0[var1 + var7] & 255;
                     if (var8 < 128 || var8 > 191) {
                        class="kw">return false;
                     }
                  }

                  var1 += var5 + 1;
                  class="kw">continue;
               }

               class="kw">return false;
            }

            class="kw">return false;
         } else {
            var1++;
         }
      }

      class="kw">return true;
   }

   @Nonnull
   class="kw">public class="kw">static String readVarString(String var0, @Nonnull MemorySegment var1, int var2, int var3) {
      class="kw">return readVarString(var0, var1, var2, 0, var3);
   }

   @Nonnull
   class="kw">public class="kw">static String readValidatedAsciiString(String var0, @Nonnull MemorySegment var1, int var2, int var3, int var4) {
      class="kw">return readValidatedAsciiString(var0, var1, var2, var3, var4, VarInt.getWithLength(var1, var2));
   }

   @Nonnull
   class="kw">public class="kw">static String readValidatedAsciiString(String var0, @Nonnull MemorySegment var1, int var2, int var3, int var4, long var5) {
      int var7 = (int)var5;
      if (var7 == -1) {
         throw ProtocolException.invalidVarInt(var0);
      }

      if (var7 > var4) {
         throw ProtocolException.stringTooLong(var0, var7, var4);
      }

      if (var7 < var3) {
         throw ProtocolException.stringTooShort(var0, var7, var3);
      }

      int var8 = (int)(var5 >>> 32);
      if (var2 + var7 + var8 > var1.byteSize()) {
         throw ProtocolException.bufferTooSmall(var0, var7 + var8, (int)(var1.byteSize() - var2));
      }

      byte[] var9 = new byte[var7];
      MemorySegment.copy(var1, PROTO_BYTE, var2 + var8, var9, 0, var7);

      for (int var10 = 0; var10 < var7; var10++) {
         if ((var9[var10] & 255) > 127) {
            throw ProtocolException.invalidAsciiString(var0);
         }
      }

      class="kw">return new String(var9, StandardCharsets.US_ASCII);
   }

   @Nonnull
   class="kw">public class="kw">static String readValidatedAsciiString(String var0, @Nonnull MemorySegment var1, int var2, int var3) {
      class="kw">return readValidatedAsciiString(var0, var1, var2, 0, var3);
   }

   class="kw">public class="kw">static float requireFinite(float var0, @Nonnull String var1) {
      if (!Float.isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   class="kw">public class="kw">static double requireFinite(double var0, @Nonnull String var2) {
      if (!Double.isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var2, var0);
      } else {
         class="kw">return var0;
      }
   }

   class="kw">public class="kw">static boolean isFinite(float var0) {
      class="kw">return Float.isFinite(var0);
   }

   class="kw">public class="kw">static boolean isFinite(double var0) {
      class="kw">return Double.isFinite(var0);
   }

   class="kw">public class="kw">static boolean isFinite(@Nonnull Vector2fc var0) {
      class="kw">return Float.isFinite(var0.x()) && Float.isFinite(var0.y());
   }

   class="kw">public class="kw">static boolean isFinite(@Nonnull Vector3fc var0) {
      class="kw">return Float.isFinite(var0.x()) && Float.isFinite(var0.y()) && Float.isFinite(var0.z());
   }

   class="kw">public class="kw">static boolean isFinite(@Nonnull Vector4fc var0) {
      class="kw">return Float.isFinite(var0.x()) && Float.isFinite(var0.y()) && Float.isFinite(var0.z()) && Float.isFinite(var0.w());
   }

   class="kw">public class="kw">static boolean isFinite(@Nonnull Quaternionfc var0) {
      class="kw">return Float.isFinite(var0.x()) && Float.isFinite(var0.y()) && Float.isFinite(var0.z()) && Float.isFinite(var0.w());
   }

   class="kw">public class="kw">static boolean isFinite(@Nonnull Matrix4fc var0) {
      class="kw">return Float.isFinite(var0.m00())
         && Float.isFinite(var0.m01())
         && Float.isFinite(var0.m02())
         && Float.isFinite(var0.m03())
         && Float.isFinite(var0.m10())
         && Float.isFinite(var0.m11())
         && Float.isFinite(var0.m12())
         && Float.isFinite(var0.m13())
         && Float.isFinite(var0.m20())
         && Float.isFinite(var0.m21())
         && Float.isFinite(var0.m22())
         && Float.isFinite(var0.m23())
         && Float.isFinite(var0.m30())
         && Float.isFinite(var0.m31())
         && Float.isFinite(var0.m32())
         && Float.isFinite(var0.m33());
   }

   @Nonnull
   class="kw">public class="kw">static Vector2fc requireFinite(@Nonnull Vector2fc var0, @Nonnull String var1) {
      if (!isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   @Nonnull
   class="kw">public class="kw">static Vector3fc requireFinite(@Nonnull Vector3fc var0, @Nonnull String var1) {
      if (!isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   @Nonnull
   class="kw">public class="kw">static Vector4fc requireFinite(@Nonnull Vector4fc var0, @Nonnull String var1) {
      if (!isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   @Nonnull
   class="kw">public class="kw">static Quaternionfc requireFinite(@Nonnull Quaternionfc var0, @Nonnull String var1) {
      if (!isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   @Nonnull
   class="kw">public class="kw">static Matrix4fc requireFinite(@Nonnull Matrix4fc var0, @Nonnull String var1) {
      if (!isFinite(var0)) {
         throw ProtocolException.valueNotFinite(var1, var0);
      } else {
         class="kw">return var0;
      }
   }

   class="kw">public class="kw">static int utf8ByteLength(@Nonnull String var0) {
      int var1 = 0;

      for (int var2 = 0; var2 < var0.length(); var2++) {
         char var3 = var0.charAt(var2);
         if (var3 < 128) {
            var1++;
         } else if (var3 < 2048) {
            var1 += 2;
         } else if (Character.isHighSurrogate(var3)) {
            var1 += 4;
            var2++;
         } else {
            var1 += 3;
         }
      }

      class="kw">return var1;
   }

   class="kw">public class="kw">static int stringSize(@Nonnull String var0) {
      int var1 = utf8ByteLength(var0);
      class="kw">return VarInt.size(var1) + var1;
   }

   class="kw">public class="kw">static void writeFixedAsciiString(@Nonnull ByteBuf var0, @Nullable String var1, int var2) {
      if (var1 != null) {
         byte[] var3 = var1.getBytes(StandardCharsets.US_ASCII);
         if (var3.length > var2) {
            throw new ProtocolException("Fixed ASCII string exceeds length: " + var3.length + " > " + var2);
         }

         var0.writeBytes(var3);
         var0.writeZero(var2 - var3.length);
      } else {
         var0.writeZero(var2);
      }
   }

   class="kw">public class="kw">static void writeFixedString(@Nonnull ByteBuf var0, @Nullable String var1, int var2) {
      if (var1 != null) {
         byte[] var3 = var1.getBytes(StandardCharsets.UTF_8);
         if (var3.length > var2) {
            throw new ProtocolException("Fixed UTF-8 string exceeds length: " + var3.length + " > " + var2);
         }

         var0.writeBytes(var3);
         var0.writeZero(var2 - var3.length);
      } else {
         var0.writeZero(var2);
      }
   }

   class="kw">public class="kw">static void writeVarString(@Nonnull ByteBuf var0, @Nonnull String var1, int var2) {
      byte[] var3 = var1.getBytes(StandardCharsets.UTF_8);
      if (var3.length > var2) {
         throw new ProtocolException("String exceeds max bytes: " + var3.length + " > " + var2);
      }

      VarInt.write(var0, var3.length);
      var0.writeBytes(var3);
   }

   class="kw">public class="kw">static void writeVarAsciiString(@Nonnull ByteBuf var0, @Nonnull String var1, int var2) {
      byte[] var3 = var1.getBytes(StandardCharsets.US_ASCII);
      if (var3.length > var2) {
         throw new ProtocolException("String exceeds max bytes: " + var3.length + " > " + var2);
      }

      VarInt.write(var0, var3.length);
      var0.writeBytes(var3);
   }

   class="kw">public class="kw">static int writeVarString(@Nonnull MemorySegment var0, int var1, @Nonnull String var2, int var3) {
      byte[] var4 = var2.getBytes(UTF8);
      if (var4.length > var3) {
         throw new ProtocolException("String exceeds max bytes: " + var4.length + " > " + var3);
      }

      int var5 = VarInt.set(var0, var1, var4.length);
      MemorySegment.copy(var4, 0, var0, ValueLayout.JAVA_BYTE, var1 + var5, var4.length);
      class="kw">return var5 + var4.length;
   }

   class="kw">public class="kw">static int writeVarAsciiString(@Nonnull MemorySegment var0, int var1, @Nonnull String var2, int var3) {
      byte[] var4 = var2.getBytes(ASCII);
      if (var4.length > var3) {
         throw new ProtocolException("String exceeds max bytes: " + var4.length + " > " + var3);
      }

      int var5 = VarInt.set(var0, var1, var4.length);
      MemorySegment.copy(var4, 0, var0, ValueLayout.JAVA_BYTE, var1 + var5, var4.length);
      class="kw">return var5 + var4.length;
   }

   @Nonnull
   class="kw">public class="kw">static Vector2f readVector2f(@Nonnull MemorySegment var0, int var1) {
      class="kw">return new Vector2f(var0.get(PROTO_FLOAT, var1), var0.get(PROTO_FLOAT, var1 + 4));
   }

   @Nonnull
   class="kw">public class="kw">static Vector3f readVector3f(@Nonnull MemorySegment var0, int var1) {
      class="kw">return new Vector3f(var0.get(PROTO_FLOAT, var1), var0.get(PROTO_FLOAT, var1 + 4), var0.get(PROTO_FLOAT, var1 + 8));
   }

   @Nonnull
   class="kw">public class="kw">static Vector4f readVector4f(@Nonnull MemorySegment var0, int var1) {
      class="kw">return new Vector4f(var0.get(PROTO_FLOAT, var1), var0.get(PROTO_FLOAT, var1 + 4), var0.get(PROTO_FLOAT, var1 + 8), var0.get(PROTO_FLOAT, var1 + 12));
   }

   @Nonnull
   class="kw">public class="kw">static Quaternionf readQuaternionf(@Nonnull MemorySegment var0, int var1) {
      class="kw">return new Quaternionf(var0.get(PROTO_FLOAT, var1), var0.get(PROTO_FLOAT, var1 + 4), var0.get(PROTO_FLOAT, var1 + 8), var0.get(PROTO_FLOAT, var1 + 12));
   }

   class="kw">public class="kw">static void writeVector2f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector2fc var2) {
      var0.set(PROTO_FLOAT, var1, var2.x());
      var0.set(PROTO_FLOAT, var1 + 4, var2.y());
   }

   class="kw">public class="kw">static void writeVector3f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector3fc var2) {
      var0.set(PROTO_FLOAT, var1, var2.x());
      var0.set(PROTO_FLOAT, var1 + 4, var2.y());
      var0.set(PROTO_FLOAT, var1 + 8, var2.z());
   }

   class="kw">public class="kw">static void writeVector4f(@Nonnull MemorySegment var0, int var1, @Nonnull Vector4fc var2) {
      var0.set(PROTO_FLOAT, var1, var2.x());
      var0.set(PROTO_FLOAT, var1 + 4, var2.y());
      var0.set(PROTO_FLOAT, var1 + 8, var2.z());
      var0.set(PROTO_FLOAT, var1 + 12, var2.w());
   }

   class="kw">public class="kw">static void writeQuaternionf(@Nonnull MemorySegment var0, int var1, @Nonnull Quaternionfc var2) {
      var0.set(PROTO_FLOAT, var1, var2.x());
      var0.set(PROTO_FLOAT, var1 + 4, var2.y());
      var0.set(PROTO_FLOAT, var1 + 8, var2.z());
      var0.set(PROTO_FLOAT, var1 + 12, var2.w());
   }

   class="kw">public class="kw">static void writeFixedAsciiString(@Nonnull MemorySegment var0, int var1, @Nullable String var2, int var3) {
      if (var2 != null) {
         byte[] var4 = var2.getBytes(StandardCharsets.US_ASCII);
         if (var4.length > var3) {
            throw new ProtocolException("Fixed ASCII string exceeds length: " + var4.length + " > " + var3);
         }

         MemorySegment.copy(var4, 0, var0, PROTO_BYTE, var1, var4.length);
         var0.asSlice(var1 + var4.length, var3 - var4.length).fill((byte)0);
      } else {
         var0.asSlice(var1, var3).fill((byte)0);
      }
   }

   class="kw">public class="kw">static void writeFixedString(@Nonnull MemorySegment var0, int var1, @Nullable String var2, int var3) {
      if (var2 != null) {
         byte[] var4 = var2.getBytes(StandardCharsets.UTF_8);
         if (var4.length > var3) {
            throw new ProtocolException("Fixed UTF-8 string exceeds length: " + var4.length + " > " + var3);
         }

         MemorySegment.copy(var4, 0, var0, PROTO_BYTE, var1, var4.length);
         var0.asSlice(var1 + var4.length, var3 - var4.length).fill((byte)0);
      } else {
         var0.asSlice(var1, var3).fill((byte)0);
      }
   }

   @Nonnull
   class="kw">public class="kw">static UUID readUUID(@Nonnull ByteBuf var0, int var1) {
      long var2 = var0.getLong(var1);
      long var4 = var0.getLong(var1 + 8);
      class="kw">return new UUID(var2, var4);
   }

   class="kw">public class="kw">static void writeUUID(@Nonnull ByteBuf var0, @Nonnull UUID var1) {
      var0.writeLong(var1.getMostSignificantBits());
      var0.writeLong(var1.getLeastSignificantBits());
   }

   @Nonnull
   class="kw">public class="kw">static UUID readUUID(@Nonnull MemorySegment var0, int var1) {
      long var2 = var0.get(UUID_LONG, var1);
      long var4 = var0.get(UUID_LONG, var1 + 8);
      class="kw">return new UUID(var2, var4);
   }

   class="kw">public class="kw">static void writeUUID(@Nonnull MemorySegment var0, int var1, @Nonnull UUID var2) {
      var0.set(UUID_LONG, var1, var2.getMostSignificantBits());
      var0.set(UUID_LONG, var1 + 8, var2.getLeastSignificantBits());
   }

   class="kw">public class="kw">static float halfToFloat(short var0) {
      int var1 = var0 & '\uffff';
      int var2 = var1 >>> 15 & 1;
      int var3 = var1 >>> 10 & 31;
      int var4 = var1 & 1023;
      if (var3 == 0) {
         if (var4 == 0) {
            class="kw">return var2 == 0 ? 0.0F : -0.0F;
         }

         for (var3 = 1; (var4 & 1024) == 0; var3--) {
            var4 <<= 1;
         }

         var4 &= 1023;
      } else if (var3 == 31) {
         class="kw">return var4 == 0 ? (var2 == 0 ? Float.POSITIVE_INFINITY : Float.NEGATIVE_INFINITY) : Float.NaN;
      }

      int var5 = var2 << 31 | var3 + 112 << 23 | var4 << 13;
      class="kw">return Float.intBitsToFloat(var5);
   }

   class="kw">public class="kw">static short floatToHalf(float var0) {
      int var1 = Float.floatToRawIntBits(var0);
      int var2 = var1 >>> 16 & 32768;
      int var3 = (var1 & 2147483647) + 4096;
      if (var3 >= 1199570944) {
         if ((var1 & 2147483647) >= 1199570944) {
            class="kw">return var3 < 2139095040 ? (short)(var2 | 31744) : (short)(var2 | 31744 | (var1 & 8388607) >>> 13);
         } else {
            class="kw">return (short)(var2 | 31743);
         }
      } else {
         if (var3 >= 947912704) {
            class="kw">return (short)(var2 | var3 - 939524096 >>> 13);
         }

         if (var3 < 855638016) {
            class="kw">return (short)var2;
         }

         var3 = (var1 & 2147483647) >>> 23;
         class="kw">return (short)(var2 | (var1 & 8388607 | 8388608) + (8388608 >>> var3 - 102) >>> 126 - var3);
      }
   }

   class="kw">private class="kw">static int compressToBuffer(@Nonnull ByteBuf var0, @Nonnull ByteBuf var1, int var2, int var3) {
      if (var0.isDirect() && var1.isDirect()) {
         class="kw">return Zstd.compress(var1.nioBuffer(var2, var3), var0.nioBuffer(), COMPRESSION_LEVEL);
      }

      int var4 = var0.readableBytes();
      byte[] var5 = new byte[var4];
      var0.getBytes(var0.readerIndex(), var5);
      byte[] var6 = Zstd.compress(var5, COMPRESSION_LEVEL);
      var1.setBytes(var2, var6);
      class="kw">return var6.length;
   }

   @Nonnull
   class="kw">private class="kw">static ByteBuf decompressFromBuffer(@Nonnull ByteBufAllocator var0, @Nonnull ByteBuf var1, int var2, int var3, int var4) {
      if (var3 > var4) {
         throw new ProtocolException("Compressed size " + var3 + " exceeds max decompressed size " + var4);
      }

      if (var1.isDirect()) {
         ByteBuffer var12 = var1.nioBuffer(var2, var3);
         long var13 = Zstd.getFrameContentSize(var12);
         if (var13 < 0L) {
            throw new ProtocolException("Invalid Zstd frame or unknown content size");
         }

         if (var13 > var4) {
            throw new ProtocolException("Decompressed size " + var13 + " exceeds maximum " + var4);
         }

         ByteBuf var14 = var0.directBuffer((int)var13);

         try {
            ByteBuffer var9 = var14.nioBuffer(0, (int)var13);
            int var10 = Zstd.decompress(var9, var12);
            if (Zstd.isError(var10)) {
               throw new ProtocolException("Zstd decompression failed: " + Zstd.getErrorName(var10));
            }

            var14.writerIndex(var10);
            class="kw">return var14;
         } catch (Exception var11) {
            var14.release();
            throw var11;
         }
      } else {
         byte[] var5 = new byte[var3];
         var1.getBytes(var2, var5);
         long var6 = Zstd.getFrameContentSize(var5);
         if (var6 < 0L) {
            throw new ProtocolException("Invalid Zstd frame or unknown content size");
         }

         if (var6 > var4) {
            throw new ProtocolException("Decompressed size " + var6 + " exceeds maximum " + var4);
         }

         byte[] var8 = Zstd.decompress(var5, (int)var6);
         class="kw">return Unpooled.wrappedBuffer(var8);
      }
   }

   class="kw">private class="kw">static MemorySegment decompressFromBuffer(
      @Nonnull MemorySegment var0, @Nonnull Arena var1, @Nonnull MemorySegment var2, int var3, int var4, int var5
   ) {
      if (var4 > var5) {
         throw new ProtocolException("Compressed size " + var4 + " exceeds max decompressed size " + var5);
      } else {
         MemorySegment var6 = var2.asSlice(var3, var4);
         long var7 = ZstdNative.getFrameContentSize(var6, var4);
         if (var7 < 0L) {
            throw new ProtocolException("Invalid Zstd frame or unknown content size");
         } else if (var7 > var5) {
            throw new ProtocolException("Decompressed size " + var7 + " exceeds maximum " + var5);
         } else {
            MemorySegment var9 = var1.allocate((int)var7);
            long var10 = ZstdNative.decompressDCtx(var0, var9, var9.byteSize(), var6, var4);
            if (ZstdNative.isError(var10)) {
               throw new ProtocolException("Decompression failed with error code: " + ZstdNative.getErrorName(var10));
            } else {
               class="kw">return var9;
            }
         }
      }
   }

   class="kw">public class="kw">static void writeFramedPacket(
      @Nonnull Packet var0, @Nonnull Class<? class="kw">extends Packet> var1, @Nonnull ByteBuf var2, @Nonnull ByteBufAllocator var3, @Nonnull PacketStatsRecorder var4
   ) {
      Integer var5 = PacketRegistry.getId(var1);
      if (var5 == null) {
         throw new ProtocolException("Unknown packet type: " + var1.getName());
      }

      PacketRegistry.PacketInfo var6 = PacketRegistry.getToClientPacketById(var5);
      writeFramedPacketWithInfo(var0, var6, var2, var3, var4);
   }

   class="kw">public class="kw">static void writeFramedPacketWithInfo(
      @Nonnull Packet var0, @Nonnull PacketRegistry.PacketInfo var1, @Nonnull ByteBuf var2, @Nonnull ByteBufAllocator var3, @Nonnull PacketStatsRecorder var4
   ) {
      int var5 = var2.writerIndex();
      var2.writeIntLE(0);
      var2.writeIntLE(var1.id());
      if (var1.compressed()) {
         writeCompressed(var0, var1, var1.id(), var2, var3, var4, var5);
      } else {
         writeUncompressed(var0, var1, var1.id(), var2, var4, var5);
      }
   }

   class="kw">private class="kw">static void writeCompressed(
      @Nonnull Packet var0,
      @Nonnull PacketRegistry.PacketInfo var1,
      int var2,
      @Nonnull ByteBuf var3,
      @Nonnull ByteBufAllocator var4,
      @Nonnull PacketStatsRecorder var5,
      int var6
   ) {
      int var7 = var0.computeSize();
      if (var7 > var1.maxSize()) {
         throw new ProtocolException("Packet " + var1.name() + " serialized to " + var7 + " bytes, exceeds max size " + var1.maxSize());
      }

      if (var7 == 0) {
         var3.setIntLE(var6, 0);
         var5.recordSend(var2, 0, 0);
      } else {
         ByteBuf var8 = var4.buffer(var7);

         try {
            serializeInto(var0, var8, var7);
            int var9 = (int)Zstd.compressBound(var7);
            var3.ensureWritable(var9);
            int var10 = compressToBuffer(var8, var3, var3.writerIndex(), var9);
            if (Zstd.isError(var10)) {
               throw new ProtocolException("Zstd compression failed: " + Zstd.getErrorName(var10));
            }

            if (var10 > 1677721600) {
               throw new ProtocolException("Packet " + var1.name() + " compressed payload size " + var10 + " exceeds protocol maximum");
            }

            var3.writerIndex(var3.writerIndex() + var10);
            var3.setIntLE(var6, var10);
            var5.recordSend(var2, var7, var10);
         } class="kw">finally {
            var8.release();
         }
      }
   }

   class="kw">private class="kw">static void writeUncompressed(
      @Nonnull Packet var0, @Nonnull PacketRegistry.PacketInfo var1, int var2, @Nonnull ByteBuf var3, @Nonnull PacketStatsRecorder var4, int var5
   ) {
      int var6 = var0.computeSize();
      if (var6 > var1.maxSize()) {
         var3.writerIndex(var5);
         throw new ProtocolException("Packet " + var1.name() + " serialized to " + var6 + " bytes, exceeds max size " + var1.maxSize());
      }

      if (var6 > 1677721600) {
         var3.writerIndex(var5);
         throw new ProtocolException("Packet " + var1.name() + " payload size " + var6 + " exceeds protocol maximum");
      }

      int var7 = serializeInto(var0, var3, var6);
      var3.setIntLE(var5, var7);
      var4.recordSend(var2, var7, 0);
   }

   class="kw">private class="kw">static int serializeInto(@Nonnull Packet var0, @Nonnull ByteBuf var1, int var2) {
      if (var2 == 0) {
         class="kw">return 0;
      }

      var1.ensureWritable(var2);
      int var3 = var1.writerIndex();
      int var4;
      if (var1.hasArray()) {
         var4 = var0.serialize(MemorySegment.ofArray(var1.array()).asSlice(var1.arrayOffset() + var3, var2), 0);
      } else if (var1.isDirect() && var1.nioBufferCount() == 1) {
         var4 = var0.serialize(MemorySegment.ofBuffer(var1.nioBuffer(var3, var2)), 0);
      } else {
         byte[] var5 = new byte[var2];
         var4 = var0.serialize(MemorySegment.ofArray(var5), 0);
         var1.setBytes(var3, var5, 0, var4);
      }

      var1.writerIndex(var3 + var4);
      class="kw">return var4;
   }

   @Nonnull
   class="kw">public class="kw">static Packet readFramedPacket(@Nonnull ByteBuf var0, int var1, @Nonnull ByteBufAllocator var2, @Nonnull PacketStatsRecorder var3) {
      int var4 = var0.readIntLE();
      PacketRegistry.PacketInfo var5 = PacketRegistry.getToServerPacketById(var4);
      if (var5 == null) {
         var0.skipBytes(var1);
         throw new ProtocolException("Unknown packet ID: " + var4);
      } else {
         class="kw">return readFramedPacketWithInfo(var0, var1, var2, var5, var3);
      }
   }

   @Nonnull
   class="kw">public class="kw">static Packet readFramedPacketWithInfo(
      @Nonnull ByteBuf var0, int var1, @Nonnull ByteBufAllocator var2, @Nonnull PacketRegistry.PacketInfo var3, @Nonnull PacketStatsRecorder var4
   ) {
      int var7 = 0;
      ByteBuf var5;
      int var6;
      if (var3.compressed() && var1 > 0) {
         try {
            var5 = decompressFromBuffer(var2, var0, var0.readerIndex(), var1, var3.maxSize());
         } catch (ProtocolException var13) {
            var0.skipBytes(var1);
            throw var13;
         }

         var0.skipBytes(var1);
         var6 = var5.readableBytes();
         var7 = var1;
      } else if (var1 > 0) {
         var5 = var0.readRetainedSlice(var1);
         var6 = var1;
      } else {
         var5 = Unpooled.EMPTY_BUFFER;
         var6 = 0;
      }

      try {
         Packet var8 = var3.toObject().deserialize(asSegment(var5, var6), 0);
         var4.recordReceive(var3.id(), var6, var7);
         class="kw">return var8;
      } class="kw">finally {
         if (var1 > 0) {
            var5.release();
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static MemorySegment asSegment(@Nonnull ByteBuf var0, int var1) {
      if (var1 == 0) {
         class="kw">return MemorySegment.ofArray(EMPTY_PAYLOAD);
      }

      int var2 = var0.readerIndex();
      if (var0.hasArray()) {
         class="kw">return MemorySegment.ofArray(var0.array()).asSlice(var0.arrayOffset() + var2, var1);
      }

      if (var0.isDirect() && var0.nioBufferCount() == 1) {
         class="kw">return MemorySegment.ofBuffer(var0.nioBuffer(var2, var1));
      }

      byte[] var3 = new byte[var1];
      var0.getBytes(var2, var3);
      class="kw">return MemorySegment.ofArray(var3);
   }

   class="kw">public class="kw">static int writeFramedPacket(
      @Nonnull MemorySegment var0,
      @Nonnull Packet var1,
      @Nonnull PacketRegistry.PacketInfo var2,
      @Nonnull MemorySegment var3,
      int var4,
      int var5,
      @Nonnull PacketStatsRecorder var6
   ) {
      var3.set(PROTO_INT, var4 + 4, var2.id());
      int var7 = var4 + 8;
      if (var2.compressed()) {
         try (Arena var16 = Arena.ofConfined()) {
            MemorySegment var9 = var3.asSlice(var7);
            MemorySegment var10 = var16.allocate(var5);
            var1.serialize(var10, 0);
            if (var5 > var2.maxSize()) {
               throw new ProtocolException("Packet " + var2.name() + " serialized to " + var5 + " bytes, exceeds max size " + var2.maxSize());
            }

            long var11 = ZstdNative.compressCCtx(var0, var9, var9.byteSize(), var10, var10.byteSize(), COMPRESSION_LEVEL);
            if (ZstdNative.isError(var11)) {
               throw new ProtocolException("Zstd compression failed: " + ZstdNative.getErrorName(var11));
            }

            if (var11 > 1677721600L) {
               throw new ProtocolException("Packet " + var2.name() + " compressed payload size " + var11 + " exceeds protocol maximum");
            }

            var3.set(PROTO_INT, var4, (int)var11);
            var6.recordSend(var2.id(), var5, (int)var11);
            class="kw">return (int)(var11 + 8L);
         }
      } else {
         int var8 = var1.serialize(var3, var7);
         if (var8 > var2.maxSize()) {
            throw new ProtocolException("Packet " + var2.name() + " serialized to " + var8 + " bytes, exceeds max size " + var2.maxSize());
         }

         if (var8 > 1677721600) {
            throw new ProtocolException("Packet " + var2.name() + " payload size " + var8 + " exceeds protocol maximum");
         }

         var3.set(PROTO_INT, var4, var8);
         var6.recordSend(var2.id(), var8, 0);
         class="kw">return var8 + 8;
      }
   }

   @Nonnull
   class="kw">public class="kw">static Packet readFramedPacket(@Nonnull MemorySegment var0, @Nonnull MemorySegment var1, int var2, @Nonnull PacketStatsRecorder var3) {
      int var4 = var1.get(PROTO_INT, 0L);
      PacketRegistry.PacketInfo var5 = PacketRegistry.getToServerPacketById(var4);
      if (var5 == null) {
         throw new ProtocolException("Unknown packet ID: " + var4);
      } else if (var2 > var5.maxSize()) {
         throw new ProtocolException("Packet " + var5.name() + " payload size " + var2 + " exceeds max size " + var5.maxSize());
      } else {
         class="kw">return readFramedPacketWithInfo(var0, var1, (int)PROTO_INT.byteSize(), var2, var5, var3);
      }
   }

   @Nonnull
   class="kw">public class="kw">static Packet readFramedPacketWithInfo(
      @Nonnull MemorySegment var0, @Nonnull MemorySegment var1, int var2, int var3, @Nonnull PacketRegistry.PacketInfo var4, @Nonnull PacketStatsRecorder var5
   ) {
      int var7 = 0;
      Arena var9 = null;
      int var6;
      MemorySegment var8;
      byte var17;
      if (var4.compressed() && var3 > 0) {
         var9 = Arena.ofConfined();

         try {
            var8 = decompressFromBuffer(var0, var9, var1, var2, var3, var4.maxSize());
         } catch (Throwable var15) {
            var9.close();
            throw var15;
         }

         var6 = (int)var8.byteSize();
         var7 = var3;
         var17 = 0;
      } else {
         var8 = var1.asSlice(var2, var3);
         var17 = 0;
         var6 = var3;
      }

      try {
         Packet var10 = var4.toObject().deserialize(var8, var17);
         var5.recordReceive(var4.id(), var6, var7);
         class="kw">return var10;
      } class="kw">finally {
         if (var9 != null) {
            var9.close();
         }
      }
   }
}