Constants interface
Пакет: com.hypixel.hytale.procedurallib.json
Файл: com/hypixel/hytale/procedurallib/json/JsonLoader.java
Поля (2)
| Модификаторы | Тип | Имя |
|---|---|---|
|
char |
JSON_FILEPATH_SEPARATOR |
|
String |
KEY_FILE |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.procedurallib.json;
class="kw">import com.google.errorprone.annotations.FormatMethod;
class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.google.gson.JsonObject;
class="kw">import com.hypixel.hytale.procedurallib.file.FileIO;
class="kw">import java.io.File;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Objects;
class="kw">import java.util.function.Function;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">abstract class JsonLoader<K class="kw">extends SeedResource, T> class="kw">extends Loader<K, T> {
class="kw">public class="kw">static class="kw">final JsonResourceLoader<JsonElement> JSON_LOADER = new JsonResourceLoader<>(
JsonElement.class, var0 -> !var0.isJsonNull(), Function.identity()
);
class="kw">public class="kw">static class="kw">final JsonResourceLoader<JsonArray> JSON_ARR_LOADER = new JsonResourceLoader(
(Class<T>)JsonArray.class, JsonElement::isJsonArray, JsonElement::getAsJsonArray
);
class="kw">public class="kw">static class="kw">final JsonResourceLoader<JsonObject> JSON_OBJ_LOADER = new JsonResourceLoader(
(Class<T>)JsonObject.class, JsonElement::isJsonObject, JsonElement::getAsJsonObject
);
class="kw">protected class="kw">static class="kw">final JsonObject EMPTY_OBJECT = new JsonObject();
class="kw">protected class="kw">static class="kw">final JsonArray EMPTY_ARRAY = new JsonArray();
@Nullable
class="kw">protected class="kw">final JsonElement json;
class="kw">public JsonLoader(SeedString<K> var1, Path var2, @Nullable JsonElement var3) {
super(var1, var2);
if (var3 != null && var3.isJsonObject() && var3.getAsJsonObject().has("File")) {
this.json = this.loadFileConstructor(var3.getAsJsonObject().get("File").getAsString());
} else {
this.json = var3;
}
}
class="kw">public boolean has(String var1) {
class="kw">return this.json != null && this.json.isJsonObject() && this.json.getAsJsonObject().has(var1);
}
@Nonnull
class="kw">public JsonElement getOrLoad(@Nonnull JsonElement var1) {
if (var1.isJsonObject()) {
JsonObject var2 = var1.getAsJsonObject();
JsonElement var3 = var2.get("File");
if (var3 != null && var3.isJsonPrimitive() && var3.getAsJsonPrimitive().isString()) {
JsonElement var4 = this.loadFileElem(var3.getAsString());
var1 = Objects.requireNonNullElse(var4, var1);
}
}
class="kw">return var1;
}
@Nullable
class="kw">public JsonElement get(String var1) {
if (this.json != null && this.json.isJsonObject()) {
JsonElement var2 = this.json.getAsJsonObject().get(var1);
if (var2 != null && var2.isJsonObject()) {
var2 = this.getOrLoad(var2);
}
class="kw">return var2;
} else {
class="kw">return null;
}
}
@Nullable
class="kw">public JsonElement getRaw(String var1) {
class="kw">return this.json != null && this.json.isJsonObject() ? this.json.getAsJsonObject().get(var1) : null;
}
class="kw">protected JsonElement loadFile(@Nonnull String var1) {
Path var2 = this.dataFolder.resolve(var1.replace('.', File.separatorChar) + ".json");
if (!var2.normalize().startsWith(this.dataFolder.normalize())) {
throw new IllegalArgumentException("Invalid file reference: " + var1);
}
try {
class="kw">return FileIO.load(var2, JSON_LOADER);
} catch (Throwable var4) {
throw new Error("Error while loading file reference." + var2.toString(), var4);
}
}
class="kw">protected JsonElement loadFileElem(@Nonnull String var1) {
class="kw">return this.loadFile(var1);
}
class="kw">protected JsonElement loadFileConstructor(@Nonnull String var1) {
class="kw">return this.loadFile(var1);
}
@Nonnull
class="kw">protected JsonObject mustGetObject(@Nonnull String var1, @Nullable JsonObject var2) {
class="kw">return this.mustGet(var1, var2, JsonObject.class, JsonElement::isJsonObject, JsonElement::getAsJsonObject);
}
@Nonnull
class="kw">protected JsonArray mustGetArray(@Nonnull String var1, @Nullable JsonArray var2) {
class="kw">return this.mustGet(var1, var2, JsonArray.class, JsonElement::isJsonArray, JsonElement::getAsJsonArray);
}
@Nonnull
class="kw">protected String mustGetString(@Nonnull String var1, @Nullable String var2) {
class="kw">return this.mustGet(var1, var2, String.class, JsonLoader::isString, JsonElement::getAsString);
}
@Nonnull
class="kw">protected Boolean mustGetBool(@Nonnull String var1, @Nullable Boolean var2) {
class="kw">return this.mustGet(var1, var2, Boolean.class, JsonLoader::isBoolean, JsonElement::getAsBoolean);
}
@Nonnull
class="kw">protected Number mustGetNumber(@Nonnull String var1, @Nullable Number var2) {
class="kw">return this.mustGet(var1, var2, Number.class, JsonLoader::isNumber, JsonElement::getAsNumber);
}
class="kw">protected <V> V mustGet(
@Nonnull String var1, @Nullable V var2, @Nonnull Class<V> var3, @Nonnull Predicate<JsonElement> var4, @Nonnull Function<JsonElement, V> var5
) {
class="kw">return mustGet(var1, this.get(var1), var2, var3, var4, var5);
}
class="kw">protected class="kw">static <V> V mustGet(
@Nonnull String var0,
@Nullable JsonElement var1,
@Nullable V var2,
@Nonnull Class<V> var3,
@Nonnull Predicate<JsonElement> var4,
@Nonnull Function<JsonElement, V> var5
) {
if (var1 == null) {
if (var2 != null) {
class="kw">return var2;
} else {
throw error("Missing property '%s'", var0);
}
} else if (!var4.test(var1)) {
throw error("Property '%s' must be of type '%s'", var0, var3.getSimpleName());
} else {
class="kw">return var5.apply(var1);
}
}
@FormatMethod
class="kw">protected class="kw">static Error error(String var0, Object... var1) {
class="kw">return new Error(String.format(var0, var1));
}
@FormatMethod
class="kw">protected class="kw">static Error error(Throwable var0, String var1, Object... var2) {
class="kw">return new Error(String.format(var1, var2), var0);
}
class="kw">private class="kw">static boolean isString(JsonElement var0) {
class="kw">return var0.isJsonPrimitive() && var0.getAsJsonPrimitive().isString();
}
class="kw">protected class="kw">static boolean isNumber(JsonElement var0) {
class="kw">return var0.isJsonPrimitive() && var0.getAsJsonPrimitive().isNumber();
}
class="kw">protected class="kw">static boolean isBoolean(JsonElement var0) {
class="kw">return var0.isJsonPrimitive() && var0.getAsJsonPrimitive().isBoolean();
}
class="kw">public class="kw">interface Constants {
char JSON_FILEPATH_SEPARATOR = '.';
String KEY_FILE = "File";
}
}