BlockyModelBoundsParser class

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

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

Поля (44)

МодификаторыТипИмя
final HytaleLogger LOGGER
CommonAsset var1
byte[] var1
BsonArray var1
BsonDocument var1
float var1
Vector3f var10
Quaternionf var11
boolean var12
var12
String var13
BsonDocument var14
Vector3f var15
Vector3f var16
float var17
float var18
float var19
BsonDocument var2
float var2
String var2
float var2
BsonValue var2
BsonValue var2
Vector3f[] var20
Vector3f var25
BsonArray var26
float var3
float var3
float var4
BsonDocument var4
float var4
float var4
float var5
boolean var5
float var5
float var6
Vector3f var6
float var6
float var7
Quaternionf var7
boolean var8
Vector3f var8
float[] var9
Vector3f var9

Методы (18)

МодификаторыВозвратСигнатура
abstract return new Quaternionfreturn new Quaternionf()
abstract return new Quaternionfreturn new Quaternionf(var1, var2, var3, var4)
abstract return new Vector3freturn new Vector3f(var1, var2, var3)
abstract return new Vector3freturn new Vector3f(var4, var5, var6)
static boolean accumulateNodeBoundsboolean accumulateNodeBounds(@Nonnull BsonDocument var0, @Nonnull Vector3f var1, @Nonnull Quaternionf var2, @Nonnull float[] var3)
abstract return computeBoundsFromJsonreturn computeBoundsFromJson(var2)
for for(BsonValue var11 : var1)
for for(Vector3f var24 : var20)
for for(BsonValue var28 : var26)
static Vector3f[] getQuadCornersVector3f[] getQuadCorners(@Nonnull BsonDocument var0)
if if(var1 == null)
if if(!var5)
if if(var4 != null)
if if(var26 != null)
if if(var0 == null)
if if(var0 == null)
static float readFloatfloat readFloat(@Nonnull BsonValue var0)
return switchreturn switch(var2)

Исходный код

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

class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAsset;
class="kw">import com.hypixel.hytale.server.core.asset.common.CommonAssetRegistry;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;
class="kw">import org.joml.Quaternionf;
class="kw">import org.joml.Vector3f;

class="kw">public class BlockyModelBoundsParser {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final float BLOCK_SCALE = 0.03125F;
   class="kw">private class="kw">static class="kw">final Vector3f[] BOX_CORNERS = new Vector3f[]{
      new Vector3f(-0.5F, 0.5F, -0.5F),
      new Vector3f(0.5F, 0.5F, -0.5F),
      new Vector3f(0.5F, -0.5F, -0.5F),
      new Vector3f(-0.5F, -0.5F, -0.5F),
      new Vector3f(0.5F, 0.5F, 0.5F),
      new Vector3f(-0.5F, 0.5F, 0.5F),
      new Vector3f(-0.5F, -0.5F, 0.5F),
      new Vector3f(0.5F, -0.5F, 0.5F)
   };

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

   @Nullable
   class="kw">public class="kw">static Box computeBounds(@Nonnull String var0) {
      CommonAsset var1 = CommonAssetRegistry.getByName(var0);
      class="kw">return var1 == null ? null : computeBounds(var1);
   }

