Model class

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

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

Поля (183)

МодификаторыТипИмя
final int NULLABLE_BIT_FIELD_SIZE
int var1
Model var1
int var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
String var10
long var10
int var10
String var11
long var11
long var11
AnimationSet var12
long var12
int var13
int var13
var13
int var14
long var14
DetailBox[] var15
long var15
int var16
int var17
long var18
int var18
int var19
long var2
ReadCursor var2
ReadCursor var2
ReadCursor var2
ReadCursor var2
int var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
int var2
Map var2
String var20
AnimationSet var21
long var22
String var24
long var25
int var27
int var28
DetailBox[] var29
int var3
var3
int var3
var3
int var3
var3
int var3
var3
long var3
int var3
byte var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
String var31
var31
int var32
String var33
var33
int var34
String var35
var35
int var36
String var37
var37
int var38
CameraSettings var39
var39
long var4
long var4
long var4
long var4
int var4
int var4
var4
var4
var4
var4
var4
var4
var4
int var4
Map var40
var40
ModelAttachment[] var43
var43
int var44
var44
ModelParticle[] var46
var46
int var47
var47
ModelTrail[] var49
var49
int var5
int var5
ReadCursor var5
Map var5
long var50
int var51
var51
Map var53
var53
int var54
long var55
int var56
Model var59
var59
int var6
int var6
int var6
int var6
Map var6
String var6
var6
int var60
int var61
long var62
Model var63
int var64
int var65
int var67
int var68
Map var7
int var7
int var7
int var7
int var7
int var7
ModelAttachment[] var8
ModelParticle[] var8
ModelTrail[] var8
long var8
long var8
int var8
long var9
long var9
int var9

Методы (173)

МодификаторыВозвратСигнатура
public Model cloneModel clone()
public int computeSizeint computeSize()
for for(int var8 = 0; var8 < var6; var8++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var7 = 0; var7 < var5; var7++)
for for(int var16 = 0; var16 < var13; var16++)
for for(int var17 = 0; var17 < var16; var17++)
for for(int var19 = 0; var19 < var54; var19++)
for for(int var66 = 0; var66 < var61; var66++)
for for(int var69 = 0; var69 < var65; var69++)
for for(int var70 = 0; var70 < var68; var70++)
for for(int var30 = 0; var30 < var27; var30++)
for for(int var21 = 0; var21 < this.attachments.length; var21++)
for for(int var22 = 0; var22 < this.particles.length; var22++)
for for(int var23 = 0; var23 < this.trails.length; var23++)
for for(ModelAttachment var6 : this.attachments)
for for(ModelParticle var21 : this.particles)
for for(ModelTrail var22 : this.trails)
abstract return getAnimationSetsreturn getAnimationSets(var0, 0)
abstract return getAssetIdreturn getAssetId(var0, 0)
abstract return getAttachmentsreturn getAttachments(var0, 0)
abstract return getCamerareturn getCamera(var0, 0)
static float getCrouchOffsetfloat getCrouchOffset(MemorySegment var0)
static float getCrouchOffsetfloat getCrouchOffset(MemorySegment var0, int var1)
abstract return getCrouchOffsetreturn getCrouchOffset(var0, 0)
abstract return getDetailBoxesreturn getDetailBoxes(var0, 0)
static float getEyeHeightfloat getEyeHeight(MemorySegment var0)
static float getEyeHeightfloat getEyeHeight(MemorySegment var0, int var1)
abstract return getEyeHeightreturn getEyeHeight(var0, 0)
abstract return getGradientIdreturn getGradientId(var0, 0)
abstract return getGradientSetreturn getGradientSet(var0, 0)
abstract return getHitboxreturn getHitbox(var0, 0)
abstract return getLightreturn getLight(var0, 0)
abstract return getParticlesreturn getParticles(var0, 0)
abstract return getPathreturn getPath(var0, 0)
static Phobia getPhobiaPhobia getPhobia(MemorySegment var0)
static Phobia getPhobiaPhobia getPhobia(MemorySegment var0, int var1)
abstract return getPhobiareturn getPhobia(var0, 0)
abstract return getPhobiaModelreturn getPhobiaModel(var0, 0)
static float getScalefloat getScale(MemorySegment var0)
static float getScalefloat getScale(MemorySegment var0, int var1)
abstract return getScalereturn getScale(var0, 0)
static float getSittingOffsetfloat getSittingOffset(MemorySegment var0)
static float getSittingOffsetfloat getSittingOffset(MemorySegment var0, int var1)
abstract return getSittingOffsetreturn getSittingOffset(var0, 0)
static float getSleepingOffsetfloat getSleepingOffset(MemorySegment var0)
static float getSleepingOffsetfloat getSleepingOffset(MemorySegment var0, int var1)
abstract return getSleepingOffsetreturn getSleepingOffset(var0, 0)
abstract return getTexturereturn getTexture(var0, 0)
abstract return getTrailsreturn getTrails(var0, 0)
static int getValidatedOffsetint getValidatedOffset(MemorySegment var0, int var1, int var2, int var3, String var4)
static boolean hasAnimationSetsboolean hasAnimationSets(MemorySegment var0, int var1)
static boolean hasAssetIdboolean hasAssetId(MemorySegment var0, int var1)
static boolean hasAttachmentsboolean hasAttachments(MemorySegment var0, int var1)
static boolean hasCameraboolean hasCamera(MemorySegment var0, int var1)
static boolean hasDetailBoxesboolean hasDetailBoxes(MemorySegment var0, int var1)
static boolean hasGradientIdboolean hasGradientId(MemorySegment var0, int var1)
static boolean hasGradientSetboolean hasGradientSet(MemorySegment var0, int var1)
static boolean hasHitboxboolean hasHitbox(MemorySegment var0, int var1)
static boolean hasLightboolean hasLight(MemorySegment var0, int var1)
static boolean hasParticlesboolean hasParticles(MemorySegment var0, int var1)
static boolean hasPathboolean hasPath(MemorySegment var0, int var1)
static boolean hasPhobiaModelboolean hasPhobiaModel(MemorySegment var0, int var1)
static boolean hasTextureboolean hasTexture(MemorySegment var0, int var1)
static boolean hasTrailsboolean hasTrails(MemorySegment var0, int var1)
if if(var1 < 0)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var11 == -1L)
if if(var13 > 4096000)
if if(var4 != var2)
if if(var14 == -1L)
if if(var16 > 4096000)
if if(var15 == -1L)
if if(var54 > 4096000)
if if(var50 == -1L)
if if(var61 > 4096000)
if if(var55 == -1L)
if if(var65 > 4096000)
if if(var62 == -1L)
if if(var68 > 4096000)
if if(var25 == -1L)
if if(var27 > 4096000)
if if(var2 != null)
if if(this.hitbox != null)
if if(this.light != null)
if if(this.assetId != null)
if if(this.path != null)
if if(this.texture != null)
if if(this.gradientSet != null)
if if(this.gradientId != null)
if if(this.camera != null)
if if(this.animationSets != null)
if if(this.attachments != null)
if if(this.particles != null)
if if(this.trails != null)
if if(this.detailBoxes != null)
if if(this.phobiaModel != null)
if if(this.hitbox != null)
if if(this.light != null)
if if(this.assetId != null)
if if(this.path != null)
if if(this.texture != null)
if if(this.gradientSet != null)
if if(this.gradientId != null)
if if(this.camera != null)
if if(this.animationSets != null)
if if(this.attachments != null)
if if(this.attachments.length > 4096000)
if if(this.particles != null)
if if(this.particles.length > 4096000)
if if(this.trails != null)
if if(this.trails.length > 4096000)
if if(this.detailBoxes != null)
if if(this.phobiaModel != null)
if if(this.assetId != null)
if if(this.path != null)
if if(this.texture != null)
if if(this.gradientSet != null)
if if(this.gradientId != null)
if if(this.camera != null)
if if(this.animationSets != null)
if if(this.attachments != null)
if if(this.particles != null)
if if(this.trails != null)
if if(this.detailBoxes != null)
if if(this.phobiaModel != null)
if if(this.animationSets != null)
if if(this.detailBoxes != null)
if if(this == var1)
static void requireBoundsvoid requireBounds(MemorySegment var0, int var1)
abstract requireBounds requireBounds(var0, var1)
static void requireSlotvoid requireSlot(MemorySegment var0, int var1, int var2, String var3)
abstract requireSlot requireSlot(var0, var1 + 51, var4, "AssetId")
abstract requireSlot requireSlot(var0, var1 + 51, -1, "AssetId")
abstract requireSlot requireSlot(var0, var1 + 55, var4, "Path")
abstract requireSlot requireSlot(var0, var1 + 55, -1, "Path")
abstract requireSlot requireSlot(var0, var1 + 59, var4, "Texture")
abstract requireSlot requireSlot(var0, var1 + 59, -1, "Texture")
abstract requireSlot requireSlot(var0, var1 + 63, var4, "GradientSet")
abstract requireSlot requireSlot(var0, var1 + 63, -1, "GradientSet")
abstract requireSlot requireSlot(var0, var1 + 67, var4, "GradientId")
abstract requireSlot requireSlot(var0, var1 + 67, -1, "GradientId")
abstract requireSlot requireSlot(var0, var1 + 71, var4, "Camera")
abstract requireSlot requireSlot(var0, var1 + 71, -1, "Camera")
abstract requireSlot requireSlot(var0, var1 + 75, var4, "AnimationSets")
abstract requireSlot requireSlot(var0, var1 + 75, -1, "AnimationSets")
abstract requireSlot requireSlot(var0, var1 + 79, var4, "Attachments")
abstract requireSlot requireSlot(var0, var1 + 79, -1, "Attachments")
abstract requireSlot requireSlot(var0, var1 + 83, var4, "Particles")
abstract requireSlot requireSlot(var0, var1 + 83, -1, "Particles")
abstract requireSlot requireSlot(var0, var1 + 87, var4, "Trails")
abstract requireSlot requireSlot(var0, var1 + 87, -1, "Trails")
abstract requireSlot requireSlot(var0, var1 + 91, var4, "DetailBoxes")
abstract requireSlot requireSlot(var0, var1 + 91, -1, "DetailBoxes")
abstract requireSlot requireSlot(var0, var1 + 95, var4, "PhobiaModel")
abstract requireSlot requireSlot(var0, var1 + 95, -1, "PhobiaModel")
public int serializeint serialize(@Nonnull MemorySegment var1, int var2)
static Model toObjectModel toObject(MemorySegment var0)
static Model toObjectModel toObject(MemorySegment var0, int var1)
static Model toObjectModel toObject(MemorySegment var0, int var1, @Nullable ReadCursor var2)
abstract return toObjectreturn toObject(var0, 0, null)
abstract return toObjectreturn toObject(var0, var1, null)

