NeighbourDirection enum

Пакет: com.hypixel.hytale.builtin.adventure.worldlocationcondition

Файл: com/hypixel/hytale/builtin/adventure/worldlocationcondition/NeighbourBlockTagsLocationCondition.java

Поля (1)

МодификаторыТипИмя
ABOVE, BELOW, SIDEWAYS

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
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.validation.Validators;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.range.IntRange;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.tagpattern.config.TagPattern;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldlocationcondition.WorldLocationCondition;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class NeighbourBlockTagsLocationCondition class="kw">extends WorldLocationCondition {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<NeighbourBlockTagsLocationCondition> CODEC = BuilderCodec.builder(
         NeighbourBlockTagsLocationCondition.class, NeighbourBlockTagsLocationCondition::new, WorldLocationCondition.BASE_CODEC
      )
      .append(new KeyedCodec<>("TagPattern", Codec.STRING), (var0, var1) -> var0.tagPatternId = var1, var0 -> var0.tagPatternId)
      .documentation("A TagPattern can be used if the block at the chosen location needs to fulfill specific conditions.")
      .addValidator(Validators.nonNull())
      .add()
      .<NeighbourBlockTagsLocationCondition.NeighbourDirection>append(
         new KeyedCodec<>("NeighbourBlock", new EnumCodec<>(NeighbourBlockTagsLocationCondition.NeighbourDirection.class)),
         (var0, var1) -> var0.neighbourDirection = var1,
         var0 -> var0.neighbourDirection
      )
      .documentation("Defines which block has to be checked related to original location. Possible values: Above, Below, Sideways.")
      .addValidator(Validators.nonNull())
      .add()
      .<IntRange>append(new KeyedCodec<>("Support", IntRange.CODEC), (var0, var1) -> var0.support = var1, var0 -> var0.support)
      .documentation("Additional field used if NeighbourBlock is set to Sideways.")
      .add()
      .build();
   class="kw">protected String tagPatternId;
   class="kw">protected NeighbourBlockTagsLocationCondition.NeighbourDirection neighbourDirection;
   class="kw">protected IntRange support = new IntRange(1, 4);

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

   @Override
   class="kw">public boolean test(@Nonnull World var1, int var2, int var3, int var4) {
      if (var3 <= 0) {
         class="kw">return false;
      }

      long var5 = ChunkUtil.indexChunkFromBlock(var2, var4);
      WorldChunk var7 = var1.getNonTickingChunk(var5);
      if (var7 == null) {
         class="kw">return false;
      }

      if (this.neighbourDirection == NeighbourBlockTagsLocationCondition.NeighbourDirection.SIDEWAYS) {
         int var9 = 0;
         if (this.checkBlockHasTag(var2 - 1, var3, var4, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2 - 1, var4)))) {
            var9++;
         }

         if (this.checkBlockHasTag(var2 + 1, var3, var4, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2 + 1, var4)))) {
            var9++;
         }

         if (this.checkBlockHasTag(var2, var3, var4 - 1, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2, var4 - 1)))) {
            var9++;
         }

         if (this.checkBlockHasTag(var2, var3, var4 + 1, var1.getNonTickingChunk(ChunkUtil.indexChunkFromBlock(var2, var4 + 1)))) {
            var9++;
         }

         class="kw">return this.support.includes(var9);
      } else {
         int var8 = class="kw">switch (this.neighbourDirection) {
            case ABOVE -> var3 + 1;
            case BELOW -> var3 - 1;
            case SIDEWAYS -> var3;
         };
         class="kw">return this.checkBlockHasTag(var2, var8, var4, var7);
      }
   }

   class="kw">private boolean checkBlockHasTag(int var1, int var2, int var3, @Nullable WorldChunk var4) {
      if (var4 == null) {
         class="kw">return false;
      }

      int var5 = var4.getBlock(var1, var2, var3);
      TagPattern var6 = TagPattern.getAssetMap().getAsset(this.tagPatternId);
      if (var6 != null) {
         BlockType var7 = BlockType.getAssetMap().getAsset(var5);
         if (var7 == null) {
            class="kw">return false;
         }

         AssetExtraInfo.Data var8 = var7.getData();
         class="kw">return var8 == null ? false : var6.test(var8.getTags());
      } else {
         HytaleLogger.getLogger().at(Level.WARNING).log("No TagPattern asset found for id: %s", this.tagPatternId);
         class="kw">return false;
      }
   }

   @Override
   class="kw">public boolean equals(@Nullable Object var1) {
      if (this == var1) {
         class="kw">return true;
      }

      if (var1 != null && this.getClass() == var1.getClass()) {
         NeighbourBlockTagsLocationCondition var2 = (NeighbourBlockTagsLocationCondition)var1;
         if (!this.tagPatternId.equals(var2.tagPatternId)) {
            class="kw">return false;
         } else if (this.neighbourDirection != var2.neighbourDirection) {
            class="kw">return false;
         } else {
            class="kw">return this.support != null ? this.support.equals(var2.support) : var2.support == null;
         }
      } else {
         class="kw">return false;
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = this.tagPatternId.hashCode();
      var1 = 31 * var1 + this.neighbourDirection.hashCode();
      class="kw">return 31 * var1 + (this.support != null ? this.support.hashCode() : 0);
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "NeighbourBlockTagsLocationCondition{tagPatternId='"
         + this.tagPatternId
         + "', neighbourDirection="
         + this.neighbourDirection
         + ", support="
         + this.support
         + "} "
         + super.toString();
   }

   class="kw">protected enum NeighbourDirection {
      ABOVE,
      BELOW,
      SIDEWAYS;

      NeighbourDirection() {
      }
   }
}