PathArray class

Пакет: com.hypixel.hytale.procedurallib.file

Файл: com/hypixel/hytale/procedurallib/file/FileIOSystem.java

Поля (1)

МодификаторыТипИмя
final Path[] paths

Методы (2)

МодификаторыВозвратСигнатура
public Path getpublic Path get(int var1)
public int sizepublic int size()

Исходный код

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

class="kw">import java.io.FileNotFoundException;
class="kw">import java.io.IOException;
class="kw">import java.io.InputStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.Paths;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">interface FileIOSystem class="kw">extends AutoCloseable {
   @Nonnull
   Path baseRoot();

   @Nonnull
   FileIOSystem.PathArray roots();

   @Nonnull
   class="kw">default AssetPath resolve(@Nonnull Path var1) {
      Path var2 = FileIO.relativize(var1, this.baseRoot());

      for (Path var6 : this.roots().paths) {
         AssetPath var7 = AssetPath.fromRelative(var6, var2);
         if (FileIO.exists(var7)) {
            class="kw">return var7;
         }
      }

      class="kw">return AssetPath.fromRelative(this.baseRoot(), var2);
   }

   @Nonnull
   class="kw">default <T> T load(@Nonnull AssetPath var1, @Nonnull AssetLoader<T> var2) class="kw">throws IOException {
      if (!Files.exists(var1.filepath())) {
         throw new FileNotFoundException("Unable to find file: " + var1);
      }

      try (InputStream var3 = Files.newInputStream(var1.filepath())) {
         class="kw">return var2.load(var3);
      }
   }

   @Override
   class="kw">default void close() {
   }

   class="kw">final class PathArray {
      class="kw">final Path[] paths;

      class="kw">public PathArray(Path... var1) {
         this.paths = var1;
      }

      class="kw">public int size() {
         class="kw">return this.paths.length;
      }

      class="kw">public Path get(int var1) {
         class="kw">return this.paths[var1];
      }
   }

   class="kw">final class Provider {
      class="kw">private class="kw">static class="kw">final FileIOSystem.Provider.DefaultIOFileSystem DEFAULT = new FileIOSystem.Provider.DefaultIOFileSystem();
      class="kw">private class="kw">static class="kw">final ThreadLocal<FileIOSystem> HOLDER = ThreadLocal.withInitial(() -> DEFAULT);

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

      class="kw">static FileIOSystem get() {
         class="kw">return HOLDER.get();
      }

      class="kw">static void set(@Nonnull FileIOSystem var0) {
         HOLDER.set(var0);
      }

      class="kw">static void unset() {
         HOLDER.set(DEFAULT);
      }

      class="kw">static void setRoot(@Nonnull Path var0) {
         DEFAULT.setBase(var0);
      }

      class="kw">private class="kw">static class="kw">final class DefaultIOFileSystem class="kw">implements FileIOSystem {
         class="kw">private class="kw">static class="kw">final Path DEFAULT_ROOT = Paths.get(".").toAbsolutePath();
         class="kw">private Path base = DEFAULT_ROOT;
         class="kw">private FileIOSystem.PathArray roots = new FileIOSystem.PathArray(DEFAULT_ROOT);

         class="kw">private DefaultIOFileSystem() {
         }

         class="kw">public class="kw">synchronized void setBase(Path var1) {
            this.base = var1;
            this.roots = new FileIOSystem.PathArray(var1);
         }

         @Nonnull
         @Override
         class="kw">public class="kw">synchronized Path baseRoot() {
            class="kw">return this.base;
         }

         @Nonnull
         @Override
         class="kw">public class="kw">synchronized FileIOSystem.PathArray roots() {
            class="kw">return this.roots;
         }
      }
   }
}