AssetFileSystem class

Пакет: com.hypixel.hytale.server.worldgen.loader

Файл: com/hypixel/hytale/server/worldgen/loader/AssetFileSystem.java

implements: FileIOSystem

Поля (16)

МодификаторыТипИмя
final Strategy<Path> PATH_STRATEGY
Path[] var1
Path var2
Path var2
AssetModule var2
Path var3
AssetPath var3
var3
AssetFileSystem.Resource var3
var3
Path var3
Object var4
List var4
ObjectArrayList var5
AssetPack var7
AssetPack var9

Методы (8)

МодификаторыВозвратСигнатура
public boolean equalspublic boolean equals(Path var1, Path var2)
abstract for for(int var2 = 0; var2 < var0.size()
static List<AssetPack> getAssetPacksList<AssetPack> getAssetPacks(@Nonnull WorldGenConfig var0, @Nonnull Predicate<Path> var1)
static Path[] getAssetRootsPath[] getAssetRoots(@Nonnull List<AssetPack> var0)
public int hashCodepublic int hashCode(Path var1)
if if(var3 == null)
if if(var3 == null)
public List<AssetPack> packsList<AssetPack> packs()

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.worldgen.WorldGenPlugin;
class="kw">import com.hypixel.hytale.procedurallib.file.AssetLoader;
class="kw">import com.hypixel.hytale.procedurallib.file.AssetPath;
class="kw">import com.hypixel.hytale.procedurallib.file.FileIO;
class="kw">import com.hypixel.hytale.procedurallib.file.FileIOSystem;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.worldgen.WorldGenConfig;
class="kw">import it.unimi.dsi.fastutil.Hash.Strategy;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;

class="kw">public class AssetFileSystem class="kw">implements FileIOSystem {
   class="kw">private class="kw">static class="kw">final Strategy<Path> PATH_STRATEGY = new Strategy<Path>() {
      class="kw">public int hashCode(Path var1) {
         class="kw">return FileIO.hashCode(var1);
      }

      class="kw">public boolean equals(Path var1, Path var2) {
         class="kw">return FileIO.equals(var1, var2);
      }
   };
   class="kw">private class="kw">final Path root;
   class="kw">private class="kw">final FileIOSystem.PathArray packRoots;
   class="kw">private class="kw">final List<AssetPack> packs;
   class="kw">private class="kw">final Object2ObjectMap<Path, AssetPath> files = new Object2ObjectOpenCustomHashMap(PATH_STRATEGY);
   class="kw">private class="kw">final Object2ObjectMap<AssetPath, AssetFileSystem.Resource<?>> resources = new Object2ObjectOpenHashMap();

   class="kw">public AssetFileSystem(@Nonnull WorldGenConfig var1) {
      Path var2 = AssetModule.get().getBaseAssetPack().getRoot();
      Path var3 = FileIO.relativize(var1.path(), var2);
      this.root = var2;
      this.packs = getAssetPacks(var1, var1x -> FileIO.exists(var1x, var3));
      this.packRoots = new FileIOSystem.PathArray(getAssetRoots(this.packs));
   }

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

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

   @Nonnull
   @Override
   class="kw">public AssetPath resolve(@Nonnull Path var1) {
      Path var2 = FileIO.relativize(var1, this.root);
      AssetPath var3 = (AssetPath)this.files.get(var2);
      if (var3 == null) {
         var3 = FileIOSystem.super.resolve(var1);
         this.files.put(var2, var3);
      }

      class="kw">return var3;
   }

   @Nonnull
   @Override
   class="kw">public <T> T load(@Nonnull AssetPath var1, @Nonnull AssetLoader<T> var2) class="kw">throws IOException {
      AssetFileSystem.Resource var3 = (AssetFileSystem.Resource<?>)this.resources.get(var1);
      if (var3 == null) {
         Object var4 = FileIOSystem.super.load(var1, var2);
         var3 = new AssetFileSystem.Resource<>(var4, var2.type());
         this.resources.put(var1, var3);
      } else if (var3.type() != var2.type()) {
         throw new IllegalStateException("Resource type mismatch: expected " + var2.type() + " but found " + var3.type);
      }

      class="kw">return var2.type().cast(var3.value);
   }

   @Override
   class="kw">public void close() {
      this.files.clear();
      this.resources.clear();
      FileIO.closeFileIOSystem(this);
   }

   class="kw">public List<AssetPack> packs() {
      class="kw">return this.packs;
   }

   class="kw">public class="kw">static List<AssetPack> getAssetPacks(@Nonnull WorldGenConfig var0, @Nonnull Predicate<Path> var1) {
      AssetModule var2 = AssetModule.get();
      Path var3 = WorldGenPlugin.getVersionsPath();
      List var4 = var2.getAssetPacks();
      ObjectArrayList var5 = new ObjectArrayList(var4.size());

      for (int var6 = var4.size() - 1; var6 >= 1; var6--) {
         AssetPack var7 = var4.get(var6);
         if (!FileIO.startsWith(var7.getRoot(), var3) && var1.test(var7.getRoot())) {
            var5.add(var4.get(var6));
         }
      }

      for (int var8 = var4.size() - 1; var8 >= 1; var8--) {
         AssetPack var9 = var4.get(var8);
         if (FileIO.startsWith(var9.getRoot(), var3) && var9.getManifest().getVersion().compareTo(var0.version()) <= 0 && var1.test(var9.getRoot())) {
            var5.add(var4.get(var8));
         }
      }

      var5.add(var4.getFirst());
      class="kw">return List.copyOf(var5);
   }

   class="kw">public class="kw">static Path[] getAssetRoots(@Nonnull List<AssetPack> var0) {
      Path[] var1 = new Path[var0.size()];

      for (int var2 = 0; var2 < var0.size(); var2++) {
         var1[var2] = var0.get(var2).getRoot();
      }

      class="kw">return var1;
   }

   class="kw">public record Resource<T>(@Nonnull T value, @Nonnull Class<T> type) {
      class="kw">public Resource {
      }
   }
}