DefaultTintContainerEntryJsonLoader class

Пакет: com.hypixel.hytale.server.worldgen.loader.container

Файл: com/hypixel/hytale/server/worldgen/loader/container/TintContainerJsonLoader.java

extends: TintContainerJsonLoader.TintContainerEntryJsonLoader

Поля (6)

МодификаторыТипИмя
IWeightedMap var1
var1
var1
var1
WeightedMap.Builder var2
WeightedMap.Builder var3

Методы (1)

МодификаторыВозвратСигнатура
public TintContainer.DefaultTintContainerEntry loadpublic TintContainer.DefaultTintContainerEntry load()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.worldgen.loader.container;

class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.builtin.worldgen.modifier.event.ModifyEvent;
class="kw">import com.hypixel.hytale.builtin.worldgen.modifier.event.ModifyEvents;
class="kw">import com.hypixel.hytale.common.map.IWeightedMap;
class="kw">import com.hypixel.hytale.common.map.WeightedMap;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.procedurallib.condition.ICoordinateCondition;
class="kw">import com.hypixel.hytale.procedurallib.json.JsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.NoiseMaskConditionJsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.NoisePropertyJsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.SeedString;
class="kw">import com.hypixel.hytale.procedurallib.property.NoiseProperty;
class="kw">import com.hypixel.hytale.server.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.container.TintContainer;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.BiomeFileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.ColorUtil;
class="kw">import com.hypixel.hytale.server.worldgen.util.ConstantNoiseProperty;
class="kw">import com.hypixel.hytale.server.worldgen.util.ListPool;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class TintContainerJsonLoader class="kw">extends JsonLoader<SeedStringResource, TintContainer> {
   @Nonnull
   class="kw">private class="kw">final BiomeFileContext biomeContext;

