ObjParseException class

Пакет: com.hypixel.hytale.builtin.buildertools.objimport

Файл: com/hypixel/hytale/builtin/buildertools/objimport/ObjParser.java

extends: Exception

Методы (2)

МодификаторыВозвратСигнатура
abstract super super(var1)
abstract super super(var1, var2)

Исходный код

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

class="kw">import java.io.BufferedReader;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">final class ObjParser {
   class="kw">private ObjParser() {
   }

   @Nonnull
   class="kw">public class="kw">static ObjParser.ObjMesh parse(@Nonnull Path var0) class="kw">throws IOException, ObjParser.ObjParseException {
      List var1 = new ArrayList<>();
      List var2 = new ArrayList<>();
      List var3 = new ArrayList<>();
      List var4 = new ArrayList<>();
      List var5 = new ArrayList<>();
      String var6 = null;
      String var7 = null;

      try (BufferedReader var8 = Files.newBufferedReader(var0)) {
         int var10 = 0;

         String var9;
         while ((var9 = var8.readLine()) != null) {
            var10++;
            var9 = var9.trim();
            if (!var9.isEmpty() && !var9.startsWith("#")) {
               String[] var11 = var9.split("\\s+", 0);
               if (var11.length != 0) {
                  class="kw">switch (var11[0]) {
                     case "v":
                        parseVertex(var11, var1, var10);
                        break;
                     case "vt":
                        parseUvCoordinate(var11, var2, var10);
                        break;
                     case "f":
                        int var14 = var3.size();
                        parseFace(var11, var3, var4, var2.size(), var10);
                        int var15 = var3.size() - var14;

                        for (int var16 = 0; var16 < var15; var16++) {
                           var5.add(var7);
                        }
                        break;
                     case "mtllib":
                        if (var11.length > 1) {
                           var6 = var11[1].trim();
                        }
                        break;
                     case "usemtl":
                        if (var11.length > 1) {
                           var7 = var11[1].trim();
                        }
                  }
               }
            }
         }
      }

      if (var1.isEmpty()) {
         throw new ObjParser.ObjParseException("OBJ file contains no vertices");
      } else if (var3.isEmpty()) {
         throw new ObjParser.ObjParseException("OBJ file contains no faces");
      } else {
         class="kw">return new ObjParser.ObjMesh(var1, var2, var3, var4, var5, var6);
      }
   }

   class="kw">private class="kw">static void parseVertex(String[] var0, List<float[]> var1, int var2) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 4) {
         throw new ObjParser.ObjParseException("Invalid vertex at line " + var2 + ": expected at least 3 coordinates");
      }

      try {
         float var3 = Float.parseFloat(var0[1]);
         float var4 = Float.parseFloat(var0[2]);
         float var5 = Float.parseFloat(var0[3]);
         var1.add(new float[]{var3, var4, var5});
      } catch (NumberFormatException var6) {
         throw new ObjParser.ObjParseException("Invalid vertex coordinates at line " + var2, var6);
      }
   }

   class="kw">private class="kw">static void parseUvCoordinate(String[] var0, List<float[]> var1, int var2) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 3) {
         throw new ObjParser.ObjParseException("Invalid UV coordinate at line " + var2 + ": expected at least 2 values");
      }

      try {
         float var3 = Float.parseFloat(var0[1]);
         float var4 = Float.parseFloat(var0[2]);
         var1.add(new float[]{var3, var4});
      } catch (NumberFormatException var5) {
         throw new ObjParser.ObjParseException("Invalid UV coordinates at line " + var2, var5);
      }
   }

   class="kw">private class="kw">static void parseFace(String[] var0, List<int[]> var1, List<int[]> var2, int var3, int var4) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 4) {
         throw new ObjParser.ObjParseException("Invalid face at line " + var4 + ": expected at least 3 vertices");
      }

      int[] var5 = new int[var0.length - 1];
      int[] var6 = new int[var0.length - 1];
      boolean var7 = false;

      for (int var8 = 1; var8 < var0.length; var8++) {
         String var9 = var0[var8];
         String[] var10 = var9.split("/", -1);

         try {
            int var11 = Integer.parseInt(var10[0]);
            var5[var8 - 1] = var11 > 0 ? var11 - 1 : var11;
         } catch (NumberFormatException var13) {
            throw new ObjParser.ObjParseException("Invalid face vertex index at line " + var4, var13);
         }

         if (var10.length >= 2 && !var10[1].isEmpty()) {
            try {
               int var15 = Integer.parseInt(var10[1]);
               var6[var8 - 1] = var15 > 0 ? var15 - 1 : var15 + var3;
               var7 = true;
            } catch (NumberFormatException var12) {
               var6[var8 - 1] = -1;
            }
         } else {
            var6[var8 - 1] = -1;
         }
      }

      if (var5.length == 3) {
         var1.add(var5);
         var2.add(var7 ? var6 : null);
      } else if (var5.length == 4) {
         var1.add(new int[]{var5[0], var5[1], var5[2]});
         var1.add(new int[]{var5[0], var5[2], var5[3]});
         if (var7) {
            var2.add(new int[]{var6[0], var6[1], var6[2]});
            var2.add(new int[]{var6[0], var6[2], var6[3]});
         } else {
            var2.add(null);
            var2.add(null);
         }
      } else {
         for (int var14 = 1; var14 < var5.length - 1; var14++) {
            var1.add(new int[]{var5[0], var5[var14], var5[var14 + 1]});
            if (var7) {
               var2.add(new int[]{var6[0], var6[var14], var6[var14 + 1]});
            } else {
               var2.add(null);
            }
         }
      }
   }

   class="kw">public record ObjMesh(
      List<float[]> vertices, List<float[]> uvCoordinates, List<int[]> faces, List<int[]> faceUvIndices, List<String> faceMaterials, @Nullable String mtlLib
   ) {
      class="kw">public ObjMesh {
      }

      class="kw">public float[] getBounds() {
         float var1 = Float.MAX_VALUE;
         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;

         for (float[] var8 : this.vertices) {
            var1 = Math.min(var1, var8[0]);
            var2 = Math.min(var2, var8[1]);
            var3 = Math.min(var3, var8[2]);
            var4 = Math.max(var4, var8[0]);
            var5 = Math.max(var5, var8[1]);
            var6 = Math.max(var6, var8[2]);
         }

         class="kw">return new float[]{var1, var2, var3, var4, var5, var6};
      }

      class="kw">public float getHeight() {
         float[] var1 = this.getBounds();
         class="kw">return var1[4] - var1[1];
      }

      class="kw">public boolean hasMaterials() {
         class="kw">return this.mtlLib != null && !this.faceMaterials.isEmpty() && this.faceMaterials.stream().anyMatch(var0 -> var0 != null);
      }

      class="kw">public boolean hasUvCoordinates() {
         class="kw">return !this.uvCoordinates.isEmpty() && this.faceUvIndices.stream().anyMatch(var0 -> var0 != null);
      }

      class="kw">public void transformZUpToYUp() {
         for (float[] var2 : this.vertices) {
            float var3 = var2[1];
            float var4 = var2[2];
            var2[1] = var4;
            var2[2] = -var3;
         }
      }

      class="kw">public void transformXUpToYUp() {
         for (float[] var2 : this.vertices) {
            float var3 = var2[0];
            float var4 = var2[1];
            var2[0] = var4;
            var2[1] = var3;
         }
      }
   }

   class="kw">public class="kw">static class ObjParseException class="kw">extends Exception {
      class="kw">public ObjParseException(String var1) {
         super(var1);
      }

      class="kw">public ObjParseException(String var1, Throwable var2) {
         super(var1, var2);
      }
   }
}