Исходный код

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

class="kw">import com.hypixel.hytale.protocol.io.PacketIO;
class="kw">import com.hypixel.hytale.protocol.io.ProtocolException;
class="kw">import com.hypixel.hytale.protocol.io.ReadCursor;
class="kw">import com.hypixel.hytale.protocol.io.VarInt;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.util.Arrays;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class Model {
   class="kw">public class="kw">static class="kw">final int NULLABLE_BIT_FIELD_SIZE = 2;
   class="kw">public class="kw">static class="kw">final int FIXED_BLOCK_SIZE = 51;
   class="kw">public class="kw">static class="kw">final int VARIABLE_FIELD_COUNT = 12;
   class="kw">public class="kw">static class="kw">final int VARIABLE_BLOCK_START = 99;
   class="kw">public class="kw">static class="kw">final int MAX_SIZE = 1677721600;
   @Nullable
   class="kw">public String assetId;
   @Nullable
   class="kw">public String path;
   @Nullable
   class="kw">public String texture;
   @Nullable
   class="kw">public String gradientSet;
   @Nullable
   class="kw">public String gradientId;
   @Nullable
   class="kw">public CameraSettings camera;
   class="kw">public float scale;
   class="kw">public float eyeHeight;
   class="kw">public float crouchOffset;
   class="kw">public float sittingOffset;
   class="kw">public float sleepingOffset;
   @Nullable
   class="kw">public Map<String, AnimationSet> animationSets;
   @Nullable
   class="kw">public ModelAttachment[] attachments;
   @Nullable
   class="kw">public Hitbox hitbox;
   @Nullable
   class="kw">public ModelParticle[] particles;
   @Nullable
   class="kw">public ModelTrail[] trails;
   @Nullable
   class="kw">public ColorLight light;
   @Nullable
   class="kw">public Map<String, DetailBox[]> detailBoxes;
   @Nonnull
   class="kw">public Phobia phobia = Phobia.None;
   @Nullable
   class="kw">public Model phobiaModel;

