ModelReference class

Пакет: com.hypixel.hytale.server.core.asset.type.model.config

Файл: com/hypixel/hytale/server/core/asset/type/model/config/Model.java

Поля (14)

МодификаторыТипИмя
public static final BuilderCodec<Model.ModelReference> CODEC
public static final Model.ModelReference DEFAULT_PLAYER_MODEL
private String modelAssetId
private Map<String, String> randomAttachmentIds
private float scale
private boolean staticModel
ModelAsset var1
var1
int var1
var1
var1
float var2
var2
Model.ModelReference var2

Методы (13)

МодификаторыВозвратСигнатура
public boolean equalspublic boolean equals(@Nullable Object var1)
public String getModelAssetIdpublic String getModelAssetId()
public Map<String, String> getRandomAttachmentIdspublic Map<String, String> getRandomAttachmentIds()
public float getScalepublic float getScale()
public int hashCodepublic int hashCode()
if if(this.modelAssetId == null)
if if(var1 == null)
if if(var2 <= 0.0F)
if if(this == var1)
public boolean isStaticModelpublic boolean isStaticModel()
abstract this this(var1, var2, var3, false)
public Model toModelpublic Model toModel()
public String toStringpublic String toString()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.model.config;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.protocol.AnimationSet;
class="kw">import com.hypixel.hytale.protocol.ColorLight;
class="kw">import com.hypixel.hytale.protocol.ModelTrail;
class="kw">import com.hypixel.hytale.protocol.MovementStates;
class="kw">import com.hypixel.hytale.protocol.Phobia;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.camera.CameraSettings;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializers;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.PhysicsValues;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.lang.ref.SoftReference;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
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 java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;

