ServerFileBrowser class
Пакет: com.hypixel.hytale.server.core.ui.browser
Файл: com/hypixel/hytale/server/core/ui/browser/ServerFileBrowser.java
Поля (94)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
List |
var1 |
|
final List |
var1 |
|
List |
var1 |
|
List |
var1 |
|
Path |
var1 |
|
String |
var10 |
|
String |
var10 |
|
String |
var11 |
|
AssetPack |
var11 |
|
String |
var12 |
|
AssetPack |
var12 |
|
Path |
var12 |
|
boolean |
var13 |
|
String |
var14 |
|
boolean |
var15 |
|
String[] |
var19 |
|
String |
var2 |
|
|
var2 |
|
|
var2 |
|
|
var2 |
|
|
var2 |
|
String |
var2 |
|
Path |
var2 |
|
Object2IntMap |
var2 |
|
String |
var2 |
|
boolean |
var2 |
|
String |
var2 |
|
String |
var2 |
|
PluginManifest |
var2 |
|
Predicate |
var2 |
|
String[] |
var2 |
|
Path |
var2 |
|
Path |
var2 |
|
String |
var20 |
|
String |
var21 |
|
AssetPack |
var22 |
|
ObjectArrayList |
var3 |
|
String |
var3 |
|
List |
var3 |
|
Path |
var3 |
|
String |
var3 |
|
Path |
var3 |
|
boolean |
var3 |
|
String[] |
var3 |
|
String |
var3 |
|
String |
var3x |
|
String |
var3x |
|
String[] |
var4 |
|
int |
var4 |
|
Path |
var4 |
|
String |
var4 |
|
String |
var4 |
|
String |
var4 |
|
int |
var4x |
|
String |
var4x |
|
String |
var5 |
|
Path |
var5 |
|
|
var5 |
|
String |
var5 |
|
String |
var5 |
|
Path |
var5 |
|
Path |
var5 |
|
Path |
var5 |
|
int |
var5 |
|
String |
var5 |
|
AssetPack |
var5 |
|
String |
var6 |
|
String |
var6 |
|
String |
var6 |
|
String |
var6 |
|
String |
var6 |
|
String |
var6 |
|
Path |
var6 |
|
AssetPack |
var6 |
|
Path |
var6 |
|
String |
var7 |
|
boolean |
var7 |
|
boolean |
var7 |
|
int |
var7 |
|
Path |
var7 |
|
Path |
var7 |
|
String |
var7 |
|
String |
var7 |
|
Path |
var7 |
|
String |
var8 |
|
String |
var8 |
|
Path |
var8 |
|
Path |
var8 |
|
String |
var8 |
|
Path |
var8 |
|
String |
var9 |
|
String[] |
var9 |
|
Path |
var9 |
Методы (49)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
private |
record |
AssetPackSearchResultrecord AssetPackSearchResult(@Nonnull String virtualPath, @Nonnull String displayName, int score, boolean isTerminal) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid path") |
public |
void |
addSelectionvoid addSelection(@Nonnull String var1) |
private |
List<FileListProvider.FileEntry> |
buildAssetPackListingList<FileListProvider.FileEntry> buildAssetPackListing() |
private |
List<FileListProvider.FileEntry> |
buildAssetPackSearchResultsList<FileListProvider.FileEntry> buildAssetPackSearchResults() |
public |
void |
buildCurrentPathvoid buildCurrentPath(@Nonnull UICommandBuilder var1) |
private |
List<FileListProvider.FileEntry> |
buildDirectoryListingList<FileListProvider.FileEntry> buildDirectoryListing() |
public |
void |
buildFileListvoid buildFileList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
public |
void |
buildRootSelectorvoid buildRootSelector(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
public |
void |
buildSearchInputvoid buildSearchInput(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
private |
List<FileListProvider.FileEntry> |
buildSearchResultsList<FileListProvider.FileEntry> buildSearchResults() |
public |
void |
buildUIvoid buildUI(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) |
public |
void |
clearSelectionvoid clearSelection() |
|
|
for for(FileListProvider.FileEntry var6 : var3) |
|
|
for for(Path var5 : var3) |
|
|
for for(Path var4 : var1) |
|
|
for for(Path var11 : var9) |
private |
boolean |
handleAssetPackNavigationboolean handleAssetPackNavigation(@Nonnull String var1) |
public |
boolean |
handleEventboolean handleEvent(@Nonnull FileBrowserEventData var1) |
|
|
if if(var3 != null) |
|
|
if if(var5 == null) |
|
|
if if(var7 > 0) |
|
|
if if(var22 != null) |
|
|
if if(var7 != null) |
|
|
if if(var2 != var3) |
|
|
if if(var12 != null) |
|
|
if if(var7 != null) |
|
|
if if(var4x > 0) |
|
|
if if(var5 > 0) |
|
|
if if(var11 != null) |
|
|
if if(var6 == null) |
|
|
if if(var7 == null) |
|
|
if if(var8 == null) |
|
|
if if(var9 == null) |
|
|
if if(var5 == null) |
|
|
if if(var6 == null) |
private |
boolean |
isTerminalDirectoryboolean isTerminalDirectory(@Nonnull Path var1) |
private |
boolean |
matchesExtensionboolean matchesExtension(@Nonnull String var1) |
public |
void |
navigateTovoid navigateTo(@Nonnull Path var1) |
public |
void |
navigateUpvoid navigateUp() |
|
public FileVisitResult |
preVisitDirectorypublic FileVisitResult preVisitDirectory(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) |
private |
String |
removeExtensionsString removeExtensions(@Nonnull String var1) |
private |
void |
searchInAssetPackDirectoryvoid searchInAssetPackDirectory(@Nonnull final Path var1, @Nonnull final String var2, @Nonnull final String var3, @Nonnull final List<ServerFileBrowser.AssetPackSearchResult> var4) |
public |
void |
setCurrentDirvoid setCurrentDir(@Nonnull Path var1) |
public |
void |
setRootvoid setRoot(@Nonnull Path var1) |
public |
void |
setSearchQueryvoid setSearchQuery(@Nonnull String var1) |
abstract |
|
this this(var1) |
|
public FileVisitResult |
visitFilepublic FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2) |
|
public FileVisitResult |
visitFilepublic FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.ui.browser;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.common.util.StringCompareUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.ui.DropdownEntryInfo;
class="kw">import com.hypixel.hytale.server.core.ui.Value;
class="kw">import com.hypixel.hytale.server.core.ui.builder.EventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
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.Paths;
class="kw">import java.nio.file.SimpleFileVisitor;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.Collections;
class="kw">import java.util.Comparator;
class="kw">import java.util.LinkedHashSet;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Set;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class ServerFileBrowser {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final Value<String> BUTTON_HIGHLIGHTED = Value.ref("Pages/BasicTextButton.ui", "SelectedLabelStyle");
class="kw">private class="kw">static class="kw">final String BASE_ASSET_PACK_DISPLAY_NAME = "HytaleAssets";
@Nonnull
class="kw">private class="kw">final FileBrowserConfig config;
@Nonnull
class="kw">private Path root;
@Nonnull
class="kw">private Path currentDir;
@Nonnull
class="kw">private String searchQuery;
@Nonnull
class="kw">private class="kw">final Set<String> selectedItems;
class="kw">public ServerFileBrowser(@Nonnull FileBrowserConfig var1) {
this.config = var1;
this.selectedItems = new LinkedHashSet<>();
this.searchQuery = "";
if (!var1.roots().isEmpty()) {
this.root = var1.roots().get(0).path();
} else {
this.root = Paths.get("");
}
this.currentDir = this.root.getFileSystem().getPath("");
}
class="kw">public ServerFileBrowser(@Nonnull FileBrowserConfig var1, @Nullable Path var2, @Nullable Path var3) {
this(var1);
if (var2 != null && Files.isDirectory(var2)) {
this.root = var2;
this.currentDir = this.root.getFileSystem().getPath("");
}
if (var3 != null) {
this.currentDir = var3;
}
}
class="kw">public void buildRootSelector(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
if (this.config.enableRootSelector() && this.config.rootSelectorId() != null) {
ObjectArrayList var3 = new ObjectArrayList();
for (FileBrowserConfig.RootEntry var5 : this.config.roots()) {
var3.add(new DropdownEntryInfo(var5.displayName(), var5.path().toString()));
}
var1.set(this.config.rootSelectorId() + ".Entries", var3);
var1.set(this.config.rootSelectorId() + ".Value", this.root.toString());
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged,
this.config.rootSelectorId(),
new EventData().append("@Root", this.config.rootSelectorId() + ".Value"),
false
);
} else {
if (this.config.rootSelectorId() != null) {
var1.set(this.config.rootSelectorId() + ".Visible", false);
}
}
}
class="kw">public void buildSearchInput(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
if (this.config.enableSearch() && this.config.searchInputId() != null) {
var1.set(this.config.searchInputId() + ".Value", this.searchQuery);
var2.addEventBinding(
CustomUIEventBindingType.ValueChanged, this.config.searchInputId(), EventData.of("@SearchQuery", this.config.searchInputId() + ".Value"), false
);
}
}
class="kw">public void buildCurrentPath(@Nonnull UICommandBuilder var1) {
if (this.config.currentPathId() != null) {
String var2;
if (this.config.assetPackMode()) {
String var3 = this.currentDir.toString().replace('\\', '/');
if (var3.isEmpty()) {
var2 = "Assets";
} else {
String[] var4 = var3.split("/", 2);
String var5 = var4[0];
String var6 = var4.length > 1 ? "/" + var4[1] : "";
if ("HytaleAssets".equals(var5)) {
var2 = var5 + var6;
} else {
var2 = "Mods/" + var5 + var6;
}
}
} else {
String var7 = this.root.toString().replace("\\", "/");
String var8 = this.currentDir.toString().isEmpty() ? "" : "/" + this.currentDir.toString().replace("\\", "/");
var2 = var7 + var8;
}
var1.set(this.config.currentPathId() + ".Text", var2);
}
}
@Nonnull
class="kw">public List<FileListProvider.FileEntry> getFileEntries() {
if (this.config.customProvider() != null) {
class="kw">return this.config.customProvider().getFiles(this.currentDir, this.searchQuery);
} else if (this.config.assetPackMode()) {
class="kw">return !this.searchQuery.isEmpty() && this.config.enableSearch() ? this.buildAssetPackSearchResults() : this.buildAssetPackListing();
} else {
class="kw">return !this.searchQuery.isEmpty() && this.config.enableSearch() ? this.buildSearchResults() : this.buildDirectoryListing();
}
}
class="kw">public void buildFileList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
var1.clear(this.config.listElementId());
List var3 = this.getFileEntries();
int var4 = 0;
if (this.config.enableDirectoryNav() && !this.currentDir.toString().isEmpty() && this.searchQuery.isEmpty()) {
var1.append(this.config.listElementId(), "Pages/BasicTextButton.ui");
var1.set(this.config.listElementId() + "[0].Text", "../");
var2.addEventBinding(CustomUIEventBindingType.Activating, this.config.listElementId() + "[0]", EventData.of("File", ".."));
var4++;
}
for (FileListProvider.FileEntry var6 : var3) {
boolean var7 = var6.isDirectory() && !var6.isTerminal();
String var8 = var7 ? var6.displayName() + "/" : var6.displayName();
var1.append(this.config.listElementId(), "Pages/BasicTextButton.ui");
var1.set(this.config.listElementId() + "[" + var4 + "].Text", var8);
if (!var6.isDirectory() || var6.isTerminal()) {
var1.set(this.config.listElementId() + "[" + var4 + "].Style", BUTTON_HIGHLIGHTED);
}
String var9 = !this.searchQuery.isEmpty() && !var7 ? "SearchResult" : "File";
var2.addEventBinding(CustomUIEventBindingType.Activating, this.config.listElementId() + "[" + var4 + "]", EventData.of(var9, var6.name()));
var4++;
}
}
class="kw">public void buildUI(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
this.buildRootSelector(var1, var2);
this.buildSearchInput(var1, var2);
this.buildCurrentPath(var1);
this.buildFileList(var1, var2);
}
class="kw">public boolean handleEvent(@Nonnull FileBrowserEventData var1) {
if (var1.getSearchQuery() != null) {
this.searchQuery = var1.getSearchQuery().trim().toLowerCase(Locale.ROOT);
class="kw">return true;
}
if (var1.getRoot() != null) {
Path var5 = this.findConfigRoot(var1.getRoot());
if (var5 == null) {
var5 = Path.of(var1.getRoot());
}
this.setRoot(var5);
this.currentDir = this.root.getFileSystem().getPath("");
this.searchQuery = "";
class="kw">return true;
} else if (var1.getFile() != null) {
String var2 = var1.getFile();
if ("..".equals(var2)) {
this.navigateUp();
class="kw">return true;
}
if (this.config.assetPackMode()) {
class="kw">return this.handleAssetPackNavigation(var2);
}
if (this.config.enableDirectoryNav()) {
Path var3 = this.root.resolve(this.currentDir.toString());
Path var4 = PathUtil.resolvePathWithinDir(var3, var2);
if (var4 != null && Files.isDirectory(var4) && PathUtil.isChildOf(this.root, var4)) {
this.currentDir = PathUtil.relativize(this.root, var4);
class="kw">return true;
}
}
class="kw">return false;
} else {
class="kw">return var1.getSearchResult() != null ? false : false;
}
}
class="kw">private List<FileListProvider.FileEntry> buildDirectoryListing() {
List var1 = new ObjectArrayList();
Path var2 = this.root.resolve(this.currentDir.toString());
if (!Files.isDirectory(var2)) {
class="kw">return var1;
}
try (DirectoryStream var3 = Files.newDirectoryStream(var2)) {
for (Path var5 : var3) {
String var6 = var5.getFileName().toString();
if (!var6.startsWith(".")) {
boolean var7 = Files.isDirectory(var5);
if (var7 || this.matchesExtension(var6)) {
var1.add(new FileListProvider.FileEntry(var6, var7));
}
}
}
} catch (IOException var10) {
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atSevere()).withCause(var10)).log("Error listing directory: %s", var2);
}
var1.sort((var0, var1x) -> {
if (var0.isDirectory() == var1x.isDirectory()) {
class="kw">return var0.name().compareToIgnoreCase(var1x.name());
} else {
class="kw">return var0.isDirectory() ? -1 : 1;
}
});
class="kw">return var1;
}
class="kw">private List<FileListProvider.FileEntry> buildSearchResults() {
class="kw">final List var1 = new ObjectArrayList();
if (!Files.isDirectory(this.root)) {
class="kw">return List.of();
}
try {
Files.walkFileTree(this.root, new SimpleFileVisitor<Path>() {
@Nonnull
class="kw">public FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2) {
String var3 = var1x.getFileName().toString();
if (ServerFileBrowser.this.matchesExtension(var3)) {
var1.add(var1x);
}
class="kw">return FileVisitResult.CONTINUE;
}
});
} catch (IOException var8) {
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atSevere()).withCause(var8)).log("Error walking directory: %s", this.root);
}
Object2IntMap var2 = new Object2IntOpenHashMap(var1.size());
for (Path var4 : var1) {
String var5 = var4.getFileName().toString();
String var6 = this.removeExtensions(var5);
int var7 = StringCompareUtil.getFuzzyDistance(var6, this.searchQuery, Locale.ENGLISH);
if (var7 > 0) {
var2.put(var4, var7);
}
}
class="kw">return var2.keySet().stream().sorted(Comparator.comparingInt(var2::getInt).reversed()).limit(this.config.maxResults()).map(var2x -> {
Path var3 = PathUtil.relativize(this.root, var2x);
String var4 = var2x.getFileName().toString();
String var5 = this.removeExtensions(var4);
class="kw">return new FileListProvider.FileEntry(var3.toString(), var5, false, false, var2.getInt(var2x));
}).collect(Collectors.toList());
}
class="kw">private boolean matchesExtension(@Nonnull String var1) {
if (this.config.allowedExtensions().isEmpty()) {
class="kw">return true;
}
for (String var3 : this.config.allowedExtensions()) {
if (var1.endsWith(var3)) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">private List<FileListProvider.FileEntry> buildAssetPackListing() {
List var1 = new ObjectArrayList();
String var2 = this.currentDir.toString().replace('\\', '/');
if (var2.isEmpty()) {
for (AssetPack var4 : AssetModule.get().getAssetPacks()) {
Path var5 = this.getAssetPackSubPath(var4);
if (var5 != null && Files.isDirectory(var5)) {
String var6 = this.getAssetPackDisplayName(var4);
var1.add(new FileListProvider.FileEntry(var6, var6, true));
}
}
} else {
String[] var19 = var2.split("/", 2);
String var20 = var19[0];
String var21 = var19.length > 1 ? var19[1] : "";
AssetPack var22 = this.findAssetPackByDisplayName(var20);
if (var22 != null) {
Path var7 = this.getAssetPackSubPath(var22);
if (var7 != null) {
Path var8 = var21.isEmpty() ? var7 : PathUtil.resolvePathWithinDir(var7, var21);
if (var8 != null && Files.isDirectory(var8)) {
try (DirectoryStream var9 = Files.newDirectoryStream(var8)) {
for (Path var11 : var9) {
String var12 = var11.getFileName().toString();
if (!var12.startsWith(".")) {
boolean var13 = Files.isDirectory(var11);
if (var13 || this.matchesExtension(var12)) {
String var14 = var13 ? var12 : this.removeExtensions(var12);
boolean var15 = var13 && this.isTerminalDirectory(var11);
var1.add(new FileListProvider.FileEntry(var12, var14, var13, var15));
}
}
}
} catch (IOException var18) {
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atSevere()).withCause(var18)).log("Error listing asset pack directory: %s", var8);
}
}
}
}
}
var1.sort((var0, var1x) -> {
boolean var2 = "HytaleAssets".equals(var0.name());
boolean var3 = "HytaleAssets".equals(var1x.name());
if (var2 != var3) {
class="kw">return var2 ? -1 : 1;
} else if (var0.isDirectory() == var1x.isDirectory()) {
class="kw">return var0.displayName().compareToIgnoreCase(var1x.displayName());
} else {
class="kw">return var0.isDirectory() ? -1 : 1;
}
});
class="kw">return var1;
}
class="kw">private List<FileListProvider.FileEntry> buildAssetPackSearchResults() {
List var1 = new ObjectArrayList();
String var2 = this.currentDir.toString().replace('\\', '/');
if (var2.isEmpty()) {
for (AssetPack var4 : AssetModule.get().getAssetPacks()) {
Path var5 = this.getAssetPackSubPath(var4);
if (var5 != null && Files.isDirectory(var5)) {
String var6 = this.getAssetPackDisplayName(var4);
this.searchInAssetPackDirectory(var5, var6, "", var1);
}
}
} else {
String[] var9 = var2.split("/", 2);
String var10 = var9[0];
String var11 = var9.length > 1 ? var9[1] : "";
AssetPack var12 = this.findAssetPackByDisplayName(var10);
if (var12 != null) {
Path var7 = this.getAssetPackSubPath(var12);
if (var7 != null) {
Path var8 = var11.isEmpty() ? var7 : PathUtil.resolvePathWithinDir(var7, var11);
if (var8 != null && Files.isDirectory(var8)) {
this.searchInAssetPackDirectory(var8, var10, var11, var1);
}
}
}
}
var1.sort(Comparator.comparingInt(ServerFileBrowser.AssetPackSearchResult::score).reversed());
class="kw">return var1.stream()
.limit(this.config.maxResults())
.map(var0 -> new FileListProvider.FileEntry(var0.virtualPath(), var0.displayName(), var0.isTerminal(), var0.isTerminal(), var0.score()))
.collect(Collectors.toList());
}
class="kw">private void searchInAssetPackDirectory(
@Nonnull class="kw">final Path var1, @Nonnull class="kw">final String var2, @Nonnull class="kw">final String var3, @Nonnull class="kw">final List<ServerFileBrowser.AssetPackSearchResult> var4
) {
try {
Files.walkFileTree(var1, new SimpleFileVisitor<Path>() {
@Nonnull
class="kw">public FileVisitResult preVisitDirectory(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) {
if (var1x.equals(var1)) {
class="kw">return FileVisitResult.CONTINUE;
}
if (ServerFileBrowser.this.isTerminalDirectory(var1x)) {
String var3x = var1x.getFileName().toString();
int var4x = StringCompareUtil.getFuzzyDistance(var3x.toLowerCase(Locale.ROOT), ServerFileBrowser.this.searchQuery, Locale.ENGLISH);
if (var4x > 0) {
Path var5 = var1.relativize(var1x);
String var6 = var5.toString().replace('\\', '/');
String var7 = var3.isEmpty() ? var2 + "/" + var6 : var2 + "/" + var3 + "/" + var6;
var4.add(new ServerFileBrowser.AssetPackSearchResult(var7, var3x, var4x, true));
}
class="kw">return FileVisitResult.SKIP_SUBTREE;
} else {
class="kw">return FileVisitResult.CONTINUE;
}
}
@Nonnull
class="kw">public FileVisitResult visitFile(@Nonnull Path var1x, @Nonnull BasicFileAttributes var2x) {
String var3x = var1x.getFileName().toString();
if (ServerFileBrowser.this.matchesExtension(var3x)) {
String var4x = ServerFileBrowser.this.removeExtensions(var3x);
int var5 = StringCompareUtil.getFuzzyDistance(var4x.toLowerCase(Locale.ROOT), ServerFileBrowser.this.searchQuery, Locale.ENGLISH);
if (var5 > 0) {
Path var6 = var1.relativize(var1x);
String var7 = var6.toString().replace('\\', '/');
String var8 = var3.isEmpty() ? var2 + "/" + var7 : var2 + "/" + var3 + "/" + var7;
var4.add(new ServerFileBrowser.AssetPackSearchResult(var8, var4x, var5, false));
}
}
class="kw">return FileVisitResult.CONTINUE;
}
});
} catch (IOException var6) {
((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atSevere()).withCause(var6)).log("Error searching asset pack directory: %s", var1);
}
}
class="kw">private boolean handleAssetPackNavigation(@Nonnull String var1) {
String var2 = this.currentDir.toString().replace('\\', '/');
if (var2.isEmpty()) {
AssetPack var11 = this.findAssetPackByDisplayName(var1);
if (var11 != null) {
Path var12 = this.getAssetPackSubPath(var11);
if (var12 != null && Files.isDirectory(var12)) {
this.currentDir = Paths.get(var1);
class="kw">return true;
}
}
class="kw">return false;
} else {
String[] var3 = var2.split("/", 2);
String var4 = var3[0];
String var5 = var3.length > 1 ? var3[1] : "";
AssetPack var6 = this.findAssetPackByDisplayName(var4);
if (var6 == null) {
class="kw">return false;
}
Path var7 = this.getAssetPackSubPath(var6);
if (var7 == null) {
class="kw">return false;
}
Path var8 = var5.isEmpty() ? var7 : PathUtil.resolvePathWithinDir(var7, var5);
if (var8 == null) {
class="kw">return false;
}
Path var9 = PathUtil.resolvePathWithinDir(var8, var1);
if (var9 == null) {
class="kw">return false;
}
if (Files.isDirectory(var9)) {
if (this.isTerminalDirectory(var9)) {
class="kw">return false;
}
String var10 = var5.isEmpty() ? var4 + "/" + var1 : var4 + "/" + var5 + "/" + var1;
this.currentDir = Paths.get(var10);
class="kw">return true;
} else {
class="kw">return false;
}
}
}
@Nullable
class="kw">private Path getAssetPackSubPath(@Nonnull AssetPack var1) {
class="kw">return this.config.assetPackSubPath() == null ? null : var1.getRoot().resolve(this.config.assetPackSubPath());
}
@Nonnull
class="kw">private String getAssetPackDisplayName(@Nonnull AssetPack var1) {
if (var1.equals(AssetModule.get().getBaseAssetPack())) {
class="kw">return "HytaleAssets";
}
PluginManifest var2 = var1.getManifest();
class="kw">return var2 != null ? var2.getName() : var1.getName();
}
@Nullable
class="kw">private AssetPack findAssetPackByDisplayName(@Nonnull String var1) {
for (AssetPack var3 : AssetModule.get().getAssetPacks()) {
if (this.getAssetPackDisplayName(var3).equals(var1)) {
class="kw">return var3;
}
}
class="kw">return null;
}
class="kw">private boolean isTerminalDirectory(@Nonnull Path var1) {
Predicate var2 = this.config.terminalDirectoryPredicate();
class="kw">return var2 != null && var2.test(var1);
}
@Nullable
class="kw">public Path resolveAssetPackPath(@Nonnull String var1) {
if (this.config.assetPackMode() && !var1.isEmpty()) {
String[] var2 = var1.replace('\\', '/').split("/", 2);
String var3 = var2[0];
String var4 = var2.length > 1 ? var2[1] : "";
AssetPack var5 = this.findAssetPackByDisplayName(var3);
if (var5 == null) {
class="kw">return null;
} else {
Path var6 = this.getAssetPackSubPath(var5);
if (var6 == null) {
class="kw">return null;
} else {
class="kw">return var4.isEmpty() ? var6 : PathUtil.resolvePathWithinDir(var6, var4);
}
}
} else {
class="kw">return null;
}
}
@Nonnull
class="kw">public String getAssetPackCurrentPath() {
class="kw">return this.currentDir.toString().replace('\\', '/');
}
class="kw">private String removeExtensions(@Nonnull String var1) {
for (String var3 : this.config.allowedExtensions()) {
if (var1.endsWith(var3)) {
class="kw">return var1.substring(0, var1.length() - var3.length());
}
}
class="kw">return var1;
}
@Nonnull
class="kw">public Path getRoot() {
class="kw">return this.root;
}
class="kw">public void setRoot(@Nonnull Path var1) {
this.root = var1;
}
@Nonnull
class="kw">public Path getCurrentDir() {
class="kw">return this.currentDir;
}
class="kw">public void setCurrentDir(@Nonnull Path var1) {
Path var2 = this.root.resolve(var1.toString());
if (!PathUtil.isChildOf(this.root, var2)) {
throw new IllegalArgumentException("Invalid path");
}
this.currentDir = var1;
}
@Nonnull
class="kw">public String getSearchQuery() {
class="kw">return this.searchQuery;
}
class="kw">public void setSearchQuery(@Nonnull String var1) {
this.searchQuery = var1;
}
class="kw">public void navigateUp() {
if (!this.currentDir.toString().isEmpty()) {
Path var1 = this.currentDir.getParent();
this.currentDir = var1 != null ? var1 : Paths.get("");
}
}
class="kw">public void navigateTo(@Nonnull Path var1) {
Path var2 = this.root.resolve(this.currentDir.toString()).resolve(var1.toString());
if (PathUtil.isChildOf(this.root, var2)) {
if (Files.isDirectory(var2)) {
this.currentDir = PathUtil.relativize(this.root, var2);
}
}
}
@Nonnull
class="kw">public Set<String> getSelectedItems() {
class="kw">return Collections.unmodifiableSet(this.selectedItems);
}
class="kw">public void addSelection(@Nonnull String var1) {
if (this.config.enableMultiSelect()) {
this.selectedItems.add(var1);
} else {
this.selectedItems.clear();
this.selectedItems.add(var1);
}
}
class="kw">public void clearSelection() {
this.selectedItems.clear();
}
@Nonnull
class="kw">public FileBrowserConfig getConfig() {
class="kw">return this.config;
}
@Nullable
class="kw">private Path findConfigRoot(@Nonnull String var1) {
for (FileBrowserConfig.RootEntry var3 : this.config.roots()) {
if (var3.path().toString().equals(var1)) {
class="kw">return var3.path();
}
}
class="kw">return null;
}
class="kw">private record AssetPackSearchResult(@Nonnull String virtualPath, @Nonnull String displayName, int score, boolean isTerminal) {
class="kw">private AssetPackSearchResult {
}
}
}