NeighbourBlockTagsLocationCondition class

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

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

extends: WorldLocationCondition

Поля (12)

МодификаторыТипИмя
ABOVE, BELOW, SIDEWAYS
int var1
var1
NeighbourBlockTagsLocationCondition var2
long var5
int var5
TagPattern var6
WorldChunk var7
BlockType var7
int var8
AssetExtraInfo.Data var8
int var9

Методы (9)

МодификаторыВозвратСигнатура
NeighbourDirection NeighbourDirection()
private boolean checkBlockHasTagboolean checkBlockHasTag(int var1, int var2, int var3, @Nullable WorldChunk var4)
if if(var3 <= 0)
if if(var7 == null)
if if(this.neighbourDirection == NeighbourBlockTagsLocationCondition.NeighbourDirection.SIDEWAYS)
if if(var4 == null)
if if(var6 != null)
if if(var7 == null)
if if(this == var1)

Исходный код

Показать/скрыть
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() {
      }
   }
}