   class="kw">public Model() {
   }

   class="kw">public Model(
      @Nullable String var1,
      @Nullable String var2,
      @Nullable String var3,
      @Nullable String var4,
      @Nullable String var5,
      @Nullable CameraSettings var6,
      float var7,
      float var8,
      float var9,
      float var10,
      float var11,
      @Nullable Map<String, AnimationSet> var12,
      @Nullable ModelAttachment[] var13,
      @Nullable Hitbox var14,
      @Nullable ModelParticle[] var15,
      @Nullable ModelTrail[] var16,
      @Nullable ColorLight var17,
      @Nullable Map<String, DetailBox[]> var18,
      @Nonnull Phobia var19,
      @Nullable Model var20
   ) {
      this.assetId = var1;
      this.path = var2;
      this.texture = var3;
      this.gradientSet = var4;
      this.gradientId = var5;
      this.camera = var6;
      this.scale = var7;
      this.eyeHeight = var8;
      this.crouchOffset = var9;
      this.sittingOffset = var10;
      this.sleepingOffset = var11;
      this.animationSets = var12;
      this.attachments = var13;
      this.hitbox = var14;
      this.particles = var15;
      this.trails = var16;
      this.light = var17;
      this.detailBoxes = var18;
      this.phobia = var19;
      this.phobiaModel = var20;
   }

   class="kw">public Model(@Nonnull Model var1) {
      this.assetId = var1.assetId;
      this.path = var1.path;
      this.texture = var1.texture;
      this.gradientSet = var1.gradientSet;
      this.gradientId = var1.gradientId;
      this.camera = var1.camera;
      this.scale = var1.scale;
      this.eyeHeight = var1.eyeHeight;
      this.crouchOffset = var1.crouchOffset;
      this.sittingOffset = var1.sittingOffset;
      this.sleepingOffset = var1.sleepingOffset;
      this.animationSets = var1.animationSets;
      this.attachments = var1.attachments;
      this.hitbox = var1.hitbox;
      this.particles = var1.particles;
      this.trails = var1.trails;
      this.light = var1.light;
      this.detailBoxes = var1.detailBoxes;
      this.phobia = var1.phobia;
      this.phobiaModel = var1.phobiaModel;
   }

   class="kw">public class="kw">static void requireBounds(MemorySegment var0, int var1) {
      if (var1 < 0) {
         throw ProtocolException.invalidOffset("Model", var1, (int)var0.byteSize());
      }

      long var2 = var1 + 99L;
      if (var2 > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Model", (int)Math.min(var2, 2147483647L), (int)var0.byteSize());
      }
   }

