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