Constants interface

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

Файл: com/hypixel/hytale/server/worldgen/loader/biome/BiomeMaskJsonLoader.java

Поля (6)

МодификаторыТипИмя
String BIOME_TYPE_ANY_DISPLAY_NAME
String ERROR_PARSE_RULE
int NULL_BIOME_ID
char TYPE_MARKER
String WILDCARD_BIOME_NAME
char ZONE_MARKER

Исходный код

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

class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.procedurallib.condition.ConstantIntCondition;
class="kw">import com.hypixel.hytale.procedurallib.condition.IIntCondition;
class="kw">import com.hypixel.hytale.procedurallib.json.JsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.SeedString;
class="kw">import com.hypixel.hytale.server.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.BiomeFileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.FileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.ZoneFileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.FileMaskCache;
class="kw">import com.hypixel.hytale.server.worldgen.util.condition.IntConditionBuilder;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BiomeMaskJsonLoader class="kw">extends JsonLoader<SeedStringResource, IIntCondition> {
   class="kw">private class="kw">final ZoneFileContext zoneContext;
   @Nullable
   class="kw">private String fileName = null;

   class="kw">public BiomeMaskJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3, String var4, ZoneFileContext var5) {
      super(var1.append(".BiomeMask-" + var4), var2, var3);
      this.zoneContext = var5;
   }

   @Nullable
   class="kw">public IIntCondition load() {
      FileMaskCache var1 = this.seed.get().getBiomeMaskRegistry();
      if (this.fileName != null) {
         IIntCondition var2 = var1.getIfPresentFileMask(this.fileName);
         if (var2 != null) {
            class="kw">return var2;
         }
      }

      IIntCondition var3 = this.loadMask();
      if (this.fileName != null) {
         var1.putFileMask(this.fileName, var3);
      }

      class="kw">return var3;
   }

   class="kw">protected IIntCondition loadMask() {
      IIntCondition var1 = ConstantIntCondition.DEFAULT_TRUE;
      if (this.json.isJsonArray()) {
         IntConditionBuilder var2 = new IntConditionBuilder(IntOpenHashSet::new, -1);
         JsonArray var3 = this.json.getAsJsonArray();

         for (int var4 = 0; var4 < var3.size(); var4++) {
            JsonElement var5 = var3.get(var4);
            String var6 = var5.getAsString();
            this.parseRule(var6, var2);
         }

         var1 = var2.buildOrDefault(ConstantIntCondition.DEFAULT_TRUE);
      }

      class="kw">return var1;
   }

   class="kw">protected void parseRule(@Nonnull String var1, @Nonnull IntConditionBuilder var2) {
      int var3 = var1.indexOf(46);
      int var4 = var1.indexOf(35);
      ZoneFileContext var5 = parseZone(var1, var3, this.zoneContext);
      String var6 = parseBiomeName(var1, var3, var4);
      BiomeFileContext.Type var7 = parseBiomeType(var1, var4 + 1);
      boolean var9;
      if (var7 == null) {
         var9 = collectBiomes(var5.getTileBiomes(), var6, var2);
         var9 |= collectBiomes(var5.getCustomBiomes(), var6, var2);
      } else {
         var9 = collectBiomes(var5.getBiomes(var7), var6, var2);
      }

      if (!var9) {
         throw new Error(
            String.format("Failed to parse BiomeMask rule '%s'. Unable to find a %s called %s in %s", var1, getDisplayName(var7), var6, var5.getName())
         );
      }
   }

   @Override
   class="kw">protected JsonElement loadFileConstructor(String var1) {
      this.fileName = var1;
      class="kw">return this.seed.get().getBiomeMaskRegistry().cachedFile(var1, var1x -> super.loadFileConstructor(var1x));
   }

   class="kw">private class="kw">static boolean collectBiomes(@Nonnull FileContext.Registry<BiomeFileContext> var0, @Nonnull String var1, @Nonnull IntConditionBuilder var2) {
      if (!var1.equals("*")) {
         if (var0.contains(var1)) {
            BiomeFileContext var5 = var0.get(var1);
            var2.add(var5.getId());
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      } else {
         for (Entry var4 : var0) {
            var2.add(var4.getValue().getId());
         }

         class="kw">return true;
      }
   }

   @Nonnull
   class="kw">private class="kw">static ZoneFileContext parseZone(@Nonnull String var0, int var1, @Nonnull ZoneFileContext var2) {
      if (var1 <= 0) {
         class="kw">return var2;
      }

      String var3 = var0.substring(0, var1);
      class="kw">return var2.getParentContext().getZones().get(var3);
   }

   @Nullable
   class="kw">private class="kw">static BiomeFileContext.Type parseBiomeType(@Nonnull String var0, int var1) {
      if (var1 <= 0) {
         class="kw">return null;
      }

      String var2 = var0.substring(var1);
      class="kw">return BiomeFileContext.Type.valueOf(var2);
   }

   @Nonnull
   class="kw">private class="kw">static String parseBiomeName(@Nonnull String var0, int var1, int var2) {
      int var3 = var1 + 1;
      int var4 = var2 > var1 ? var2 : var0.length();
      class="kw">return var3 == var4 ? "*" : var0.substring(var3, var4);
   }

   @Nonnull
   class="kw">private class="kw">static String getDisplayName(@Nullable BiomeFileContext.Type var0) {
      class="kw">return var0 == null ? "Biome" : var0.getDisplayName();
   }

   class="kw">public class="kw">interface Constants {
      char ZONE_MARKER = '.';
      char TYPE_MARKER = '#';
      int NULL_BIOME_ID = -1;
      String WILDCARD_BIOME_NAME = "*";
      String BIOME_TYPE_ANY_DISPLAY_NAME = "Biome";
      String ERROR_PARSE_RULE = "Failed to parse BiomeMask rule '%s'. Unable to find a %s called %s in %s";
   }
}