BlockPlacementMaskJsonLoader class

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

Файл: com/hypixel/hytale/server/worldgen/loader/prefab/BlockPlacementMaskJsonLoader.java

extends: JsonLoader<SeedStringResource, BlockMaskCondition>

Поля (40)

МодификаторыТипИмя
String ERROR_BLOCK_INVALID
String ERROR_FAIL_SPECIFIC
String KEY_BLOCK
String KEY_DEFAULT
String KEY_RULE
String KEY_SPECIFIC
private String fileName
BlockPlacementMaskRegistry var1
ResolvedBlockArray var10
JsonObject var12
boolean var13
var13
String var14
ResolvedBlockArray var14
ObjectIterator var15
String var16
int var17
JsonArray var18
BlockMaskCondition var2
BlockMaskCondition.MaskEntry[] var2
BlockMaskCondition.Mask var20
var20
var20
var20
BlockMaskCondition var21
Long2ObjectMap var3
var3
int var3
BlockTypeAssetMap var4
int var4
JsonArray var5
JsonObject var7
String var7
var7
JsonElement var8
boolean var8
var8
ResolvedBlockArray var9
int var9
var9

Методы (9)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Unknown key! " + var16)
for for(JsonElement var6 : var1)
abstract for for(int var6 = 0; var6 < var5.size()
if if(this.fileName != null)
if if(var2 != null)
if if(var17 == Integer.MIN_VALUE)
if if(this.fileName != null)
if if(var4 < var2.length)
public BlockMaskCondition loadBlockMaskCondition load()

Исходный код

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

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.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.ResolvedBlockArrayJsonLoader;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.ResolvedVariantsBlockArrayLoader;
class="kw">import com.hypixel.hytale.server.worldgen.util.BlockFluidEntry;
class="kw">import com.hypixel.hytale.server.worldgen.util.ResolvedBlockArray;
class="kw">import com.hypixel.hytale.server.worldgen.util.condition.BlockMaskCondition;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.nio.file.Path;
class="kw">import javax.annotation.Nonnull;

class="kw">public class BlockPlacementMaskJsonLoader class="kw">extends JsonLoader<SeedStringResource, BlockMaskCondition> {
   class="kw">private String fileName;

   class="kw">public BlockPlacementMaskJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3) {
      super(var1.append(".BlockMaskCondition"), var2, var3);
   }

   class="kw">public BlockMaskCondition load() {
      BlockPlacementMaskRegistry var1 = this.seed.get().getBlockMaskRegistry();
      if (this.fileName != null) {
         BlockMaskCondition var2 = var1.getIfPresentFileMask(this.fileName);
         if (var2 != null) {
            class="kw">return var2;
         }
      }

      Long2ObjectMap var3 = Long2ObjectMaps.emptyMap();
      BlockMaskCondition.Mask var20;
      if (this.json != null && !this.json.isJsonNull()) {
         if (this.has("Default")) {
            var20 = new BlockMaskCondition.Mask(this.loadEntries(this.get("Default").getAsJsonArray()));
         } else {
            var20 = BlockMaskCondition.DEFAULT_MASK;
         }

         if (this.has("Specific")) {
            BlockTypeAssetMap var4 = BlockType.getAssetMap();
            var3 = new Long2ObjectOpenHashMap();
            JsonArray var5 = this.get("Specific").getAsJsonArray();

            for (int var6 = 0; var6 < var5.size(); var6++) {
               try {
                  JsonObject var7 = var5.get(var6).getAsJsonObject();
                  JsonElement var8 = var7.get("Block");
                  ResolvedBlockArray var9 = new ResolvedBlockArrayJsonLoader(this.seed, this.dataFolder, var8).load();

                  for (BlockFluidEntry var13 : var9.getEntries()) {
                     String var14 = var4.getAsset(var13.blockId()).getId();
                     ObjectIterator var15 = var4.getSubKeys(var14).iterator();

                     while (var15.hasNext()) {
                        String var16 = (String)var15.next();
                        int var17 = var4.getIndex(var16);
                        if (var17 == Integer.MIN_VALUE) {
                           throw new IllegalArgumentException("Unknown key! " + var16);
                        }

                        JsonArray var18 = var7.getAsJsonArray("Rule");
                        var3.put(MathUtil.packLong(var17, var13.fluidId()), new BlockMaskCondition.Mask(this.loadEntries(var18)));
                     }
                  }
               } catch (Throwable var19) {
                  throw new Error(String.format("Error while reading specific block mask #%s!", var6), var19);
               }
            }
         }
      } else {
         var20 = BlockMaskCondition.DEFAULT_MASK;
      }

      BlockMaskCondition var21 = var1.retainOrAllocateMask(var20, var3);
      if (this.fileName != null) {
         var1.putFileMask(this.fileName, var21);
      }

      class="kw">return var21;
   }

   @Nonnull
   class="kw">protected BlockMaskCondition.MaskEntry[] loadEntries(@Nonnull JsonArray var1) {
      BlockMaskCondition.MaskEntry[] var2 = new BlockMaskCondition.MaskEntry[var1.size()];
      int var3 = 0;
      int var4 = var2.length;

      for (JsonElement var6 : var1) {
         if (var6.isJsonObject()) {
            JsonObject var12 = var6.getAsJsonObject();
            boolean var13 = true;
            if (var12.has("Replace")) {
               var13 = var12.get("Replace").getAsBoolean();
            }

            ResolvedBlockArray var14 = ResolvedVariantsBlockArrayLoader.loadSingleBlock(var12);
            var2[var3++] = this.seed.get().getBlockMaskRegistry().retainOrAllocateEntry(var14, var13);
         } else {
            String var7 = var6.getAsString();
            boolean var8 = true;
            int var9 = 0;
            if (var7.charAt(0) == '!') {
               var8 = false;
               var9 = 1;
            }

            if (var7.length() == var9 + 1 && var7.charAt(var9) == '*') {
               if (var4 < var2.length) {
                  System.arraycopy(var2, var4, var2, var4 - 1, var2.length - var4);
               }

               var2[var2.length - 1] = var8 ? BlockMaskCondition.MaskEntry.WILDCARD_TRUE : BlockMaskCondition.MaskEntry.WILDCARD_FALSE;
               var4--;
            } else {
               var7 = var7.substring(var9);
               ResolvedBlockArray var10 = ResolvedVariantsBlockArrayLoader.loadSingleBlock(var7);
               var2[var3++] = this.seed.get().getBlockMaskRegistry().retainOrAllocateEntry(var10, var8);
            }
         }
      }

      class="kw">return var2;
   }

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

   class="kw">public class="kw">interface Constants {
      String KEY_DEFAULT = "Default";
      String KEY_SPECIFIC = "Specific";
      String KEY_BLOCK = "Block";
      String KEY_RULE = "Rule";
      String ERROR_FAIL_SPECIFIC = "Error while reading specific block mask #%s!";
      String ERROR_BLOCK_INVALID = "Failed to resolve block \"%s\"";
   }
}