BiomeMaskJsonLoader class

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

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

extends: JsonLoader<SeedStringResource, IIntCondition>

Поля (29)

МодификаторыТипИмя
String BIOME_TYPE_ANY_DISPLAY_NAME
String ERROR_PARSE_RULE
int NULL_BIOME_ID
char TYPE_MARKER
String WILDCARD_BIOME_NAME
char ZONE_MARKER
FileMaskCache var1
IIntCondition var1
var1
IIntCondition var2
IntConditionBuilder var2
String var2
IIntCondition var3
JsonArray var3
int var3
String var3
int var3
int var4
int var4
JsonElement var5
ZoneFileContext var5
BiomeFileContext var5
String var6
String var6
BiomeFileContext.Type var7
boolean var9
var9
var9
final ZoneFileContext zoneContext

Методы (12)

МодификаторыВозвратСигнатура
static boolean collectBiomesboolean collectBiomes(@Nonnull FileContext.Registry<BiomeFileContext> var0, @Nonnull String var1, @Nonnull IntConditionBuilder var2)
for for(Entry var4 : var0)
abstract for for(int var4 = 0; var4 < var3.size()
if if(this.fileName != null)
if if(var2 != null)
if if(this.fileName != null)
if if(var7 == null)
if if(!var9)
if if(var1 <= 0)
if if(var1 <= 0)
protected IIntCondition loadMaskIIntCondition loadMask()
protected void parseRulevoid parseRule(@Nonnull String var1, @Nonnull IntConditionBuilder var2)

Исходный код

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