MatchBy enum

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

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

Поля (1)

МодификаторыТипИмя
BLOCK_ID, TAG

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
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 javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class CompanionBlockSpawnerRecipe class="kw">implements JsonAssetWithMap<String, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> {
   class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, CompanionBlockSpawnerRecipe> CODEC = AssetBuilderCodec.<String, CompanionBlockSpawnerRecipe>builder(
         CompanionBlockSpawnerRecipe.class,
         CompanionBlockSpawnerRecipe::new,
         Codec.STRING,
         (var0, var1) -> var0.id = var1,
         var0 -> var0.id,
         (var0, var1) -> var0.data = var1,
         var0 -> var0.data
      )
      .documentation(
         "A configuration that spawns a companion NPC when a spawner block and all of its required surrounding blocks are present within a radius. Requirement blocks are claimed exclusively (two spawners can't share one). While the setup holds, the referenced spawn marker keeps the companion alive (re-spawning it on death); breaking the setup despawns it."
      )
      .<String>appendInherited(
         new KeyedCodec<>("SpawnerBlockTypeKey", Codec.STRING),
         (var0, var1) -> var0.spawnerBlockTypeKey = var1,
         var0 -> var0.spawnerBlockTypeKey,
         (var0, var1) -> var0.spawnerBlockTypeKey = var1.spawnerBlockTypeKey
      )
      .documentation("The block type key of the spawner block that hosts the companion.")
      .addValidator(Validators.nonEmptyString())
      .addValidator(BlockType.VALIDATOR_CACHE.getValidator())
      .add()
      .<Double>appendInherited(
         new KeyedCodec<>("Radius", Codec.DOUBLE), (var0, var1) -> var0.radius = var1, var0 -> var0.radius, (var0, var1) -> var0.radius = var1.radius
      )
      .documentation("The radius (in blocks) around the spawner within which the required blocks are searched for.")
      .addValidator(Validators.greaterThan(0.0))
      .add()
      .<CompanionBlockSpawnerRecipe.RequiredBlock[]>appendInherited(
         new KeyedCodec<>("RequiredBlocks", new ArrayCodec<>(CompanionBlockSpawnerRecipe.RequiredBlock.CODEC, CompanionBlockSpawnerRecipe.RequiredBlock[]::new)),
         (var0, var1) -> var0.requiredBlocks = var1,
         var0 -> var0.requiredBlocks,
         (var0, var1) -> var0.requiredBlocks = var1.requiredBlocks
      )
      .documentation("The requirement blocks and their counts that must be present within the radius for the companion to spawn.")
      .addValidator(Validators.nonNull())
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("SpawnMarker", Codec.STRING),
         (var0, var1) -> var0.spawnMarker = var1,
         var0 -> var0.spawnMarker,
         (var0, var1) -> var0.spawnMarker = var1.spawnMarker
      )
      .documentation(
         "The id of the spawn marker (NPC/Spawn/Markers) that defines the companion NPC. While conditions hold the spawner block keeps this marker alive; the marker spawns/respawns the companion and despawns it when removed."
      )
      .addValidator(Validators.nonEmptyString())
      .addValidator(SpawnMarker.VALIDATOR_CACHE.getValidator())
      .add()
      .build();
   class="kw">private class="kw">static AssetStore<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> ASSET_STORE;
   class="kw">private AssetExtraInfo.Data data;
   class="kw">protected String id;
   class="kw">protected String spawnerBlockTypeKey;
   class="kw">protected double radius = 1.0;
   class="kw">protected CompanionBlockSpawnerRecipe.RequiredBlock[] requiredBlocks = CompanionBlockSpawnerRecipe.RequiredBlock.EMPTY_ARRAY;
   class="kw">protected String spawnMarker;

   class="kw">public class="kw">static AssetStore<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> getAssetStore() {
      if (ASSET_STORE == null) {
         ASSET_STORE = AssetRegistry.getAssetStore(CompanionBlockSpawnerRecipe.class);
      }

      class="kw">return ASSET_STORE;
   }

   class="kw">public class="kw">static DefaultAssetMap<String, CompanionBlockSpawnerRecipe> getAssetMap() {
      class="kw">return (DefaultAssetMap<String, CompanionBlockSpawnerRecipe>)getAssetStore().getAssetMap();
   }

   class="kw">protected CompanionBlockSpawnerRecipe() {
   }

   class="kw">public String getId() {
      class="kw">return this.id;
   }

   class="kw">public String getSpawnerBlockTypeKey() {
      class="kw">return this.spawnerBlockTypeKey;
   }

   class="kw">public double getRadius() {
      class="kw">return this.radius;
   }

   @Nonnull
   class="kw">public CompanionBlockSpawnerRecipe.RequiredBlock[] getRequiredBlocks() {
      class="kw">return this.requiredBlocks;
   }

   class="kw">public String getSpawnMarker() {
      class="kw">return this.spawnMarker;
   }

   class="kw">public class="kw">static class RequiredBlock {
      class="kw">public class="kw">static class="kw">final CompanionBlockSpawnerRecipe.RequiredBlock[] EMPTY_ARRAY = new CompanionBlockSpawnerRecipe.RequiredBlock[0];
      class="kw">public class="kw">static class="kw">final BuilderCodec<CompanionBlockSpawnerRecipe.RequiredBlock> CODEC = BuilderCodec.builder(
            CompanionBlockSpawnerRecipe.RequiredBlock.class, CompanionBlockSpawnerRecipe.RequiredBlock::new
         )
         .documentation(
            "A required block - how it is matched (MatchBy) and the value to match (Value) - plus the minimum count of it within the recipe radius."
         )
         .<CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy>append(
            new KeyedCodec<>("MatchBy", new EnumCodec<>(CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy.class)),
            (var0, var1) -> var0.matchBy = var1,
            var0 -> var0.matchBy
         )
         .documentation("How Value is interpreted: BlockId for an exact block type key, or Tag for a block tag.")
         .addValidator(Validators.nonNull())
         .add()
         .<String>append(new KeyedCodec<>("Value", Codec.STRING), (var0, var1) -> var0.value = var1, var0 -> var0.value)
         .documentation("The exact block type key (MatchBy=BlockId) or block tag such as \"Bed\" / \"Family=Crude\" (MatchBy=Tag) that satisfies this entry.")
         .add()
         .<Integer>append(new KeyedCodec<>("Count", Codec.INTEGER), (var0, var1) -> var0.count = var1, var0 -> var0.count)
         .documentation("The minimum number of matching blocks required within the radius.")
         .addValidator(Validators.greaterThan(0))
         .add()
         .build();
      class="kw">protected CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy matchBy;
      class="kw">protected String value;
      class="kw">protected int count = 1;

      class="kw">protected RequiredBlock() {
      }

      @Nullable
      class="kw">public CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy getMatchBy() {
         class="kw">return this.matchBy;
      }

      @Nullable
      class="kw">public String getValue() {
         class="kw">return this.value;
      }

      class="kw">public int getCount() {
         class="kw">return this.count;
      }

      class="kw">public enum MatchBy {
         BLOCK_ID,
         TAG;

         MatchBy() {
         }
      }
   }
}