CompanionBlockSpawnerRecipeCompendium class

Пакет: com.hypixel.hytale.builtin.companionblockspawner

Файл: com/hypixel/hytale/builtin/companionblockspawner/CompanionBlockSpawnerRecipeCompendium.java

Поля (11)

МодификаторыТипИмя
break
BlockTypeAssetMap var1
int var1
Set var1
String var10
Set var11
CompanionBlockSpawnerRecipe.RequiredBlock[] var2
String var3
List var4
List var4
CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy var9

Методы (11)

МодификаторыВозвратСигнатура
for for(CompanionBlockSpawnerRecipe var3 : var1)
for for(Set var6 : var4)
for for(CompanionBlockSpawnerRecipe.RequiredBlock var8 : var2)
public double getMaxRadiusdouble getMaxRadius()
if if(var4 != null)
if if(var2.length == 0)
public boolean isEmptyboolean isEmpty()
boolean isIngredientboolean isIngredient(@Nonnull String var1)
boolean isParticipatingboolean isParticipating(@Nonnull String var1)
void rebuildvoid rebuild(@Nonnull Collection<CompanionBlockSpawnerRecipe> var1)
switch switch(var9)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.companionblockspawner;

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.builtin.companionblockspawner.config.CompanionBlockSpawnerRecipe;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Collection;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">final class CompanionBlockSpawnerRecipeCompendium {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">private class="kw">final Object2ObjectMap<String, List<CompanionBlockSpawnerRecipe>> recipeBySpawnerBlock = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Object2ObjectMap<String, List<Set<String>>> entryKeysByRecipe = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Set<String> ingredientKeys = new ObjectOpenHashSet();
   class="kw">private double maxRadius;

   class="kw">public CompanionBlockSpawnerRecipeCompendium() {
   }

   void rebuild(@Nonnull Collection<CompanionBlockSpawnerRecipe> var1) {
      this.recipeBySpawnerBlock.clear();
      this.entryKeysByRecipe.clear();
      this.ingredientKeys.clear();
      this.maxRadius = 0.0;

      for (CompanionBlockSpawnerRecipe var3 : var1) {
         List var4 = expandAndValidate(var3);
         if (var4 != null) {
            ((List)this.recipeBySpawnerBlock.computeIfAbsent(var3.getSpawnerBlockTypeKey(), var0 -> new ArrayList(1))).add(var3);
            this.entryKeysByRecipe.put(var3.getId(), var4);

            for (Set var6 : var4) {
               this.ingredientKeys.addAll(var6);
            }

            this.maxRadius = Math.max(this.maxRadius, var3.getRadius());
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static List<Set<String>> expandAndValidate(@Nonnull CompanionBlockSpawnerRecipe var0) {
      BlockTypeAssetMap var1 = BlockType.getAssetMap();
      if (var0.getSpawnerBlockTypeKey() != null && var1.getIndex(var0.getSpawnerBlockTypeKey()) != Integer.MIN_VALUE) {
         CompanionBlockSpawnerRecipe.RequiredBlock[] var2 = var0.getRequiredBlocks();
         if (var2.length == 0) {
            LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s defines no required blocks - skipping", var0.getId());
            class="kw">return null;
         }

         String var3 = var0.getSpawnMarker();
         if (var3 != null && !var3.isEmpty() && SpawnMarker.getAssetMap().getAsset(var3) != null) {
            List var4 = new ArrayList<>(var2.length);

            for (CompanionBlockSpawnerRecipe.RequiredBlock var8 : var2) {
               CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy var9 = var8.getMatchBy();
               String var10 = var8.getValue();
               if (var9 == null || var10 == null || var10.isEmpty()) {
                  LOGGER.at(Level.SEVERE)
                     .log("Companion block spawner recipe %s: each RequiredBlocks entry must define MatchBy and Value - skipping", var0.getId());
                  class="kw">return null;
               }

               class="kw">switch (var9) {
                  case BLOCK_ID:
                     if (var1.getIndex(var10) == Integer.MIN_VALUE) {
                        LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s references unknown required block '%s' - skipping", var0.getId(), var10);
                        class="kw">return null;
                     }

                     var4.add(Set.of(var10));
                     break;
                  case TAG:
                     Set var11 = expandTag(var10);
                     if (var11.isEmpty()) {
                        LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s: tag '%s' matches no block types - skipping", var0.getId(), var10);
                        class="kw">return null;
                     }

                     var4.add(var11);
               }
            }

            class="kw">return var4;
         } else {
            LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s references unknown spawn marker '%s' - skipping", var0.getId(), var3);
            class="kw">return null;
         }
      } else {
         LOGGER.at(Level.SEVERE)
            .log("Companion block spawner recipe %s references unknown spawner block '%s' - skipping", var0.getId(), var0.getSpawnerBlockTypeKey());
         class="kw">return null;
      }
   }

   @Nonnull
   class="kw">private class="kw">static Set<String> expandTag(@Nonnull String var0) {
      int var1 = AssetRegistry.getTagIndex(var0);
      class="kw">return (Set<String>)(var1 == Integer.MIN_VALUE ? Set.of() : new ObjectOpenHashSet(BlockType.getAssetMap().getKeysForTag(var1)));
   }

   @Nullable
   List<CompanionBlockSpawnerRecipe> getRecipesForSpawner(@Nonnull String var1) {
      class="kw">return (List<CompanionBlockSpawnerRecipe>)this.recipeBySpawnerBlock.get(var1);
   }

   @Nullable
   class="kw">public List<Set<String>> getEntryKeySets(@Nonnull CompanionBlockSpawnerRecipe var1) {
      class="kw">return (List<Set<String>>)this.entryKeysByRecipe.get(var1.getId());
   }

   boolean isIngredient(@Nonnull String var1) {
      class="kw">return this.ingredientKeys.contains(var1);
   }

   boolean isParticipating(@Nonnull String var1) {
      class="kw">return this.recipeBySpawnerBlock.containsKey(var1) || this.ingredientKeys.contains(var1);
   }

   @Nonnull
   Set<String> getParticipatingKeys() {
      Set var1 = new ObjectOpenHashSet(this.ingredientKeys);
      var1.addAll(this.recipeBySpawnerBlock.keySet());
      class="kw">return var1;
   }

   class="kw">public boolean isEmpty() {
      class="kw">return this.recipeBySpawnerBlock.isEmpty();
   }

   class="kw">public double getMaxRadius() {
      class="kw">return this.maxRadius;
   }
}