   @Nullable
   class="kw">public class="kw">static String getAssetId(MemorySegment var0) {
      class="kw">return getAssetId(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getAssetId(MemorySegment var0, int var1) {
      class="kw">return hasAssetId(var0, var1) ? PacketIO.readVarString("AssetId", var0, var1 + getValidatedOffset(var0, var1, 51, 99, "AssetId"), 4096000) : null;
   }

   @Nullable
   class="kw">public class="kw">static String getPath(MemorySegment var0) {
      class="kw">return getPath(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getPath(MemorySegment var0, int var1) {
      class="kw">return hasPath(var0, var1) ? PacketIO.readVarString("Path", var0, var1 + getValidatedOffset(var0, var1, 55, 99, "Path"), 4096000) : null;
   }

   @Nullable
   class="kw">public class="kw">static String getTexture(MemorySegment var0) {
      class="kw">return getTexture(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getTexture(MemorySegment var0, int var1) {
      class="kw">return hasTexture(var0, var1) ? PacketIO.readVarString("Texture", var0, var1 + getValidatedOffset(var0, var1, 59, 99, "Texture"), 4096000) : null;
   }

   @Nullable
   class="kw">public class="kw">static String getGradientSet(MemorySegment var0) {
      class="kw">return getGradientSet(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getGradientSet(MemorySegment var0, int var1) {
      class="kw">return hasGradientSet(var0, var1)
         ? PacketIO.readVarString("GradientSet", var0, var1 + getValidatedOffset(var0, var1, 63, 99, "GradientSet"), 4096000)
         : null;
   }

   @Nullable
   class="kw">public class="kw">static String getGradientId(MemorySegment var0) {
      class="kw">return getGradientId(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getGradientId(MemorySegment var0, int var1) {
      class="kw">return hasGradientId(var0, var1)
         ? PacketIO.readVarString("GradientId", var0, var1 + getValidatedOffset(var0, var1, 67, 99, "GradientId"), 4096000)
         : null;
   }

   @Nullable
   class="kw">public class="kw">static CameraSettings getCamera(MemorySegment var0) {
      class="kw">return getCamera(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static CameraSettings getCamera(MemorySegment var0, int var1) {
      class="kw">return hasCamera(var0, var1) ? CameraSettings.toObject(var0, var1 + getValidatedOffset(var0, var1, 71, 99, "Camera")) : null;
   }

   class="kw">public class="kw">static float getScale(MemorySegment var0) {
      class="kw">return getScale(var0, 0);
   }

   class="kw">public class="kw">static float getScale(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 2), "Scale");
   }

   class="kw">public class="kw">static float getEyeHeight(MemorySegment var0) {
      class="kw">return getEyeHeight(var0, 0);
   }

   class="kw">public class="kw">static float getEyeHeight(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 6), "EyeHeight");
   }

   class="kw">public class="kw">static float getCrouchOffset(MemorySegment var0) {
      class="kw">return getCrouchOffset(var0, 0);
   }

   class="kw">public class="kw">static float getCrouchOffset(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 10), "CrouchOffset");
   }

   class="kw">public class="kw">static float getSittingOffset(MemorySegment var0) {
      class="kw">return getSittingOffset(var0, 0);
   }

   class="kw">public class="kw">static float getSittingOffset(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 14), "SittingOffset");
   }

   class="kw">public class="kw">static float getSleepingOffset(MemorySegment var0) {
      class="kw">return getSleepingOffset(var0, 0);
   }

   class="kw">public class="kw">static float getSleepingOffset(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 18), "SleepingOffset");
   }

   @Nullable
   class="kw">public class="kw">static Map<String, AnimationSet> getAnimationSets(MemorySegment var0) {
      class="kw">return getAnimationSets(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Map<String, AnimationSet> getAnimationSets(MemorySegment var0, int var1) {
      if (!hasAnimationSets(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 75, 99, "AnimationSets");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("AnimationSets");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.dictionaryTooLarge("AnimationSets", var6, 4096000);
      }

      var3 += (int)(var4 >>> 32);
      if (var3 + var6 * 18L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("AnimationSets", (int)Math.min(var3 + var6 * 18L, 2147483647L), (int)var0.byteSize());
      }

      Map var7 = new HashMap<>(var6);

      for (int var8 = 0; var8 < var6; var8++) {
         long var9 = VarInt.getWithLength(var0, var3);
         String var11 = PacketIO.readVarString("key", var0, var3, 0, 4096000, var9);
         var3 += (int)var9 + (int)(var9 >>> 32);
         AnimationSet var12 = AnimationSet.toObject(var0, var3, var2);
         var3 = var2.position;
         if (var7.put(var11, var12) != null) {
            throw ProtocolException.duplicateKey("AnimationSets", var11);
         }
      }

      class="kw">return var7;
   }

   @Nullable
   class="kw">public class="kw">static ModelAttachment[] getAttachments(MemorySegment var0) {
      class="kw">return getAttachments(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static ModelAttachment[] getAttachments(MemorySegment var0, int var1) {
      if (!hasAttachments(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 79, 99, "Attachments");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Attachments");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("Attachments", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 17L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Attachments", (int)Math.min(var3 + var7 + var6 * 17L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      ModelAttachment[] var8 = new ModelAttachment[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = ModelAttachment.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

   @Nullable
   class="kw">public class="kw">static Hitbox getHitbox(MemorySegment var0) {
      class="kw">return getHitbox(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Hitbox getHitbox(MemorySegment var0, int var1) {
      class="kw">return hasHitbox(var0, var1) ? Hitbox.toObject(var0, var1 + 22) : null;
   }

   @Nullable
   class="kw">public class="kw">static ModelParticle[] getParticles(MemorySegment var0) {
      class="kw">return getParticles(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static ModelParticle[] getParticles(MemorySegment var0, int var1) {
      if (!hasParticles(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 83, 99, "Particles");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Particles");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("Particles", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 42L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Particles", (int)Math.min(var3 + var7 + var6 * 42L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      ModelParticle[] var8 = new ModelParticle[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = ModelParticle.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

   @Nullable
   class="kw">public class="kw">static ModelTrail[] getTrails(MemorySegment var0) {
      class="kw">return getTrails(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static ModelTrail[] getTrails(MemorySegment var0, int var1) {
      if (!hasTrails(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 87, 99, "Trails");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Trails");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("Trails", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 35L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Trails", (int)Math.min(var3 + var7 + var6 * 35L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      ModelTrail[] var8 = new ModelTrail[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = ModelTrail.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

   @Nullable
   class="kw">public class="kw">static ColorLight getLight(MemorySegment var0) {
      class="kw">return getLight(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static ColorLight getLight(MemorySegment var0, int var1) {
      class="kw">return hasLight(var0, var1) ? ColorLight.toObject(var0, var1 + 46) : null;
   }

   @Nullable
   class="kw">public class="kw">static Map<String, DetailBox[]> getDetailBoxes(MemorySegment var0) {
      class="kw">return getDetailBoxes(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Map<String, DetailBox[]> getDetailBoxes(MemorySegment var0, int var1) {
      if (!hasDetailBoxes(var0, var1)) {
         class="kw">return null;
      }

      int var2 = var1 + getValidatedOffset(var0, var1, 91, 99, "DetailBoxes");
      long var3 = VarInt.getWithLength(var0, var2);
      if (var3 == -1L) {
         throw ProtocolException.invalidVarInt("DetailBoxes");
      }

      int var5 = (int)var3;
      if (var5 > 4096000) {
         throw ProtocolException.dictionaryTooLarge("DetailBoxes", var5, 4096000);
      }

      var2 += (int)(var3 >>> 32);
      if (var2 + var5 * 2L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("DetailBoxes", (int)Math.min(var2 + var5 * 2L, 2147483647L), (int)var0.byteSize());
      }

      Map var6 = new HashMap<>(var5);

      for (int var7 = 0; var7 < var5; var7++) {
         long var8 = VarInt.getWithLength(var0, var2);
         String var10 = PacketIO.readVarString("key", var0, var2, 0, 4096000, var8);
         var2 += (int)var8 + (int)(var8 >>> 32);
         long var11 = VarInt.getWithLength(var0, var2);
         if (var11 == -1L) {
            throw ProtocolException.invalidVarInt("value");
         }

         int var13 = (int)var11;
         int var14 = (int)(var11 >>> 32);
         if (var13 > 4096000) {
            throw ProtocolException.arrayTooLong("value", var13, 4096000);
         }

         if (var2 + var14 + var13 * 37L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("value", var2 + var14 + var13 * 37, (int)var0.byteSize());
         }

         var2 += var14;
         DetailBox[] var15 = new DetailBox[var13];

         for (int var16 = 0; var16 < var13; var16++) {
            var15[var16] = DetailBox.toObject(var0, var2);
            var2 += 37;
         }

         if (var6.put(var10, var15) != null) {
            throw ProtocolException.duplicateKey("DetailBoxes", var10);
         }
      }

      class="kw">return var6;
   }

   class="kw">public class="kw">static Phobia getPhobia(MemorySegment var0) {
      class="kw">return getPhobia(var0, 0);
   }

   class="kw">public class="kw">static Phobia getPhobia(MemorySegment var0, int var1) {
      class="kw">return Phobia.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 50));
   }

   @Nullable
   class="kw">public class="kw">static Model getPhobiaModel(MemorySegment var0) {
      class="kw">return getPhobiaModel(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Model getPhobiaModel(MemorySegment var0, int var1) {
      class="kw">return hasPhobiaModel(var0, var1) ? toObject(var0, var1 + getValidatedOffset(var0, var1, 95, 99, "PhobiaModel")) : null;
   }

   class="kw">public class="kw">static boolean hasHitbox(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 1) != 0;
   }

   class="kw">public class="kw">static boolean hasLight(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 2) != 0;
   }

   class="kw">public class="kw">static boolean hasAssetId(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 4) != 0;
   }

   class="kw">public class="kw">static boolean hasPath(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 8) != 0;
   }

   class="kw">public class="kw">static boolean hasTexture(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 16) != 0;
   }

   class="kw">public class="kw">static boolean hasGradientSet(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 32) != 0;
   }

   class="kw">public class="kw">static boolean hasGradientId(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 64) != 0;
   }

   class="kw">public class="kw">static boolean hasCamera(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 128) != 0;
   }

   class="kw">public class="kw">static boolean hasAnimationSets(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 1) != 0;
   }

   class="kw">public class="kw">static boolean hasAttachments(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 2) != 0;
   }

   class="kw">public class="kw">static boolean hasParticles(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 4) != 0;
   }

   class="kw">public class="kw">static boolean hasTrails(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 8) != 0;
   }

   class="kw">public class="kw">static boolean hasDetailBoxes(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 16) != 0;
   }

   class="kw">public class="kw">static boolean hasPhobiaModel(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 32) != 0;
   }

   class="kw">private class="kw">static int getValidatedOffset(MemorySegment var0, int var1, int var2, int var3, String var4) {
      int var5 = var0.get(PacketIO.PROTO_INT, var1 + var2);
      if (var5 >= 0 && var5 <= var0.byteSize() - var1 - var3) {
         class="kw">return var3 + var5;
      } else {
         throw ProtocolException.invalidOffset(var4, var5, (int)var0.byteSize());
      }
   }

   class="kw">private class="kw">static void requireSlot(MemorySegment var0, int var1, int var2, String var3) {
      int var4 = var0.get(PacketIO.PROTO_INT, var1);
      if (var4 != var2) {
         throw ProtocolException.nonCanonicalLayout(var3, var4, var2);
      }
   }

   class="kw">public class="kw">static Model toObject(MemorySegment var0) {
      class="kw">return toObject(var0, 0, null);
   }

   class="kw">public class="kw">static Model toObject(MemorySegment var0, int var1) {
      class="kw">return toObject(var0, var1, null);
   }

   class="kw">public class="kw">static Model toObject(MemorySegment var0, int var1, @Nullable ReadCursor var2) {
      requireBounds(var0, var1);
      int var3 = var1 + 99;
      int var4 = 0;
      ReadCursor var5 = var2 != null ? var2 : new ReadCursor();
      String var6 = null;
      if (hasAssetId(var0, var1)) {
         requireSlot(var0, var1 + 51, var4, "AssetId");
         int var7 = var3 + var4;
         long var8 = VarInt.getWithLength(var0, var7);
         var6 = PacketIO.readVarString("AssetId", var0, var7, 0, 4096000, var8);
         var4 += (int)var8 + (int)(var8 >>> 32);
      } else {
         requireSlot(var0, var1 + 51, -1, "AssetId");
      }

      String var31 = null;
      if (hasPath(var0, var1)) {
         requireSlot(var0, var1 + 55, var4, "Path");
         int var32 = var3 + var4;
         long var9 = VarInt.getWithLength(var0, var32);
         var31 = PacketIO.readVarString("Path", var0, var32, 0, 4096000, var9);
         var4 += (int)var9 + (int)(var9 >>> 32);
      } else {
         requireSlot(var0, var1 + 55, -1, "Path");
      }

      String var33 = null;
      if (hasTexture(var0, var1)) {
         requireSlot(var0, var1 + 59, var4, "Texture");
         int var34 = var3 + var4;
         long var10 = VarInt.getWithLength(var0, var34);
         var33 = PacketIO.readVarString("Texture", var0, var34, 0, 4096000, var10);
         var4 += (int)var10 + (int)(var10 >>> 32);
      } else {
         requireSlot(var0, var1 + 59, -1, "Texture");
      }

      String var35 = null;
      if (hasGradientSet(var0, var1)) {
         requireSlot(var0, var1 + 63, var4, "GradientSet");
         int var36 = var3 + var4;
         long var11 = VarInt.getWithLength(var0, var36);
         var35 = PacketIO.readVarString("GradientSet", var0, var36, 0, 4096000, var11);
         var4 += (int)var11 + (int)(var11 >>> 32);
      } else {
         requireSlot(var0, var1 + 63, -1, "GradientSet");
      }

      String var37 = null;
      if (hasGradientId(var0, var1)) {
         requireSlot(var0, var1 + 67, var4, "GradientId");
         int var38 = var3 + var4;
         long var12 = VarInt.getWithLength(var0, var38);
         var37 = PacketIO.readVarString("GradientId", var0, var38, 0, 4096000, var12);
         var4 += (int)var12 + (int)(var12 >>> 32);
      } else {
         requireSlot(var0, var1 + 67, -1, "GradientId");
      }

      CameraSettings var39 = null;
      if (hasCamera(var0, var1)) {
         requireSlot(var0, var1 + 71, var4, "Camera");
         var39 = CameraSettings.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 71, -1, "Camera");
      }

      Map var40 = null;
      if (hasAnimationSets(var0, var1)) {
         requireSlot(var0, var1 + 75, var4, "AnimationSets");
         int var13 = var3 + var4;
         long var14 = VarInt.getWithLength(var0, var13);
         if (var14 == -1L) {
            throw ProtocolException.invalidVarInt("AnimationSets");
         }

         int var16 = (int)var14;
         if (var16 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("AnimationSets", var16, 4096000);
         }

         var13 += (int)(var14 >>> 32);
         if (var13 + var16 * 18L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("AnimationSets", (int)Math.min(var13 + var16 * 18L, 2147483647L), (int)var0.byteSize());
         }

         var40 = new HashMap<>(var16);

         for (int var17 = 0; var17 < var16; var17++) {
            long var18 = VarInt.getWithLength(var0, var13);
            String var20 = PacketIO.readVarString("key", var0, var13, 0, 4096000, var18);
            var13 += (int)var18 + (int)(var18 >>> 32);
            AnimationSet var21 = AnimationSet.toObject(var0, var13, var5);
            var13 = var5.position;
            if (var40.put(var20, var21) != null) {
               throw ProtocolException.duplicateKey("AnimationSets", var20);
            }
         }

         var4 = var13 - var3;
      } else {
         requireSlot(var0, var1 + 75, -1, "AnimationSets");
      }

      ModelAttachment[] var43 = null;
      if (hasAttachments(var0, var1)) {
         requireSlot(var0, var1 + 79, var4, "Attachments");
         int var44 = var3 + var4;
         long var15 = VarInt.getWithLength(var0, var44);
         if (var15 == -1L) {
            throw ProtocolException.invalidVarInt("Attachments");
         }

         int var54 = (int)var15;
         if (var54 > 4096000) {
            throw ProtocolException.arrayTooLong("Attachments", var54, 4096000);
         }

         int var60 = (int)(var15 >>> 32);
         if (var44 + var60 + var54 * 17L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Attachments", (int)Math.min(var44 + var60 + var54 * 17L, 2147483647L), (int)var0.byteSize());
         }

         var44 += var60;
         var43 = new ModelAttachment[var54];

         for (int var19 = 0; var19 < var54; var19++) {
            var43[var19] = ModelAttachment.toObject(var0, var44, var5);
            var44 = var5.position;
         }

         var4 = var44 - var3;
      } else {
         requireSlot(var0, var1 + 79, -1, "Attachments");
      }

      ModelParticle[] var46 = null;
      if (hasParticles(var0, var1)) {
         requireSlot(var0, var1 + 83, var4, "Particles");
         int var47 = var3 + var4;
         long var50 = VarInt.getWithLength(var0, var47);
         if (var50 == -1L) {
            throw ProtocolException.invalidVarInt("Particles");
         }

         int var61 = (int)var50;
         if (var61 > 4096000) {
            throw ProtocolException.arrayTooLong("Particles", var61, 4096000);
         }

         int var64 = (int)(var50 >>> 32);
         if (var47 + var64 + var61 * 42L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Particles", (int)Math.min(var47 + var64 + var61 * 42L, 2147483647L), (int)var0.byteSize());
         }

         var47 += var64;
         var46 = new ModelParticle[var61];

         for (int var66 = 0; var66 < var61; var66++) {
            var46[var66] = ModelParticle.toObject(var0, var47, var5);
            var47 = var5.position;
         }

         var4 = var47 - var3;
      } else {
         requireSlot(var0, var1 + 83, -1, "Particles");
      }

      ModelTrail[] var49 = null;
      if (hasTrails(var0, var1)) {
         requireSlot(var0, var1 + 87, var4, "Trails");
         int var51 = var3 + var4;
         long var55 = VarInt.getWithLength(var0, var51);
         if (var55 == -1L) {
            throw ProtocolException.invalidVarInt("Trails");
         }

         int var65 = (int)var55;
         if (var65 > 4096000) {
            throw ProtocolException.arrayTooLong("Trails", var65, 4096000);
         }

         int var67 = (int)(var55 >>> 32);
         if (var51 + var67 + var65 * 35L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Trails", (int)Math.min(var51 + var67 + var65 * 35L, 2147483647L), (int)var0.byteSize());
         }

         var51 += var67;
         var49 = new ModelTrail[var65];

         for (int var69 = 0; var69 < var65; var69++) {
            var49[var69] = ModelTrail.toObject(var0, var51, var5);
            var51 = var5.position;
         }

         var4 = var51 - var3;
      } else {
         requireSlot(var0, var1 + 87, -1, "Trails");
      }

      Map var53 = null;
      if (hasDetailBoxes(var0, var1)) {
         requireSlot(var0, var1 + 91, var4, "DetailBoxes");
         int var56 = var3 + var4;
         long var62 = VarInt.getWithLength(var0, var56);
         if (var62 == -1L) {
            throw ProtocolException.invalidVarInt("DetailBoxes");
         }

         int var68 = (int)var62;
         if (var68 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("DetailBoxes", var68, 4096000);
         }

         var56 += (int)(var62 >>> 32);
         if (var56 + var68 * 2L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("DetailBoxes", (int)Math.min(var56 + var68 * 2L, 2147483647L), (int)var0.byteSize());
         }

         var53 = new HashMap<>(var68);

         for (int var70 = 0; var70 < var68; var70++) {
            long var22 = VarInt.getWithLength(var0, var56);
            String var24 = PacketIO.readVarString("key", var0, var56, 0, 4096000, var22);
            var56 += (int)var22 + (int)(var22 >>> 32);
            long var25 = VarInt.getWithLength(var0, var56);
            if (var25 == -1L) {
               throw ProtocolException.invalidVarInt("value");
            }

            int var27 = (int)var25;
            int var28 = (int)(var25 >>> 32);
            if (var27 > 4096000) {
               throw ProtocolException.arrayTooLong("value", var27, 4096000);
            }

            if (var56 + var28 + var27 * 37L > var0.byteSize()) {
               throw ProtocolException.bufferTooSmall("value", var56 + var28 + var27 * 37, (int)var0.byteSize());
            }

            var56 += var28;
            DetailBox[] var29 = new DetailBox[var27];

            for (int var30 = 0; var30 < var27; var30++) {
               var29[var30] = DetailBox.toObject(var0, var56);
               var56 += 37;
            }

            if (var53.put(var24, var29) != null) {
               throw ProtocolException.duplicateKey("DetailBoxes", var24);
            }
         }

         var4 = var56 - var3;
      } else {
         requireSlot(var0, var1 + 91, -1, "DetailBoxes");
      }

      Model var59 = null;
      if (hasPhobiaModel(var0, var1)) {
         requireSlot(var0, var1 + 95, var4, "PhobiaModel");
         var59 = toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 95, -1, "PhobiaModel");
      }

      Model var63 = new Model(
         var6,
         var31,
         var33,
         var35,
         var37,
         var39,
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 2), "Scale"),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 6), "EyeHeight"),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 10), "CrouchOffset"),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 14), "SittingOffset"),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 18), "SleepingOffset"),
         var40,
         var43,
         hasHitbox(var0, var1) ? Hitbox.toObject(var0, var1 + 22) : null,
         var46,
         var49,
         hasLight(var0, var1) ? ColorLight.toObject(var0, var1 + 46) : null,
         var53,
         Phobia.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 50)),
         var59
      );
      if (var2 != null) {
         var2.position = var3 + var4;
      }

