Constants interface

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

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

Поля (6)

МодификаторыТипИмя
String ERROR_BLOCK_INVALID
String ERROR_FAIL_SPECIFIC
String KEY_BLOCK
String KEY_DEFAULT
String KEY_RULE
String KEY_SPECIFIC

Исходный код

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