Constants interface

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

Файл: com/hypixel/hytale/server/worldgen/loader/zone/ZonePatternProviderJsonLoader.java

Поля (6)

МодификаторыТипИмя
String ERROR_NO_MAPPING
String ERROR_UNMAPPED_COLOR
String KEY_GRID_GENERATOR
String KEY_MASK_MAPPING
String KEY_UNIQUE_ZONES
int UNIQUE_ZONE_CANDIDATE_POS_LIMIT

Исходный код

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

class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.procedurallib.json.JsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.PointGeneratorJsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.SeedString;
class="kw">import com.hypixel.hytale.procedurallib.logic.point.IPointGenerator;
class="kw">import com.hypixel.hytale.server.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.MaskProvider;
class="kw">import com.hypixel.hytale.server.worldgen.climate.ClimateColor;
class="kw">import com.hypixel.hytale.server.worldgen.climate.ClimateMaskProvider;
class="kw">import com.hypixel.hytale.server.worldgen.climate.ClimateType;
class="kw">import com.hypixel.hytale.server.worldgen.zone.Zone;
class="kw">import com.hypixel.hytale.server.worldgen.zone.ZoneColorMapping;
class="kw">import com.hypixel.hytale.server.worldgen.zone.ZonePatternProvider;
class="kw">import java.nio.file.Path;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ZonePatternProviderJsonLoader class="kw">extends JsonLoader<SeedStringResource, ZonePatternProvider> {
   class="kw">protected class="kw">final MaskProvider maskProvider;
   class="kw">protected Zone[] zones;
   class="kw">protected Map<String, Zone> zoneLookup = Map.of();

   class="kw">public ZonePatternProviderJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3, MaskProvider var4) {
      super(var1.append(".ZonePatternGenerator"), var2, var3);
      this.maskProvider = var4;
   }

   class="kw">public void setZones(Zone[] var1) {
      this.zones = var1;
      this.zoneLookup = new HashMap<>();

      for (Zone var5 : var1) {
         this.zoneLookup.put(var5.name(), var5);
      }
   }

   @Nonnull
   class="kw">public ZonePatternProvider load() {
      class="kw">return new ZonePatternProvider(this.loadGridGenerator(), this.zones, this.loadUniqueZoneCandidates(), this.maskProvider, this.loadColorMapping());
   }

   @Nullable
   class="kw">protected IPointGenerator loadGridGenerator() {
      class="kw">return new PointGeneratorJsonLoader<>(this.seed, this.dataFolder, this.get("GridGenerator")).load();
   }

   @Nonnull
   class="kw">protected ZoneColorMapping loadColorMapping() {
      if (!this.has("MaskMapping")) {
         throw new IllegalArgumentException("Could not find mappings for colors in mask file. Keyword: MaskMapping");
      }

      ZoneColorMapping var1 = new ZoneColorMappingJsonLoader(this.seed, this.dataFolder, this.get("MaskMapping"), this.zoneLookup).load();
      this.ensureMaskIntegrity(var1);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public Set<String> loadZoneRequirement() {
      class="kw">return new ZoneRequirementJsonLoader(this.seed, this.dataFolder, this.json).load();
   }

   class="kw">protected void ensureMaskIntegrity(@Nonnull ZoneColorMapping var1) {
      if (this.maskProvider class="kw">instanceof ClimateMaskProvider var2) {
         for (ClimateType var6 : var2.getGraph().getParents()) {
            if (var6.children.length == 0) {
               validateMapping(var6, var6, var6.color, var1, "");
               validateMapping(var6, var6, var6.island, var1, "Island");
            } else {
               for (ClimateType var10 : var6.children) {
                  validateMapping(var6, var10, var10.color, var1, "");
                  validateMapping(var6, var10, var10.island, var1, "Island.");
               }
            }
         }
      } else {
         this.maskProvider.getFuzzyZoom().getExactZoom().getDistanceProvider().getColors().forEach(var1x -> {
            if (var1.get(var1x) == null) {
               throw new NullPointerException(Integer.toHexString(var1x));
            }
         });
      }
   }

   class="kw">protected Zone.UniqueCandidate[] loadUniqueZoneCandidates() {
      if (this.maskProvider class="kw">instanceof ClimateMaskProvider var3) {
         class="kw">return var3.getUniqueZoneCandidates(this.zoneLookup);
      } else {
         Zone.UniqueEntry[] var1 = new UniqueZoneEntryJsonLoader(this.seed, this.dataFolder, this.get("UniqueZones"), this.zoneLookup).load();
         class="kw">return this.maskProvider.generateUniqueZoneCandidates(var1, 100);
      }
   }

   class="kw">protected class="kw">static void validateMapping(@Nullable ClimateType var0, @Nonnull ClimateType var1, @Nonnull ClimateColor var2, ZoneColorMapping var3, String var4) {
      if (var3.get(var2.land) == null) {
         throw new Error(var4 + "Color is not mapped in climate type: " + ClimateType.name(var0, var1));
      }

      if (var3.get(var2.shore) == null) {
         throw new Error(var4 + "Shore is not mapped in climate type: " + ClimateType.name(var0, var1));
      }

      if (var3.get(var2.ocean) == null) {
         throw new Error(var4 + "Ocean is not mapped in climate type: " + ClimateType.name(var0, var1));
      }

      if (var3.get(var2.shallowOcean) == null) {
         throw new Error(var4 + "ShallowOcean is not mapped in climate type: " + ClimateType.name(var0, var1));
      }
   }

   class="kw">public class="kw">interface Constants {
      String KEY_GRID_GENERATOR = "GridGenerator";
      String KEY_UNIQUE_ZONES = "UniqueZones";
      String KEY_MASK_MAPPING = "MaskMapping";
      String ERROR_UNMAPPED_COLOR = "Mask image contains unmapped color! #%s";
      String ERROR_NO_MAPPING = "Could not find mappings for colors in mask file. Keyword: MaskMapping";
      int UNIQUE_ZONE_CANDIDATE_POS_LIMIT = 100;
   }
}