PrefabLoader class

Пакет: com.hypixel.hytale.server.core.prefab.selection.buffer

Файл: com/hypixel/hytale/server/core/prefab/selection/buffer/PrefabLoader.java

Поля (17)

МодификаторыТипИмя
final char JSON_FILEPATH_SEPARATOR
return
int var1
var1
var1
var1
String var3
String var3
String var3
String var3
Path var4
Matcher var4
int var4
String var5
int var5
char[] var6
Path var8

Методы (15)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid prefab name: " + var1)
abstract return new Stringreturn new String(var6)
for for(String var7 : new String[]{".lpf", ".prefab.json"})
for for(int var7 = 0; var7 < var6.length; var7++)
static int getFilepathLengthNoExtensionint getFilepathLengthNoExtension(@Nonnull String var0)
public Path getRootFolderPath getRootFolder()
if if(var5 < var4)
if if(var6[var7] == File.separatorChar)
static void resolvePrefabFoldervoid resolvePrefabFolder(@Nonnull Path var0, @Nonnull String var1, @Nonnull final Consumer<Path> var2)
abstract resolvePrefabFolder resolvePrefabFolder(var0, var1, var2)
public void resolvePrefabsvoid resolvePrefabs(@Nonnull String var1, @Nonnull Consumer<Path> var2)
static void resolvePrefabsvoid resolvePrefabs(@Nonnull Path var0, @Nonnull String var1, @Nonnull Consumer<Path> var2)
abstract resolvePrefabs resolvePrefabs(this.rootFolder, var1, var2)
public FileVisitResult visitFilepublic FileVisitResult visitFile(@Nonnull Path var1, BasicFileAttributes var2x)
public FileVisitResult visitFileFailedpublic FileVisitResult visitFileFailed(@Nonnull Path var1, @Nonnull IOException var2x)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.prefab.selection.buffer;

class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import java.io.File;
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.NoSuchFileException;
class="kw">import java.nio.file.NotDirectoryException;
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.function.Consumer;
class="kw">import java.util.regex.Matcher;
class="kw">import javax.annotation.Nonnull;

class="kw">public class PrefabLoader {
   class="kw">private class="kw">static class="kw">final char JSON_FILEPATH_SEPARATOR = '.';
   class="kw">private class="kw">final Path rootFolder;

   class="kw">public PrefabLoader(Path var1) {
      this.rootFolder = var1;
   }

   class="kw">public Path getRootFolder() {
      class="kw">return this.rootFolder;
   }

   class="kw">public void resolvePrefabs(@Nonnull String var1, @Nonnull Consumer<Path> var2) class="kw">throws IOException {
      resolvePrefabs(this.rootFolder, var1, var2);
   }

   class="kw">public class="kw">static void resolvePrefabs(@Nonnull Path var0, @Nonnull String var1, @Nonnull Consumer<Path> var2) class="kw">throws IOException {
      if (var1.endsWith(".*")) {
         resolvePrefabFolder(var0, var1, var2);
      } else {
         String var3 = var1.replace('.', File.separatorChar);

         for (String var7 : new String[]{".lpf", ".prefab.json"}) {
            Path var8 = var0.resolve(var3 + var7);
            if (!PathUtil.isChildOf(var0, var8)) {
               throw new IllegalArgumentException("Invalid prefab name: " + var1);
            }

            if (Files.exists(var8)) {
               var2.accept(var8);
               class="kw">return;
            }
         }
      }
   }

   class="kw">public class="kw">static void resolvePrefabFolder(@Nonnull Path var0, @Nonnull String var1, @Nonnull class="kw">final Consumer<Path> var2) class="kw">throws IOException {
      String var3 = var1.substring(0, var1.length() - 2);
      Path var4 = var0.resolve(var3.replace('.', File.separatorChar));
      if (!PathUtil.isChildOf(var0, var4)) {
         throw new IllegalArgumentException("Invalid prefab name: " + var1);
      }

      if (Files.exists(var4)) {
         if (!Files.isDirectory(var4)) {
            throw new NotDirectoryException(var4.toString());
         }

         Files.walkFileTree(
            var4,
            FileUtil.DEFAULT_WALK_TREE_OPTIONS_SET,
            Integer.MAX_VALUE,
            new SimpleFileVisitor<Path>() {
               @Nonnull
               class="kw">public FileVisitResult visitFile(@Nonnull Path var1, BasicFileAttributes var2x) {
                  String var3 = var1.getFileName().toString();
                  Matcher var4 = PrefabBufferUtil.FILE_SUFFIX_PATTERN.matcher(var3);
                  if (var4.find()) {
                     String var5 = var4.replaceAll("");
                     var2.accept(var1.resolveSibling(var5));
                  }

                  class="kw">return FileVisitResult.CONTINUE;
               }

               @Nonnull
               class="kw">public FileVisitResult visitFileFailed(@Nonnull Path var1, @Nonnull IOException var2x) class="kw">throws IOException {
                  class="kw">return !(var2x class="kw">instanceof NoSuchFileException) && !(var2x class="kw">instanceof AccessDeniedException)
                     ? super.visitFileFailed(var1, var2x)
                     : FileVisitResult.CONTINUE;
               }
            }
         );
      }
   }

   @Nonnull
   class="kw">public class="kw">static String resolveRelativeJsonPath(@Nonnull String var0, @Nonnull Path var1, @Nonnull Path var2) {
      if (!var0.endsWith(".*")) {
         class="kw">return var0;
      }

      String var3 = var2.relativize(var1).toString();
      int var4 = var0.equals(".*") ? 0 : var0.length() - 1;
      int var5 = getFilepathLengthNoExtension(var3);
      if (var5 < var4) {
         throw new IllegalArgumentException(String.format("Prefab key '%s' is longer than its filepath '%s'", var0, var3));
      }

      char[] var6 = new char[var5 - var4];
      var3.getChars(var4, var5, var6, 0);

      for (int var7 = 0; var7 < var6.length; var7++) {
         if (var6[var7] == File.separatorChar) {
            var6[var7] = '.';
         }
      }

      class="kw">return new String(var6);
   }

   class="kw">private class="kw">static int getFilepathLengthNoExtension(@Nonnull String var0) {
      int var1 = 0;
      if (var0.endsWith(".prefab.json.lpf")) {
         var1 = ".prefab.json.lpf".length();
      } else if (var0.endsWith(".prefab.json")) {
         var1 = ".prefab.json".length();
      } else if (var0.endsWith(".lpf")) {
         var1 = ".lpf".length();
      }

      class="kw">return var0.length() - var1;
   }
}