   class="kw">public TintContainerJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3, @Nonnull BiomeFileContext var4) {
      super(var1.append(".TintContainer"), var2, var3);
      this.biomeContext = var4;
   }

   @Nonnull
   class="kw">public TintContainer load() {
      class="kw">return new TintContainer(this.loadDefault(), this.loadEntries());
   }

   @Nonnull
   class="kw">protected TintContainer.DefaultTintContainerEntry loadDefault() {
      JsonElement var1;
      if (this.json == null || this.json.isJsonNull() || this.json.isJsonArray()) {
         var1 = null;
      } else if (this.json.isJsonObject() && this.has("Default")) {
         var1 = this.get("Default");
      } else if (!this.json.isJsonPrimitive() && !this.json.isJsonObject()) {
         var1 = null;
      } else {
         var1 = this.json;
      }

      class="kw">return new TintContainerJsonLoader.DefaultTintContainerEntryJsonLoader(this.seed, this.dataFolder, var1).load();
   }

   @Nonnull
   class="kw">protected List<TintContainer.TintContainerEntry> loadEntries() {
      JsonArray var1 = this.mustGetArray("Entries", EMPTY_ARRAY);

      try (ListPool.Resource var2 = TintContainer.ENTRY_POOL.acquire(var1.size())) {
         for (int var3 = 0; var3 < var1.size(); var3++) {
            try {
               var2.add(
                  new TintContainerJsonLoader.TintContainerEntryJsonLoader(this.seed.append(String.format("-%s", var3)), this.dataFolder, var1.get(var3))
                     .load()
               );
            } catch (Throwable var6) {
               throw new Error(String.format("Failed to load TintContainerEntry #%s", var3), var6);
            }
         }

         ModifyEvent.SeedGenerator var8 = new ModifyEvent.SeedGenerator<>(this.seed);
         ModifyEvent.dispatch(
            ModifyEvents.BiomeTints.class,
            new ModifyEvents.BiomeTints(
               this.seed,
               this.biomeContext,
               var2,
               var2x -> new TintContainerJsonLoader.TintContainerEntryJsonLoader(var8.next(), this.dataFolder, this.loadFile(var2x)).load()
            )
         );
         class="kw">return new ObjectArrayList(var2);
      }
   }

   class="kw">public class="kw">interface Constants {
      String KEY_DEFAULT = "Default";
      String KEY_ENTRIES = "Entries";
      String KEY_COLORS = "Colors";
      String KEY_WEIGHTS = "Weights";
      String KEY_ENTRY_NOISE = "Noise";
      String KEY_NOISE_MASK = "NoiseMask";
      String ERROR_COLORS_NOT_FOUND = "Could not find colors. Keyword: Colors";
      String ERROR_WEIGHT_SIZE = "Tint weights array size does not fit color array size.";
      String ERROR_NO_VALUE_NOISE = "Could not find value noise. Keyword: Noise";
      String ERROR_LOADING_ENTRY = "Failed to load TintContainerEntry #%s";
      String SEED_INDEX_SUFFIX = "-%s";
      int DEFAULT_TINT_COLOR = 16711680;
   }

   class="kw">protected class="kw">static class DefaultTintContainerEntryJsonLoader class="kw">extends TintContainerJsonLoader.TintContainerEntryJsonLoader {
      class="kw">public DefaultTintContainerEntryJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3) {
         super(var1.append(".DefaultTintContainerEntry"), var2, var3);
      }

      @Nonnull
      class="kw">public TintContainer.DefaultTintContainerEntry load() {
         IWeightedMap var1;
         if (this.json == null || this.json.isJsonNull()) {
            WeightedMap.Builder var3 = WeightedMap.builder(ArrayUtil.EMPTY_INTEGER_ARRAY);
            var3.put(16711680, 1.0);
            var1 = var3.build();
         } else if (this.json.isJsonPrimitive()) {
            WeightedMap.Builder var2 = WeightedMap.builder(ArrayUtil.EMPTY_INTEGER_ARRAY);
            var2.put(ColorUtil.hexString(this.json.getAsString()), 1.0);
            var1 = var2.build();
         } else {
            var1 = this.loadColorMapping();
         }

         class="kw">return new TintContainer.DefaultTintContainerEntry(var1, var1.size() > 1 ? this.loadValueNoise() : ConstantNoiseProperty.DEFAULT_ZERO);
      }
   }

   class="kw">protected class="kw">static class TintContainerEntryJsonLoader class="kw">extends JsonLoader<SeedStringResource, TintContainer.TintContainerEntry> {
      class="kw">public TintContainerEntryJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3) {
         super(var1.append(".TintContainerEntry"), var2, var3);
      }

      @Nonnull
      class="kw">public TintContainer.TintContainerEntry load() {
         IWeightedMap var1 = this.loadColorMapping();
         class="kw">return new TintContainer.TintContainerEntry(
            var1, var1.size() > 1 ? this.loadValueNoise() : ConstantNoiseProperty.DEFAULT_ZERO, this.loadMapCondition()
         );
      }

      @Nonnull
      class="kw">protected IWeightedMap<Integer> loadColorMapping() {
         WeightedMap.Builder var1 = WeightedMap.builder(ArrayUtil.EMPTY_INTEGER_ARRAY);
         if (this.json == null || this.json.isJsonNull()) {
            var1.put(16711680, 1.0);
         } else if (this.json.isJsonObject()) {
            if (!this.has("Colors")) {
               throw new IllegalArgumentException("Could not find colors. Keyword: Colors");
            }

            JsonElement var2 = this.get("Colors");
            if (var2.isJsonArray()) {
               JsonArray var3 = var2.getAsJsonArray();
               JsonArray var4 = this.has("Weights") ? this.get("Weights").getAsJsonArray() : null;
               if (var4 != null && var4.size() != var3.size()) {
                  throw new IllegalArgumentException("Tint weights array size does not fit color array size.");
               }

               for (int var5 = 0; var5 < var3.size(); var5++) {
                  int var6 = ColorUtil.hexString(var3.get(var5).getAsString());
                  double var7 = var4 == null ? 1.0 : var4.get(var5).getAsDouble();
                  var1.put(var6, var7);
               }
            } else {
               int var9 = ColorUtil.hexString(var2.getAsString());
               var1.put(var9, 1.0);
            }
         } else {
            var1.put(ColorUtil.hexString(this.json.getAsString()), 1.0);
         }

         class="kw">return var1.build();
      }

      @Nullable
      class="kw">protected NoiseProperty loadValueNoise() {
         if (!this.has("Noise")) {
            throw new IllegalArgumentException("Could not find value noise. Keyword: Noise");
         } else {
            class="kw">return new NoisePropertyJsonLoader<>(this.seed, this.dataFolder, this.get("Noise")).load();
         }
      }

      @Nonnull
      class="kw">protected ICoordinateCondition loadMapCondition() {
         class="kw">return new NoiseMaskConditionJsonLoader<>(this.seed, this.dataFolder, this.get("NoiseMask")).load();
      }
   }
}