      class="kw">return var63;
   }

   class="kw">public int serialize(@Nonnull MemorySegment var1, int var2) {
      byte var3 = 0;
      if (this.hitbox != null) {
         var3 = (byte)(var3 | 1);
      }

      if (this.light != null) {
         var3 = (byte)(var3 | 2);
      }

      if (this.assetId != null) {
         var3 = (byte)(var3 | 4);
      }

      if (this.path != null) {
         var3 = (byte)(var3 | 8);
      }

      if (this.texture != null) {
         var3 = (byte)(var3 | 16);
      }

      if (this.gradientSet != null) {
         var3 = (byte)(var3 | 32);
      }

      if (this.gradientId != null) {
         var3 = (byte)(var3 | 64);
      }

      if (this.camera != null) {
         var3 = (byte)(var3 | 128);
      }

      var1.set(PacketIO.PROTO_BYTE, var2 + 0, var3);
      var3 = 0;
      if (this.animationSets != null) {
         var3 = (byte)(var3 | 1);
      }

      if (this.attachments != null) {
         var3 = (byte)(var3 | 2);
      }

      if (this.particles != null) {
         var3 = (byte)(var3 | 4);
      }

      if (this.trails != null) {
         var3 = (byte)(var3 | 8);
      }

      if (this.detailBoxes != null) {
         var3 = (byte)(var3 | 16);
      }

