AssetFileVisitor class

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

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

extends: SimpleFileVisitor<Path>

Поля (5)

МодификаторыТипИмя
private final BiConsumer<T, Path> consumer
private final T ctx
private final String extension
private Path root
private final Set<Path> visited

Методы (3)

МодификаторыВозвратСигнатура
private boolean visitAssetPathprivate boolean visitAssetPath(@Nonnull Path var1)
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;
      }
   }
}