JsonLoader class

Пакет: com.hypixel.hytale.procedurallib.json

Файл: com/hypixel/hytale/procedurallib/json/JsonLoader.java

extends: Loader<K, T>

Поля (10)

МодификаторыТипИмя
char JSON_FILEPATH_SEPARATOR
final JsonResourceLoader<JsonElement> JSON_LOADER
String KEY_FILE
var1
JsonObject var2
JsonElement var2
var2
Path var2
JsonElement var3
JsonElement var4

Методы (14)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid file reference: " + var1)
abstract throw errorthrow error("Missing property '%s'", var0)
public boolean hasboolean has(String var1)
if if(var1 == null)
if if(var2 != null)
static boolean isBooleanboolean isBoolean(JsonElement var0)
static boolean isNumberboolean isNumber(JsonElement var0)
static boolean isStringboolean isString(JsonElement var0)
protected JsonElement loadFileJsonElement loadFile(@Nonnull String var1)
protected JsonElement loadFileConstructorJsonElement loadFileConstructor(@Nonnull String var1)
protected JsonElement loadFileElemJsonElement loadFileElem(@Nonnull String var1)
protected <V> V mustGet<V> V mustGet(@Nonnull String var1, @Nullable V var2, @Nonnull Class<V> var3, @Nonnull Predicate<JsonElement> var4, @Nonnull Function<JsonElement, V> var5)
static <V> V mustGet<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)
abstract super super(var1, var2)

Исходный код

Показать/скрыть
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";
   }
}