class="kw">public class Model class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.Model> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">public class="kw">static class="kw">final String UNKNOWN_TEXTURE = "textures/Unknown.png";
   class="kw">private class="kw">final String modelAssetId;
   class="kw">private class="kw">final float scale;
   class="kw">private class="kw">final Map<String, String> randomAttachmentIds;
   class="kw">private class="kw">final ModelAttachment[] attachments;
   @Nullable
   class="kw">private class="kw">final Box boundingBox;
   @Nullable
   class="kw">private class="kw">final Box crouchBoundingBox;
   @Nullable
   class="kw">private class="kw">final Box sittingBoundingBox;
   @Nullable
   class="kw">private class="kw">final Box sleepingBoundingBox;
   class="kw">private class="kw">final String model;
   class="kw">private class="kw">final String texture;
   class="kw">private class="kw">final String gradientSet;
   class="kw">private class="kw">final String gradientId;
   class="kw">private class="kw">final float eyeHeight;
   class="kw">private class="kw">final float crouchOffset;
   class="kw">private class="kw">final float sittingOffset;
   class="kw">private class="kw">final float sleepingOffset;
   class="kw">private class="kw">final Map<String, ModelAsset.AnimationSet> animationSetMap;
   class="kw">private class="kw">final CameraSettings camera;
   class="kw">private class="kw">final ColorLight light;
   class="kw">private class="kw">final ModelParticle[] particles;
   class="kw">private class="kw">final ModelTrail[] trails;
   class="kw">private class="kw">final PhysicsValues physicsValues;
   class="kw">private class="kw">final Map<String, DetailBox[]> detailBoxes;
   class="kw">private class="kw">final Phobia phobia;
   class="kw">private class="kw">final String phobiaModelAssetId;
   class="kw">private class="kw">transient SoftReference<com.hypixel.hytale.protocol.Model> cachedPacket;

   class="kw">public Model(
      String var1,
      float var2,
      Map<String, String> var3,
      ModelAttachment[] var4,
      @Nullable Box var5,
      String var6,
      String var7,
      String var8,
      String var9,
      float var10,
      float var11,
      float var12,
      float var13,
      Map<String, ModelAsset.AnimationSet> var14,
      CameraSettings var15,
      ColorLight var16,
      ModelParticle[] var17,
      ModelTrail[] var18,
      PhysicsValues var19,
      Map<String, DetailBox[]> var20,
      Phobia var21,
      String var22
   ) {
      this.modelAssetId = var1;
      this.scale = var2;
      this.randomAttachmentIds = var3;
      this.attachments = var4;
      this.boundingBox = var5;
      this.model = var6;
      this.texture = var7;
      this.gradientSet = var8;
      this.gradientId = var9;
      this.eyeHeight = var10;
      this.crouchOffset = var11;
      this.sittingOffset = var12;
      this.sleepingOffset = var13;
      this.animationSetMap = var14;
      this.camera = var15;
      this.light = var16;
      this.particles = var17;
      this.trails = var18;
      this.physicsValues = var19;
      this.detailBoxes = var20;
      this.crouchBoundingBox = var5 == null ? null : new Box(new Vector3d(var5.min), new Vector3d(var5.max).add(0.0, var11, 0.0));
      this.sittingBoundingBox = var5 == null ? null : new Box(new Vector3d(var5.min), new Vector3d(var5.max).add(0.0, var12, 0.0));
      this.sleepingBoundingBox = var5 == null ? null : new Box(new Vector3d(var5.min), new Vector3d(var5.max).add(0.0, var13, 0.0));
      this.phobia = var21;
      this.phobiaModelAssetId = var22;
   }

   class="kw">public Model(@Nonnull Model var1) {
      this.modelAssetId = var1.modelAssetId;
      this.scale = var1.scale;
      this.randomAttachmentIds = var1.randomAttachmentIds;
      this.attachments = var1.attachments;
      this.boundingBox = var1.boundingBox;
      this.model = var1.model;
      this.texture = var1.texture;
      this.gradientSet = var1.gradientSet;
      this.gradientId = var1.gradientId;
      this.eyeHeight = var1.eyeHeight;
      this.crouchOffset = var1.crouchOffset;
      this.sittingOffset = var1.sittingOffset;
      this.sleepingOffset = var1.sleepingOffset;
      this.animationSetMap = var1.animationSetMap;
      this.camera = var1.camera;
      this.light = var1.light;
      this.particles = var1.particles;
      this.trails = var1.trails;
      this.physicsValues = var1.physicsValues;
      this.crouchBoundingBox = var1.crouchBoundingBox;
      this.sittingBoundingBox = var1.sittingBoundingBox;
      this.sleepingBoundingBox = var1.sleepingBoundingBox;
      this.detailBoxes = var1.detailBoxes;
      this.phobia = var1.phobia;
      this.phobiaModelAssetId = var1.phobiaModelAssetId;
   }

   @Nonnull
   class="kw">public com.hypixel.hytale.protocol.Model toPacket() {
      com.hypixel.hytale.protocol.Model var1 = this.cachedPacket == null ? null : this.cachedPacket.get();
      if (var1 != null) {
         class="kw">return var1;
      }

      com.hypixel.hytale.protocol.Model var2 = new com.hypixel.hytale.protocol.Model();
      if (this.modelAssetId != null) {
         var2.assetId = this.modelAssetId;
      }

      if (this.model != null) {
         var2.path = this.model;
      }

      if (this.texture != null) {
         var2.texture = this.texture;
      } else if (this.model == null) {
         var2.texture = "textures/Unknown.png";
      } else {
         var2.texture = this.model.replace(".blockymodel", ".png");
      }

      var2.gradientSet = this.gradientSet;
      var2.gradientId = this.gradientId;
      if (this.scale > 0.0F) {
         var2.scale = this.scale;
      }

      if (this.eyeHeight > 0.0F) {
         var2.eyeHeight = this.eyeHeight;
      }

      if (this.crouchOffset != 0.0F) {
         var2.crouchOffset = this.crouchOffset;
      }

      if (this.sittingOffset != 0.0F) {
         var2.sittingOffset = this.sittingOffset;
      }

      if (this.sleepingOffset != 0.0F) {
         var2.sleepingOffset = this.sleepingOffset;
      }

      if (this.animationSetMap != null) {
         Map var3 = new Object2ObjectOpenHashMap(this.animationSetMap.size());

         for (Entry var5 : this.animationSetMap.entrySet()) {
            var3.put(var5.getKey(), var5.getValue().toPacket(var5.getKey()));
         }

         var2.animationSets = var3;
      }

      if (this.attachments != null && this.attachments.length > 0) {
         var2.attachments = new com.hypixel.hytale.protocol.ModelAttachment[this.attachments.length];

         for (int var6 = 0; var6 < this.attachments.length; var6++) {
            var2.attachments[var6] = this.attachments[var6].toPacket();
         }
      }

      if (this.boundingBox != null) {
         var2.hitbox = NetworkSerializers.BOX.toPacket(this.boundingBox);
      }

      var2.light = this.light;
      if (this.particles != null && this.particles.length > 0) {
         var2.particles = new com.hypixel.hytale.protocol.ModelParticle[this.particles.length];

         for (int var7 = 0; var7 < this.particles.length; var7++) {
            var2.particles[var7] = this.particles[var7].toPacket();
         }
      }

      var2.trails = this.trails;
      if (this.camera != null) {
         var2.camera = this.camera.toPacket();
      }

      if (this.detailBoxes != null) {
         Map var8 = var2.detailBoxes = new Object2ObjectOpenHashMap(this.detailBoxes.size());

         for (Entry var12 : this.detailBoxes.entrySet()) {
            var8.put(var12.getKey(), Arrays.stream(var12.getValue()).map(NetworkSerializable::toPacket).toArray(com.hypixel.hytale.protocol.DetailBox[]::new));
         }
      }

      if (this.phobia != Phobia.None && this.phobiaModelAssetId != null) {
         ModelAsset var9 = ModelAsset.getAssetMap().getAsset(this.phobiaModelAssetId);
         if (var9 != null) {
            Model var11 = createUnitScaleModel(var9, this.boundingBox);
            var2.phobiaModel = var11.toPacket();
            var2.phobia = this.phobia;
         }
      }

      this.cachedPacket = new SoftReference<>(var2);
      class="kw">return var2;
   }

   class="kw">public String getModelAssetId() {
      class="kw">return this.modelAssetId;
   }

   class="kw">public float getScale() {
      class="kw">return this.scale;
   }

   class="kw">public Map<String, String> getRandomAttachmentIds() {
      class="kw">return this.randomAttachmentIds;
   }

   class="kw">public ModelAttachment[] getAttachments() {
      class="kw">return this.attachments;
   }

   @Nullable
   class="kw">public Box getBoundingBox(@Nullable MovementStates var1) {
      if (var1 == null) {
         class="kw">return this.boundingBox;
      } else if (var1.crouching || var1.forcedCrouching || var1.sliding) {
         class="kw">return this.crouchBoundingBox;
      } else if (var1.sitting) {
         class="kw">return this.sittingBoundingBox;
      } else {
         class="kw">return var1.sleeping ? this.sleepingBoundingBox : this.boundingBox;
      }
   }

   @Nullable
   class="kw">public Box getBoundingBox() {
      class="kw">return this.boundingBox;
   }

   @Nullable
   class="kw">public Box getCrouchBoundingBox() {
      class="kw">return this.crouchBoundingBox;
   }

   @Nullable
   class="kw">public Box getSittingBoundingBox() {
      class="kw">return this.sittingBoundingBox;
   }

   @Nullable
   class="kw">public Box getSleepingBoundingBox() {
      class="kw">return this.sleepingBoundingBox;
   }

   class="kw">public String getModel() {
      class="kw">return this.model;
   }

   class="kw">public String getTexture() {
      class="kw">return this.texture;
   }

   class="kw">public String getGradientSet() {
      class="kw">return this.gradientSet;
   }

   class="kw">public String getGradientId() {
      class="kw">return this.gradientId;
   }

   class="kw">public float getEyeHeight() {
      class="kw">return this.eyeHeight;
   }

   class="kw">public float getCrouchOffset() {
      class="kw">return this.crouchOffset;
   }

   class="kw">public float getSittingOffset() {
      class="kw">return this.sittingOffset;
   }

   class="kw">public float getSleepingOffset() {
      class="kw">return this.sleepingOffset;
   }

   class="kw">public Map<String, ModelAsset.AnimationSet> getAnimationSetMap() {
      class="kw">return this.animationSetMap != null ? this.animationSetMap : Collections.emptyMap();
   }

   @Nullable
   class="kw">public String getFirstBoundAnimationId(@Nullable String var1, @Nullable String var2) {
      if (var1 != null && this.animationSetMap.containsKey(var1)) {
         class="kw">return var1;
      } else {
         class="kw">return var2 != null && this.animationSetMap.containsKey(var2) ? var2 : null;
      }
   }

   @Nullable
   class="kw">public String getFirstBoundAnimationId(@Nonnull String... var1) {
      for (String var5 : var1) {
         if (var5 != null && this.animationSetMap.containsKey(var5)) {
            class="kw">return var5;
         }
      }

      class="kw">return null;
   }

   class="kw">public CameraSettings getCamera() {
      class="kw">return this.camera;
   }

   class="kw">public ColorLight getLight() {
      class="kw">return this.light;
   }

   class="kw">public ModelParticle[] getParticles() {
      class="kw">return this.particles;
   }

   class="kw">public ModelTrail[] getTrails() {
      class="kw">return this.trails;
   }

   class="kw">public PhysicsValues getPhysicsValues() {
      class="kw">return this.physicsValues;
   }

   class="kw">public Map<String, DetailBox[]> getDetailBoxes() {
      class="kw">return this.detailBoxes;
   }

   class="kw">public Phobia getPhobia() {
      class="kw">return this.phobia;
   }

   class="kw">public String getPhobiaModelAssetId() {
      class="kw">return this.phobiaModelAssetId;
   }

   @Nonnull
   class="kw">public Model.ModelReference toReference() {
      class="kw">return "Player".equals(this.modelAssetId)
         ? Model.ModelReference.DEFAULT_PLAYER_MODEL
         : new Model.ModelReference(this.modelAssetId, this.scale, this.randomAttachmentIds, this.animationSetMap == null);
   }

   class="kw">public float getEyeHeight(@Nullable Ref<EntityStore> var1, @Nullable ComponentAccessor<EntityStore> var2) {
      if (var1 != null && var2 != null && var1.isValid()) {
         MovementStatesComponent var3 = var2.getComponent(var1, MovementStatesComponent.getComponentType());
         if (var3 == null) {
            class="kw">return this.getEyeHeight();
         } else {
            MovementStates var4 = var3.getMovementStates();
            if (var4.crouching || var4.sliding) {
               class="kw">return this.getEyeHeight() + this.getCrouchOffset();
            } else if (var4.sitting) {
               class="kw">return this.getEyeHeight() + this.getSittingOffset();
            } else {
               class="kw">return var4.sleeping ? this.getEyeHeight() + this.getSleepingOffset() : this.getEyeHeight();
            }
         }
      } else {
         class="kw">return this.getEyeHeight();
      }
   }

   @Override
   class="kw">public boolean equals(@Nullable Object var1) {
      if (this == var1) {
         class="kw">return true;
      }

      if (var1 != null && this.getClass() == var1.getClass()) {
         Model var2 = (Model)var1;
         if (Float.compare(var2.scale, this.scale) != 0) {
            class="kw">return false;
         } else if (Float.compare(var2.eyeHeight, this.eyeHeight) != 0) {
            class="kw">return false;
         } else if (Float.compare(var2.crouchOffset, this.crouchOffset) != 0) {
            class="kw">return false;
         } else if (Float.compare(var2.sittingOffset, this.sittingOffset) != 0) {
            class="kw">return false;
         } else if (Float.compare(var2.sleepingOffset, this.sleepingOffset) != 0) {
            class="kw">return false;
         } else if (!Objects.equals(this.modelAssetId, var2.modelAssetId)) {
            class="kw">return false;
         } else if (!Objects.equals(this.randomAttachmentIds, var2.randomAttachmentIds)) {
            class="kw">return false;
         } else if (!Arrays.equals(this.attachments, var2.attachments)) {
            class="kw">return false;
         } else if (!Objects.equals(this.boundingBox, var2.boundingBox)) {
            class="kw">return false;
         } else if (!Objects.equals(this.model, var2.model)) {
            class="kw">return false;
         } else if (!Objects.equals(this.texture, var2.texture)) {
            class="kw">return false;
         } else if (!Objects.equals(this.gradientSet, var2.gradientSet)) {
            class="kw">return false;
         } else if (!Objects.equals(this.gradientId, var2.gradientId)) {
            class="kw">return false;
         } else if (!Objects.equals(this.animationSetMap, var2.animationSetMap)) {
            class="kw">return false;
         } else if (!Objects.equals(this.camera, var2.camera)) {
            class="kw">return false;
         } else if (!Objects.equals(this.light, var2.light)) {
            class="kw">return false;
         } else if (!Arrays.equals(this.particles, var2.particles)) {
            class="kw">return false;
         } else {
            class="kw">return !Arrays.equals(this.trails, var2.trails) ? false : Objects.equals(this.physicsValues, var2.physicsValues);
         }
      } else {
         class="kw">return false;
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = this.modelAssetId != null ? this.modelAssetId.hashCode() : 0;
      var1 = 31 * var1 + (this.scale != 0.0F ? Float.floatToIntBits(this.scale) : 0);
      var1 = 31 * var1 + (this.randomAttachmentIds != null ? this.randomAttachmentIds.hashCode() : 0);
      var1 = 31 * var1 + Arrays.hashCode(this.attachments);
      var1 = 31 * var1 + (this.boundingBox != null ? this.boundingBox.hashCode() : 0);
      var1 = 31 * var1 + (this.model != null ? this.model.hashCode() : 0);
      var1 = 31 * var1 + (this.texture != null ? this.texture.hashCode() : 0);
      var1 = 31 * var1 + (this.gradientSet != null ? this.gradientSet.hashCode() : 0);
      var1 = 31 * var1 + (this.gradientId != null ? this.gradientId.hashCode() : 0);
      var1 = 31 * var1 + (this.eyeHeight != 0.0F ? Float.floatToIntBits(this.eyeHeight) : 0);
      var1 = 31 * var1 + (this.crouchOffset != 0.0F ? Float.floatToIntBits(this.crouchOffset) : 0);
      var1 = 31 * var1 + (this.sittingOffset != 0.0F ? Float.floatToIntBits(this.sittingOffset) : 0);
      var1 = 31 * var1 + (this.sleepingOffset != 0.0F ? Float.floatToIntBits(this.sleepingOffset) : 0);
      var1 = 31 * var1 + (this.animationSetMap != null ? this.animationSetMap.hashCode() : 0);
      var1 = 31 * var1 + (this.camera != null ? this.camera.hashCode() : 0);
      var1 = 31 * var1 + (this.light != null ? this.light.hashCode() : 0);
      var1 = 31 * var1 + Arrays.hashCode(this.particles);
      var1 = 31 * var1 + Arrays.hashCode(this.trails);
      class="kw">return 31 * var1 + (this.physicsValues != null ? this.physicsValues.hashCode() : 0);
   }

   @Override
   class="kw">public String toString() {
      class="kw">return "Model{modelAssetId='"
         + this.modelAssetId
         + "', scale="
         + this.scale
         + ", randomAttachmentIds="
         + this.randomAttachmentIds
         + ", attachments="
         + Arrays.toString(this.attachments)
         + ", boundingBox="
         + this.boundingBox
         + ", crouchBoundingBox="
         + this.crouchBoundingBox
         + ", sittingBoundingBox="
         + this.sittingBoundingBox
         + ", sleepingBoundingBox="
         + this.sleepingBoundingBox
         + ", model='"
         + this.model
         + "', texture='"
         + this.texture
         + "', gradientSet='"
         + this.gradientSet
         + "', gradientId='"
         + this.gradientId
         + "', eyeHeight="
         + this.eyeHeight
         + ", crouchOffset="
         + this.crouchOffset
         + ", sittingOffset="
         + this.sittingOffset
         + ", sleepingOffset="
         + this.sleepingOffset
         + ", animationSetMap="
         + this.animationSetMap
         + ", camera="
         + this.camera
         + ", light="
         + this.light
         + ", particles="
         + Arrays.toString(this.particles)
         + ", trails="
         + Arrays.toString(this.trails)
         + ", physicsValues="
         + this.physicsValues
         + ", detailBoxes="
         + this.detailBoxes
         + ", phobia="
         + this.phobia
         + ", phobiaModelAssetId='"
         + this.phobiaModelAssetId
         + "'}";
   }

   @Nonnull
   class="kw">public class="kw">static Model createRandomScaleModel(@Nonnull ModelAsset var0) {
      class="kw">return createScaledModel(var0, var0.generateRandomScale());
   }

   @Nonnull
   class="kw">public class="kw">static Model createStaticScaledModel(@Nonnull ModelAsset var0, float var1) {
      class="kw">return createScaledModel(var0, var1, var0.generateRandomAttachmentIds(), null, true);
   }

   @Nonnull
   class="kw">public class="kw">static Model createUnitScaleModel(@Nonnull ModelAsset var0) {
      class="kw">return createScaledModel(var0, 1.0F, null);
   }

   @Nonnull
   class="kw">public class="kw">static Model createUnitScaleModel(@Nonnull ModelAsset var0, @Nullable Box var1) {
      class="kw">return createScaledModel(var0, 1.0F, null, var1);
   }

   @Nonnull
   class="kw">public class="kw">static Model createScaledModel(@Nonnull ModelAsset var0, float var1) {
      class="kw">return createScaledModel(var0, var1, var0.generateRandomAttachmentIds());
   }

   @Nonnull
   class="kw">public class="kw">static Model createScaledModel(@Nonnull ModelAsset var0, float var1, @Nullable Map<String, String> var2) {
      class="kw">return createScaledModel(var0, var1, var2, null, false);
   }

   @Nonnull
   class="kw">public class="kw">static Model createScaledModel(@Nonnull ModelAsset var0, float var1, @Nullable Map<String, String> var2, @Nullable Box var3) {
      class="kw">return createScaledModel(var0, var1, var2, var3, false);
   }

   @Nonnull
   class="kw">public class="kw">static Model createScaledModel(@Nonnull ModelAsset var0, float var1, @Nullable Map<String, String> var2, @Nullable Box var3, boolean var4) {
      Objects.requireNonNull(var0, "ModelAsset can't be null");
      if (var1 <= 0.0F) {
         throw new IllegalArgumentException("Scale must be greater than 0");
      }

      Box var5 = var3 != null ? var3 : var0.getBoundingBox();
      Map var6 = var0.getDetailBoxes();
      float var7 = var0.getEyeHeight();
      float var8 = var0.getCrouchOffset();
      float var9 = var0.getSittingOffset();
      float var10 = var0.getSleepingOffset();
      CameraSettings var11 = var0.getCamera();
      PhysicsValues var12 = var0.getPhysicsValues();
      ModelParticle[] var13 = var0.getParticles();
      ModelTrail[] var14 = var0.getTrails();
      if (var1 != 1.0F) {
         var5 = var5.clone().scale(var1);
         if (var6 != null) {
            HashMap var15 = new HashMap<>(var6.size());

            for (Entry var17 : var6.entrySet()) {
               var15.put(var17.getKey(), Arrays.stream(var17.getValue()).map(var1x -> var1x.scaled(var1)).toArray(DetailBox[]::new));
            }

            var6 = var15;
         }

         var7 *= var1;
         var8 *= var1;
         var9 *= var1;
         var10 *= var1;
         if (var11 != null) {
            var11 = var11.clone().scale(var1);
         }

         if (var12 != null) {
            var12 = new PhysicsValues(var12);
            var12.scale(var1);
         }

         if (var13 != null) {
            ModelParticle[] var19 = new ModelParticle[var13.length];

            for (int var22 = 0; var22 < var13.length; var22++) {
               var19[var22] = var13[var22].clone().scale(var1);
            }

            var13 = var19;
         }

         if (var14 != null) {
            ModelTrail[] var20 = new ModelTrail[var14.length];

            for (int var23 = 0; var23 < var14.length; var23++) {
               ModelTrail var25 = var14[var23];
               ModelTrail var18 = new ModelTrail(var25);
               if (var25.positionOffset != null) {
                  var18.positionOffset = new Vector3f(var25.positionOffset.x() * var1, var25.positionOffset.y() * var1, var25.positionOffset.z() * var1);
               }

               var20[var23] = var18;
            }

            var14 = var20;
         }
      }

      ModelAttachment[] var21 = var0.getAttachments(var2);
      Map var24 = var4 ? null : var0.getAnimationSetMap();
      class="kw">return new Model(
         var0.getId(),
         var1,
         var2,
         var21,
         var5,
         var0.getModel(),
         var0.getTexture(),
         var0.getGradientSet(),
         var0.getGradientId(),
         var7,
         var8,
         var9,
         var10,
         var24,
         var11,
         var0.getLight(),
         var13,
         var14,
         var12,
         var6,
         var0.getPhobia(),
         var0.getPhobiaModelAssetId()
      );
   }

   class="kw">public class="kw">static class ModelReference {
      class="kw">public class="kw">static class="kw">final BuilderCodec<Model.ModelReference> CODEC = BuilderCodec.builder(Model.ModelReference.class, Model.ModelReference::new)
         .append(new KeyedCodec<>("Id", Codec.STRING), (var0, var1) -> var0.modelAssetId = var1, var0 -> var0.modelAssetId)
         .add()
         .append(new KeyedCodec<>("Scale", Codec.DOUBLE), (var0, var1) -> var0.scale = var1.floatValue(), var0 -> (double)var0.scale)
         .add()
         .append(
            new KeyedCodec<>("RandomAttachments", MapCodec.STRING_HASH_MAP_CODEC),
            (var0, var1) -> var0.randomAttachmentIds = var1,
            var0 -> var0.randomAttachmentIds
         )
         .add()
         .append(new KeyedCodec<>("Static", Codec.BOOLEAN), (var0, var1) -> var0.staticModel = var1, var0 -> var0.staticModel)
         .add()
         .build();
      class="kw">public class="kw">static class="kw">final Model.ModelReference DEFAULT_PLAYER_MODEL = new Model.ModelReference("Player", 1.0F, null, false);
      class="kw">private String modelAssetId;
      class="kw">private float scale;
      class="kw">private Map<String, String> randomAttachmentIds;
      class="kw">private boolean staticModel;

      class="kw">public ModelReference(String var1, float var2, Map<String, String> var3) {
         this(var1, var2, var3, false);
      }

      class="kw">public ModelReference(String var1, float var2, Map<String, String> var3, boolean var4) {
         this.modelAssetId = var1;
         this.scale = var2;
         this.randomAttachmentIds = var3;
         this.staticModel = var4;
      }

      class="kw">protected ModelReference() {
      }

      class="kw">public String getModelAssetId() {
         class="kw">return this.modelAssetId;
      }

      class="kw">public float getScale() {
         class="kw">return this.scale;
      }

      class="kw">public Map<String, String> getRandomAttachmentIds() {
         class="kw">return this.randomAttachmentIds;
      }

      class="kw">public boolean isStaticModel() {
         class="kw">return this.staticModel;
      }

      @Nullable
      class="kw">public Model toModel() {
         if (this.modelAssetId == null) {
            class="kw">return null;
         }

         ModelAsset var1 = ModelAsset.getAssetMap().getAsset(this.modelAssetId);
         if (var1 == null) {
            var1 = ModelAsset.DEBUG;
         }

         float var2 = this.scale;
         if (var2 <= 0.0F) {
            Model.LOGGER.at(Level.WARNING).log("Model reference '%s' has an unusable scale of %s, loading it at scale 1 instead", this.modelAssetId, var2);
            var2 = 1.0F;
         }

         class="kw">return Model.createScaledModel(var1, var2, this.randomAttachmentIds, null, this.staticModel);
      }

      @Override
      class="kw">public boolean equals(@Nullable Object var1) {
         if (this == var1) {
            class="kw">return true;
         }

         if (var1 != null && this.getClass() == var1.getClass()) {
            Model.ModelReference var2 = (Model.ModelReference)var1;
            if (Float.compare(var2.scale, this.scale) != 0) {
               class="kw">return false;
            } else if (this.staticModel != var2.staticModel) {
               class="kw">return false;
            } else {
               class="kw">return !Objects.equals(this.modelAssetId, var2.modelAssetId) ? false : Objects.equals(this.randomAttachmentIds, var2.randomAttachmentIds);
            }
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.modelAssetId != null ? this.modelAssetId.hashCode() : 0;
         var1 = 31 * var1 + (this.scale != 0.0F ? Float.floatToIntBits(this.scale) : 0);
         var1 = 31 * var1 + (this.randomAttachmentIds != null ? this.randomAttachmentIds.hashCode() : 0);
         class="kw">return 31 * var1 + (this.staticModel ? 1 : 0);
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "ModelReference{modelAssetId='"
            + this.modelAssetId
            + "', scale="
            + this.scale
            + ", randomAttachmentIds="
            + this.randomAttachmentIds
            + ", staticModel="
            + this.staticModel
            + "}";
      }
   }
}