      if (this.phobiaModel != null) {
         var3 = (byte)(var3 | 32);
      }

      var1.set(PacketIO.PROTO_BYTE, var2 + 1, var3);
      PacketIO.requireFinite(this.scale, "Scale");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 2, this.scale);
      PacketIO.requireFinite(this.eyeHeight, "EyeHeight");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 6, this.eyeHeight);
      PacketIO.requireFinite(this.crouchOffset, "CrouchOffset");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 10, this.crouchOffset);
      PacketIO.requireFinite(this.sittingOffset, "SittingOffset");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 14, this.sittingOffset);
      PacketIO.requireFinite(this.sleepingOffset, "SleepingOffset");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 18, this.sleepingOffset);
      if (this.hitbox != null) {
         this.hitbox.serialize(var1, var2 + 22);
      } else {
         var1.asSlice(var2 + 22, 24L).fill((byte)0);
      }

      if (this.light != null) {
         this.light.serialize(var1, var2 + 46);
      } else {
         var1.asSlice(var2 + 46, 4L).fill((byte)0);
      }

      var1.set(PacketIO.PROTO_BYTE, var2 + 50, (byte)this.phobia.getValue());
      int var4 = var2 + 99;
      if (this.assetId != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 51, var4 - var2 - 99);
         var4 += PacketIO.writeVarString(var1, var4, this.assetId, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 51, -1);
      }

      if (this.path != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 55, var4 - var2 - 99);
         var4 += PacketIO.writeVarString(var1, var4, this.path, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 55, -1);
      }

      if (this.texture != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 59, var4 - var2 - 99);
         var4 += PacketIO.writeVarString(var1, var4, this.texture, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 59, -1);
      }

      if (this.gradientSet != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 63, var4 - var2 - 99);
         var4 += PacketIO.writeVarString(var1, var4, this.gradientSet, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 63, -1);
      }

      if (this.gradientId != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 67, var4 - var2 - 99);
         var4 += PacketIO.writeVarString(var1, var4, this.gradientId, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 67, -1);
      }

      if (this.camera != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 71, var4 - var2 - 99);
         var4 += this.camera.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 71, -1);
      }

      if (this.animationSets != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 75, var4 - var2 - 99);
         if (this.animationSets.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("AnimationSets", this.animationSets.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.animationSets.size());

         for (Entry var6 : this.animationSets.entrySet()) {
            var4 += PacketIO.writeVarString(var1, var4, var6.getKey(), 4096000);
            var4 += var6.getValue().serialize(var1, var4);
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 75, -1);
      }

      if (this.attachments != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 79, var4 - var2 - 99);
         if (this.attachments.length > 4096000) {
            throw ProtocolException.arrayTooLong("Attachments", this.attachments.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.attachments.length);
         int var17 = 0;

         for (int var21 = 0; var21 < this.attachments.length; var21++) {
            var17 += this.attachments[var21].serialize(var1, var4 + var17);
         }

         var4 += var17;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 79, -1);
      }

      if (this.particles != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 83, var4 - var2 - 99);
         if (this.particles.length > 4096000) {
            throw ProtocolException.arrayTooLong("Particles", this.particles.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.particles.length);
         int var18 = 0;

         for (int var22 = 0; var22 < this.particles.length; var22++) {
            var18 += this.particles[var22].serialize(var1, var4 + var18);
         }

         var4 += var18;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 83, -1);
      }

      if (this.trails != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 87, var4 - var2 - 99);
         if (this.trails.length > 4096000) {
            throw ProtocolException.arrayTooLong("Trails", this.trails.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.trails.length);
         int var19 = 0;

         for (int var23 = 0; var23 < this.trails.length; var23++) {
            var19 += this.trails[var23].serialize(var1, var4 + var19);
         }

         var4 += var19;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 87, -1);
      }

      if (this.detailBoxes != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 91, var4 - var2 - 99);
         if (this.detailBoxes.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("DetailBoxes", this.detailBoxes.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.detailBoxes.size());

         for (Entry var24 : this.detailBoxes.entrySet()) {
            var4 += PacketIO.writeVarString(var1, var4, var24.getKey(), 4096000);
            var4 += VarInt.set(var1, var4, var24.getValue().length);

            for (DetailBox var10 : var24.getValue()) {
               var4 += var10.serialize(var1, var4);
            }
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 91, -1);
      }

      if (this.phobiaModel != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 95, var4 - var2 - 99);
         var4 += this.phobiaModel.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 95, -1);
      }

      class="kw">return var4 - var2;
   }

   class="kw">public int computeSize() {
      int var1 = 99;
      if (this.assetId != null) {
         var1 += PacketIO.stringSize(this.assetId);
      }

      if (this.path != null) {
         var1 += PacketIO.stringSize(this.path);
      }

      if (this.texture != null) {
         var1 += PacketIO.stringSize(this.texture);
      }

      if (this.gradientSet != null) {
         var1 += PacketIO.stringSize(this.gradientSet);
      }

      if (this.gradientId != null) {
         var1 += PacketIO.stringSize(this.gradientId);
      }

      if (this.camera != null) {
         var1 += this.camera.computeSize();
      }

      if (this.animationSets != null) {
         int var2 = 0;

         for (Entry var4 : this.animationSets.entrySet()) {
            var2 += PacketIO.stringSize(var4.getKey()) + var4.getValue().computeSize();
         }

         var1 += VarInt.size(this.animationSets.size()) + var2;
      }

      if (this.attachments != null) {
         int var7 = 0;

         for (ModelAttachment var6 : this.attachments) {
            var7 += var6.computeSize();
         }

         var1 += VarInt.size(this.attachments.length) + var7;
      }

      if (this.particles != null) {
         int var8 = 0;

         for (ModelParticle var21 : this.particles) {
            var8 += var21.computeSize();
         }

         var1 += VarInt.size(this.particles.length) + var8;
      }

      if (this.trails != null) {
         int var9 = 0;

         for (ModelTrail var22 : this.trails) {
            var9 += var22.computeSize();
         }

         var1 += VarInt.size(this.trails.length) + var9;
      }

      if (this.detailBoxes != null) {
         int var10 = 0;

         for (Entry var18 : this.detailBoxes.entrySet()) {
            var10 += PacketIO.stringSize(var18.getKey()) + VarInt.size(var18.getValue().length) + ((DetailBox[])var18.getValue()).length * 37;
         }

         var1 += VarInt.size(this.detailBoxes.size()) + var10;
      }

      if (this.phobiaModel != null) {
         var1 += this.phobiaModel.computeSize();
      }

      class="kw">return var1;
   }

   class="kw">public Model clone() {
      Model var1 = new Model();
      var1.assetId = this.assetId;
      var1.path = this.path;
      var1.texture = this.texture;
      var1.gradientSet = this.gradientSet;
      var1.gradientId = this.gradientId;
      var1.camera = this.camera != null ? this.camera.clone() : null;
      var1.scale = this.scale;
      var1.eyeHeight = this.eyeHeight;
      var1.crouchOffset = this.crouchOffset;
      var1.sittingOffset = this.sittingOffset;
      var1.sleepingOffset = this.sleepingOffset;
      if (this.animationSets != null) {
         Map var2 = new HashMap<>();

         for (Entry var4 : this.animationSets.entrySet()) {
            var2.put(var4.getKey(), var4.getValue().clone());
         }

         var1.animationSets = var2;
      }

      var1.attachments = this.attachments != null ? Arrays.stream(this.attachments).map(var0 -> var0.clone()).toArray(ModelAttachment[]::new) : null;
      var1.hitbox = this.hitbox != null ? this.hitbox.clone() : null;
      var1.particles = this.particles != null ? Arrays.stream(this.particles).map(var0 -> var0.clone()).toArray(ModelParticle[]::new) : null;
      var1.trails = this.trails != null ? Arrays.stream(this.trails).map(var0 -> var0.clone()).toArray(ModelTrail[]::new) : null;
      var1.light = this.light != null ? this.light.clone() : null;
      if (this.detailBoxes != null) {
         Map var5 = new HashMap<>();

         for (Entry var7 : this.detailBoxes.entrySet()) {
            var5.put(var7.getKey(), Arrays.stream(var7.getValue()).map(var0 -> var0.clone()).toArray(DetailBox[]::new));
         }

         var1.detailBoxes = var5;
      }

      var1.phobia = this.phobia;
      var1.phobiaModel = this.phobiaModel != null ? this.phobiaModel.clone() : null;
      class="kw">return var1;
   }

   @Override
   class="kw">public boolean equals(Object var1) {
      if (this == var1) {
         class="kw">return true;
      } else {
         class="kw">return !(var1 class="kw">instanceof Model var2)
            ? false
            : Objects.equals(this.assetId, var2.assetId)
               && Objects.equals(this.path, var2.path)
               && Objects.equals(this.texture, var2.texture)
               && Objects.equals(this.gradientSet, var2.gradientSet)
               && Objects.equals(this.gradientId, var2.gradientId)
               && Objects.equals(this.camera, var2.camera)
               && this.scale == var2.scale
               && this.eyeHeight == var2.eyeHeight
               && this.crouchOffset == var2.crouchOffset
               && this.sittingOffset == var2.sittingOffset
               && this.sleepingOffset == var2.sleepingOffset
               && Objects.equals(this.animationSets, var2.animationSets)
               && Arrays.equals(this.attachments, var2.attachments)
               && Objects.equals(this.hitbox, var2.hitbox)
               && Arrays.equals(this.particles, var2.particles)
               && Arrays.equals(this.trails, var2.trails)
               && Objects.equals(this.light, var2.light)
               && Objects.equals(this.detailBoxes, var2.detailBoxes)
               && Objects.equals(this.phobia, var2.phobia)
               && Objects.equals(this.phobiaModel, var2.phobiaModel);
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = 1;
      var1 = 31 * var1 + Objects.hashCode(this.assetId);
      var1 = 31 * var1 + Objects.hashCode(this.path);
      var1 = 31 * var1 + Objects.hashCode(this.texture);
      var1 = 31 * var1 + Objects.hashCode(this.gradientSet);
      var1 = 31 * var1 + Objects.hashCode(this.gradientId);
      var1 = 31 * var1 + Objects.hashCode(this.camera);
      var1 = 31 * var1 + Float.hashCode(this.scale);
      var1 = 31 * var1 + Float.hashCode(this.eyeHeight);
      var1 = 31 * var1 + Float.hashCode(this.crouchOffset);
      var1 = 31 * var1 + Float.hashCode(this.sittingOffset);
      var1 = 31 * var1 + Float.hashCode(this.sleepingOffset);
      var1 = 31 * var1 + Objects.hashCode(this.animationSets);
      var1 = 31 * var1 + Arrays.hashCode(this.attachments);
      var1 = 31 * var1 + Objects.hashCode(this.hitbox);
      var1 = 31 * var1 + Arrays.hashCode(this.particles);
      var1 = 31 * var1 + Arrays.hashCode(this.trails);
      var1 = 31 * var1 + Objects.hashCode(this.light);
      var1 = 31 * var1 + Objects.hashCode(this.detailBoxes);
      var1 = 31 * var1 + Objects.hashCode(this.phobia);
      class="kw">return 31 * var1 + Objects.hashCode(this.phobiaModel);
   }
}