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