AssetPackPathUtil class

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

Файл: com/hypixel/hytale/server/core/asset/util/AssetPackPathUtil.java

Поля (17)

МодификаторыТипИмя
private final BiConsumer<T, Path> consumer
private final T ctx
private final String extension
private Path root
var0
var0
AssetPack var1
Path var10
List var12
Path var2
Path var4
Path var5
List var6
AssetPackPathUtil.AssetFileVisitor var7
Path var9
Path var9
private final Set<Path> visited

Методы (11)

МодификаторыВозвратСигнатура
private AssetFileVisitorprivate AssetFileVisitor(@Nonnull String var1, @Nullable T var2, @Nonnull BiConsumer<T, Path> var3)
for for(String var8 : var1)
if if(var2 == null)
if if(var4 != null)
if if(var9 != null)
if if(var5 == null)
abstract return resolveAssetPathreturn resolveAssetPath(var0, ArrayUtil.EMPTY_STRING_ARRAY)
private boolean visitAssetPathprivate boolean visitAssetPath(@Nonnull Path var1)
static <T> void visitAssetPaths<T> void visitAssetPaths(@Nonnull Path var0, @Nonnull String var1, int var2, @Nullable T var3, @Nonnull BiConsumer<T, Path> var4)
public FileVisitResult visitFilepublic FileVisitResult visitFile(@Nonnull Path var1, @Nonnull BasicFileAttributes var2)
public FileVisitResult visitFileFailedpublic FileVisitResult visitFileFailed(@Nonnull Path var1, @Nonnull IOException var2)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.AccessDeniedException;
class="kw">import java.nio.file.FileVisitResult;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.InvalidPathException;
class="kw">import java.nio.file.NoSuchFileException;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.SimpleFileVisitor;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.function.BiConsumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

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

   @Nullable
   class="kw">public class="kw">static Path relativizeAssetPath(@Nonnull Path var0) {
      if (!var0.isAbsolute()) {
         class="kw">return var0;
      }

      AssetPack var1 = AssetModule.get().findAssetPackForPath(var0);
      class="kw">return var1 == null ? null : var1.tryRelativize(var0);
   }

   @Nullable
   class="kw">public class="kw">static Path resolveAssetPath(@Nonnull Path var0) class="kw">throws InvalidPathException {
      class="kw">return resolveAssetPath(var0, ArrayUtil.EMPTY_STRING_ARRAY);
   }

   @Nullable
   class="kw">public class="kw">static Path resolveAssetPath(@Nonnull Path var0, @Nonnull String[] var1) class="kw">throws InvalidPathException {
      var0 = var0.normalize();
      if (var0.isAbsolute()) {
         Path var2 = relativizeAssetPath(var0);
         if (var2 == null) {
            throw new InvalidPathException(var0.toString(), "Path cannot be relativized to an AssetPack root");
         }

         var0 = var2;
      }

      List var12 = AssetModule.get().getAssetPacks();

      for (int var3 = var12.size() - 1; var3 >= 0; var3--) {
         Path var4 = var12.get(var3).resolve(var0);
         if (var4 != null) {
            if (Files.isRegularFile(var4)) {
               class="kw">return var4;
            }

            for (String var8 : var1) {
               Path var9 = var4.getFileName();
               if (var9 != null) {
                  Path var10 = var4.resolveSibling(var9 + var8);
                  if (Files.isRegularFile(var10)) {
                     class="kw">return var10;
                  }
               }
            }
         }
      }

      class="kw">return null;
   }

   class="kw">public class="kw">static <T> void visitAssetPaths(@Nonnull Path var0, @Nonnull String var1, int var2, @Nullable T var3, @Nonnull BiConsumer<T, Path> var4) class="kw">throws InvalidPathException, IOException {
      Path var5 = relativizeAssetPath(var0);
      if (var5 == null) {
         throw new InvalidPathException(var0.toString(), "Path cannot be relativized to an AssetPack root");
      }

      List var6 = AssetModule.get().getAssetPacks();
      AssetPackPathUtil.AssetFileVisitor var7 = new AssetPackPathUtil.AssetFileVisitor<>(var1, var3, var4);

      for (int var8 = var6.size() - 1; var8 >= 0; var8--) {
         var7.root = var6.get(var8).getRoot();
         Path var9 = PathUtil.resolvePathWithinDir(var7.root, var5);
         if (var9 != null && Files.isDirectory(var9)) {
            Files.walkFileTree(var9, FileUtil.DEFAULT_WALK_TREE_OPTIONS_SET, var2, var7);
         }
      }
   }

   class="kw">private class="kw">static class AssetFileVisitor<T> class="kw">extends SimpleFileVisitor<Path> {
      @Nonnull
      class="kw">private class="kw">final String extension;
      @Nullable
      class="kw">private class="kw">final T ctx;
      @Nonnull
      class="kw">private class="kw">final BiConsumer<T, Path> consumer;
      @Nonnull
      class="kw">private class="kw">final Set<Path> visited = new ObjectOpenCustomHashSet(PathUtil.AGNOSTIC_HASH_STRATEGY);
      @Nullable
      class="kw">private Path root = null;

      class="kw">private AssetFileVisitor(@Nonnull String var1, @Nullable T var2, @Nonnull BiConsumer<T, Path> var3) {
         this.extension = var1;
         this.ctx = var2;
         this.consumer = var3;
      }

      class="kw">private boolean visitAssetPath(@Nonnull Path var1) {
         if (Files.isDirectory(var1)) {
            class="kw">return false;
         }

         if (!var1.toString().endsWith(this.extension)) {
            class="kw">return false;
         }

         assert this.root != null;
         class="kw">return this.visited.add(this.root.relativize(var1));
      }

      @Nonnull
      class="kw">public FileVisitResult visitFile(@Nonnull Path var1, @Nonnull BasicFileAttributes var2) {
         assert this.root != null && var1.getFileSystem() == this.root.getFileSystem() && var1.startsWith(this.root) : "root does not match the visited file";
         if (this.visitAssetPath(var1)) {
            this.consumer.accept(this.ctx, var1);
         }

         class="kw">return FileVisitResult.CONTINUE;
      }

      @Nonnull
      class="kw">public FileVisitResult visitFileFailed(@Nonnull Path var1, @Nonnull IOException var2) class="kw">throws IOException {
         class="kw">return !(var2 class="kw">instanceof NoSuchFileException) && !(var2 class="kw">instanceof AccessDeniedException)
            ? super.visitFileFailed((T)var1, var2)
            : FileVisitResult.CONTINUE;
      }
   }
}