AssetPrefabFileProvider class
Пакет: com.hypixel.hytale.builtin.buildertools.prefablist
Файл: com/hypixel/hytale/builtin/buildertools/prefablist/AssetPrefabFileProvider.java
implements: FileListProvider
Поля (43)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
MAX_SEARCH_RESULTS |
|
List |
var1 |
|
boolean |
var1 |
|
String[] |
var10 |
|
String |
var11 |
|
List |
var11 |
|
boolean |
var12 |
|
String |
var12 |
|
String |
var13 |
|
String |
var14 |
|
AssetPrefabFileProvider.SearchResult |
var15 |
|
boolean |
var2 |
|
List |
var2 |
|
String |
var2 |
|
String[] |
var2 |
|
PrefabStore.AssetPackPrefabPath |
var2 |
|
String |
var3 |
|
boolean |
var3 |
|
String[] |
var3 |
|
List |
var3 |
|
int |
var3 |
|
String |
var3 |
|
String |
var3x |
|
String |
var4 |
|
String |
var4 |
|
String |
var4 |
|
String |
var4 |
|
|
var4 |
|
String |
var4 |
|
String |
var4x |
|
String |
var5 |
|
String |
var5 |
|
PrefabStore.AssetPackPrefabPath |
var5 |
|
int |
var5x |
|
PrefabStore.AssetPackPrefabPath |
var6 |
|
Path |
var6 |
|
Path |
var7 |
|
|
var7 |
|
String |
var7 |
|
String |
var7 |
|
PrefabStore.AssetPackPrefabPath |
var8 |
|
Path |
var9 |
|
|
var9 |
Методы (13)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
private |
record |
SearchResultrecord SearchResult(@Nonnull String relativePath, @Nonnull String displayName, int score) |
|
|
for for(Path var10 : var8) |
|
|
if if(var2 != var3) |
|
|
if if(var6 == null) |
|
|
if if(var7 == null) |
|
|
if if(var8 != null) |
|
|
if if(var9 == null) |
|
|
if if(var5x > 0) |
|
|
if if(var3 < 0) |
|
|
if if(!var1) |
|
|
if if(var5 == null) |
private |
void |
searchInDirectoryvoid searchInDirectory(@Nonnull final Path var1,
@Nonnull final String var2,
@Nonnull final String var3,
@Nonnull final String var4,
@Nonnull final List<AssetPrefabFileProvider.SearchResult> var5) |
|
public FileVisitResult |
visitFilepublic FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.prefablist;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.common.util.StringCompareUtil;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.ui.browser.FileListProvider;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.DirectoryStream;
class="kw">import java.nio.file.FileVisitResult;
class="kw">import java.nio.file.Files;
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.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class AssetPrefabFileProvider class="kw">implements FileListProvider {
class="kw">private class="kw">static class="kw">final int MAX_SEARCH_RESULTS = 50;
class="kw">private class="kw">static class="kw">final String BASE_ASSET_PACK_DISPLAY_NAME = "HytaleAssets";
class="kw">public AssetPrefabFileProvider() {
}
@Nonnull
@Override
class="kw">public List<FileListProvider.FileEntry> getFiles(@Nonnull Path var1, @Nonnull String var2) {
String var3 = var1.toString().replace('\\', '/');
if (!var2.isEmpty()) {
class="kw">return this.buildSearchResults(var3, var2);
} else {
class="kw">return var3.isEmpty() ? this.buildPackListings() : this.buildPackDirectoryListing(var3);
}
}
@Nonnull
class="kw">private List<FileListProvider.FileEntry> buildPackListings() {
List var1 = new ObjectArrayList();
for (PrefabStore.AssetPackPrefabPath var3 : PrefabStore.get().getAllBrowsablePrefabPaths()) {
String var4 = var3.getDisplayName();
String var5 = this.getPackKey(var3);
var1.add(new FileListProvider.FileEntry(var5, var4, true));
}
var1.sort((var0, var1x) -> {
boolean var2 = "HytaleAssets".equals(var0.displayName());
boolean var3 = "HytaleAssets".equals(var1x.displayName());
if (var2 != var3) {
class="kw">return var2 ? -1 : 1;
} else {
class="kw">return var0.displayName().compareToIgnoreCase(var1x.displayName());
}
});
class="kw">return var1;
}
@Nonnull
class="kw">private List<FileListProvider.FileEntry> buildPackDirectoryListing(@Nonnull String var1) {
List var2 = new ObjectArrayList();
String[] var3 = var1.split("/", 2);
String var4 = var3[0];
String var5 = var3.length > 1 ? var3[1] : "";
PrefabStore.AssetPackPrefabPath var6 = this.findPackByKey(var4);
if (var6 == null) {
class="kw">return var2;
}
Path var7 = var6.prefabsPath();
if (!var5.isEmpty()) {
var7 = PathUtil.resolvePathWithinDir(var7, var5);
if (var7 == null) {
class="kw">return var2;
}
}
if (!Files.isDirectory(var7)) {
class="kw">return var2;
}
try (DirectoryStream var8 = Files.newDirectoryStream(var7)) {
for (Path var10 : var8) {
String var11 = var10.getFileName().toString();
if (!var11.startsWith(".")) {
boolean var12 = Files.isDirectory(var10);
if (var12 || PrefabStore.isPrefabFileName(var11)) {
String var13 = var12 ? var11 : removeExtension(var11);
var2.add(new FileListProvider.FileEntry(var11, var13, var12));
}
}
}
} catch (IOException var16) {
}
var2.sort((var0, var1x) -> {
if (var0.isDirectory() == var1x.isDirectory()) {
class="kw">return var0.displayName().compareToIgnoreCase(var1x.displayName());
} else {
class="kw">return var0.isDirectory() ? -1 : 1;
}
});
class="kw">return var2;
}
@Nonnull
class="kw">private List<FileListProvider.FileEntry> buildSearchResults(@Nonnull String var1, @Nonnull String var2) {
List var3 = new ObjectArrayList();
String var4 = var2.toLowerCase(Locale.ROOT);
if (var1.isEmpty()) {
for (PrefabStore.AssetPackPrefabPath var6 : PrefabStore.get().getAllBrowsablePrefabPaths()) {
String var7 = this.getPackKey(var6);
this.searchInDirectory(var6.prefabsPath(), var7, "", var4, var3);
}
} else {
String[] var10 = var1.split("/", 2);
String var12 = var10[0];
String var14 = var10.length > 1 ? var10[1] : "";
PrefabStore.AssetPackPrefabPath var8 = this.findPackByKey(var12);
if (var8 != null) {
Path var9 = var8.prefabsPath();
if (!var14.isEmpty()) {
var9 = PathUtil.resolvePathWithinDir(var9, var14);
if (var9 == null) {
class="kw">return List.of();
}
}
this.searchInDirectory(var9, var12, var14, var4, var3);
}
}
var3.sort(Comparator.comparingInt(AssetPrefabFileProvider.SearchResult::score).reversed());
List var11 = new ObjectArrayList();
for (int var13 = 0; var13 < Math.min(var3.size(), 50); var13++) {
AssetPrefabFileProvider.SearchResult var15 = var3.get(var13);
var11.add(new FileListProvider.FileEntry(var15.relativePath(), var15.displayName(), false, false, var15.score()));
}
class="kw">return var11;
}
class="kw">private void searchInDirectory(
@Nonnull class="kw">final Path var1,
@Nonnull class="kw">final String var2,
@Nonnull class="kw">final String var3,
@Nonnull class="kw">final String var4,
@Nonnull class="kw">final List<AssetPrefabFileProvider.SearchResult> var5
) {
if (Files.isDirectory(var1)) {
try {
Files.walkFileTree(
var1,
new SimpleFileVisitor<Path>() {
@Nonnull
class="kw">public FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) {
String var3x = var1x.getFileName().toString();
if (PrefabStore.isPrefabFileName(var3x)) {
String var4x = AssetPrefabFileProvider.removeExtension(var3x);
int var5x = StringCompareUtil.getFuzzyDistance(var4x.toLowerCase(Locale.ROOT), var4, Locale.ENGLISH);
if (var5x > 0) {
Path var6 = var1.relativize(var1x);
String var7 = var3.isEmpty()
? var2 + "/" + var6.toString().replace('\\', '/')
: var2 + "/" + var3 + "/" + var6.toString().replace('\\', '/');
var5.add(new AssetPrefabFileProvider.SearchResult(var7, var4x, var5x));
}
}
class="kw">return FileVisitResult.CONTINUE;
}
}
);
} catch (IOException var7) {
}
}
}
@Nonnull
class="kw">private String getPackKey(@Nonnull PrefabStore.AssetPackPrefabPath var1) {
class="kw">return var1.getDisplayName();
}
@Nullable
class="kw">private PrefabStore.AssetPackPrefabPath findPackByKey(@Nonnull String var1) {
for (PrefabStore.AssetPackPrefabPath var3 : PrefabStore.get().getAllBrowsablePrefabPaths()) {
if (this.getPackKey(var3).equals(var1)) {
class="kw">return var3;
}
}
class="kw">return null;
}
@Nonnull
class="kw">public class="kw">static String removeExtension(@Nonnull String var0) {
class="kw">return PrefabStore.stripPrefabSuffix(var0);
}
@Nullable
class="kw">public class="kw">static String toNodeEditorPath(@Nonnull String var0) {
boolean var1 = var0.endsWith("/");
String var2 = var1 ? var0.substring(0, var0.length() - 1) : var0;
int var3 = var2.indexOf(47);
if (var3 < 0) {
class="kw">return null;
}
String var4 = var2.substring(var3 + 1);
if (var4.isEmpty()) {
class="kw">return null;
}
if (!var1) {
var4 = PrefabStore.stripPrefabSuffix(var4);
}
class="kw">return "/" + var4 + (var1 ? "/" : "");
}
@Nullable
class="kw">public Path resolveVirtualPath(@Nonnull String var1) {
if (var1.isEmpty()) {
class="kw">return null;
} else {
String[] var2 = var1.split("/", 2);
String var3 = var2[0];
String var4 = var2.length > 1 ? var2[1] : "";
PrefabStore.AssetPackPrefabPath var5 = this.findPackByKey(var3);
if (var5 == null) {
class="kw">return null;
} else {
class="kw">return var4.isEmpty() ? var5.prefabsPath() : PathUtil.resolvePathWithinDir(var5.prefabsPath(), var4);
}
}
}
@Nonnull
class="kw">public String getPackDisplayName(@Nonnull String var1) {
PrefabStore.AssetPackPrefabPath var2 = this.findPackByKey(var1);
class="kw">return var2 != null ? var2.getDisplayName() : var1;
}
class="kw">private record SearchResult(@Nonnull String relativePath, @Nonnull String displayName, int score) {
class="kw">private SearchResult {
}
}
}