   @Nullable
   class="kw">public class="kw">static Box computeBounds(@Nonnull CommonAsset var0) {
      try {
         byte[] var1 = var0.getBlob().join();
         if (var1 == null) {
            class="kw">return null;
         }

         BsonDocument var2 = BsonDocument.parse(new String(var1, StandardCharsets.UTF_8));
         class="kw">return computeBoundsFromJson(var2);
      } catch (Exception var3) {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var3)).log("Failed to compute bounds for blockymodel: %s", var0.getName());
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">private class="kw">static Box computeBoundsFromJson(@Nonnull BsonDocument var0) {
      BsonArray var1 = getArray(var0, "nodes");
      if (var1 != null && !var1.isEmpty()) {
         float var2 = Float.MAX_VALUE;
         float var3 = Float.MAX_VALUE;
         float var4 = Float.MAX_VALUE;
         float var5 = -Float.MAX_VALUE;
         float var6 = -Float.MAX_VALUE;
         float var7 = -Float.MAX_VALUE;
         boolean var8 = false;
         float[] var9 = new float[]{var2, var3, var4, var5, var6, var7};

         for (BsonValue var11 : var1) {
            if (var11.isDocument()) {
               var8 |= accumulateNodeBounds(var11.asDocument(), new Vector3f(0.0F, 0.0F, 0.0F), new Quaternionf(), var9);
            }
         }

         class="kw">return !var8 ? null : new Box(var9[0] * 0.03125F, var9[1] * 0.03125F, var9[2] * 0.03125F, var9[3] * 0.03125F, var9[4] * 0.03125F, var9[5] * 0.03125F);
      } else {
         class="kw">return null;
      }
   }

   class="kw">private class="kw">static boolean accumulateNodeBounds(@Nonnull BsonDocument var0, @Nonnull Vector3f var1, @Nonnull Quaternionf var2, @Nonnull float[] var3) {
      BsonDocument var4 = getDocument(var0, "shape");
      boolean var5 = var4 == null || !var4.containsKey("visible") || var4.get("visible").asBoolean().getValue();
      if (!var5) {
         class="kw">return false;
      }

      Vector3f var6 = readVec3(getDocument(var0, "position"), 0.0F, 0.0F, 0.0F);
      Quaternionf var7 = readQuat(getDocument(var0, "orientation"));
      Vector3f var8 = var4 != null ? readVec3(getDocument(var4, "offset"), 0.0F, 0.0F, 0.0F) : new Vector3f();
      Vector3f var9 = new Vector3f(var8);
      var9.rotate(var7);
      var9.add(var6);
      Vector3f var10 = new Vector3f(var9);
      var10.rotate(var2);
      var10.add(var1);
      Quaternionf var11 = new Quaternionf(var2);
      var11.mul(var7);
      boolean var12 = false;
      if (var4 != null) {
         String var13 = var4.containsKey("type") ? var4.get("type").asString().getValue() : "none";
         if ("box".equals(var13) || "quad".equals(var13)) {
            BsonDocument var14 = getDocument(var4, "settings");
            Vector3f var15 = var14 != null ? readVec3(getDocument(var14, "size"), 0.0F, 0.0F, 0.0F) : new Vector3f();
            Vector3f var16 = readVec3(getDocument(var4, "stretch"), 1.0F, 1.0F, 1.0F);
            float var17 = var15.x * var16.x;
            float var18 = var15.y * var16.y;
            float var19 = var15.z * var16.z;
            Vector3f[] var20 = "box".equals(var13) ? BOX_CORNERS : getQuadCorners(var4);

            for (Vector3f var24 : var20) {
               Vector3f var25 = new Vector3f(var24.x * var17, var24.y * var18, var24.z * var19);
               var25.rotate(var11);
               var25.add(var10);
               var3[0] = Math.min(var3[0], var25.x);
               var3[1] = Math.min(var3[1], var25.y);
               var3[2] = Math.min(var3[2], var25.z);
               var3[3] = Math.max(var3[3], var25.x);
               var3[4] = Math.max(var3[4], var25.y);
               var3[5] = Math.max(var3[5], var25.z);
            }

            var12 = true;
         }
      }

      BsonArray var26 = getArray(var0, "children");
      if (var26 != null) {
         for (BsonValue var28 : var26) {
            if (var28.isDocument()) {
               var12 |= accumulateNodeBounds(var28.asDocument(), var10, var11, var3);
            }
         }
      }

      class="kw">return var12;
   }

   class="kw">private class="kw">static Vector3f[] getQuadCorners(@Nonnull BsonDocument var0) {
      BsonDocument var1 = getDocument(var0, "settings");
      String var2 = var1 != null && var1.containsKey("normal") ? var1.get("normal").asString().getValue() : "+Z";

      class="kw">return class="kw">switch (var2) {
         case "+X", "-X" -> new Vector3f[]{
            new Vector3f(0.0F, -0.5F, -0.5F), new Vector3f(0.0F, 0.5F, -0.5F), new Vector3f(0.0F, 0.5F, 0.5F), new Vector3f(0.0F, -0.5F, 0.5F)
         };
         case "+Y", "-Y" -> new Vector3f[]{
            new Vector3f(-0.5F, 0.0F, -0.5F), new Vector3f(0.5F, 0.0F, -0.5F), new Vector3f(0.5F, 0.0F, 0.5F), new Vector3f(-0.5F, 0.0F, 0.5F)
         };
         class="kw">default -> new Vector3f[]{
            new Vector3f(-0.5F, -0.5F, 0.0F), new Vector3f(0.5F, -0.5F, 0.0F), new Vector3f(0.5F, 0.5F, 0.0F), new Vector3f(-0.5F, 0.5F, 0.0F)
         };
      };
   }

   @Nonnull
   class="kw">private class="kw">static Vector3f readVec3(@Nullable BsonDocument var0, float var1, float var2, float var3) {
      if (var0 == null) {
         class="kw">return new Vector3f(var1, var2, var3);
      }

      float var4 = var0.containsKey("x") ? readFloat(var0.get("x")) : var1;
      float var5 = var0.containsKey("y") ? readFloat(var0.get("y")) : var2;
      float var6 = var0.containsKey("z") ? readFloat(var0.get("z")) : var3;
      class="kw">return new Vector3f(var4, var5, var6);
   }

   @Nonnull
   class="kw">private class="kw">static Quaternionf readQuat(@Nullable BsonDocument var0) {
      if (var0 == null) {
         class="kw">return new Quaternionf();
      }

      float var1 = var0.containsKey("x") ? readFloat(var0.get("x")) : 0.0F;
      float var2 = var0.containsKey("y") ? readFloat(var0.get("y")) : 0.0F;
      float var3 = var0.containsKey("z") ? readFloat(var0.get("z")) : 0.0F;
      float var4 = var0.containsKey("w") ? readFloat(var0.get("w")) : 1.0F;
      class="kw">return new Quaternionf(var1, var2, var3, var4);
   }

   class="kw">private class="kw">static float readFloat(@Nonnull BsonValue var0) {
      class="kw">return (float)var0.asNumber().doubleValue();
   }

   @Nullable
   class="kw">private class="kw">static BsonDocument getDocument(@Nonnull BsonDocument var0, @Nonnull String var1) {
      BsonValue var2 = var0.get(var1);
      class="kw">return var2 != null && var2.isDocument() ? var2.asDocument() : null;
   }

   @Nullable
   class="kw">private class="kw">static BsonArray getArray(@Nonnull BsonDocument var0, @Nonnull String var1) {
      BsonValue var2 = var0.get(var1);
      class="kw">return var2 != null && var2.isArray() ? var2.asArray() : null;
   }
}