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 {
}
}
}