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