BlockTypeCondition class

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/conditions/BlockTypeCondition.java

extends: TriggerCondition

Поля (27)

МодификаторыТипИмя
EVENT, VOLUME_ORIGIN, ENTITY, WORLD_ABSOLUTE
private final Rotation rotation
int var10
RotationTuple var11
BlockTypeCondition var2
Vector3d var2
Vector3d var2
var2
String var2
var2
World var3
int var3
List var3
World var3
int var4
String var4
int var4
int var5
int var5
int var6
int var6
BlockType var7
String var7
ChunkStore var7
String var8
Ref var8
BlockChunk var9

Методы (24)

МодификаторыВозвратСигнатура
AxisRotation AxisRotation(@Nullable Rotation nullxx)
abstract DEG_270 DEG_270(Rotation.TwoSeventy)
PositionSource PositionSource()
private boolean hasOffsetboolean hasOffset()
if if(var8 == null)
if if(var2 == null)
if if(var3 == null)
if if(var7 != null && var7 != BlockType.EMPTY)
if if(this.positionSource == BlockTypeCondition.PositionSource.VOLUME_ORIGIN && this.positionOffset != null)
if if(var3 > 0 && this.rotationY != BlockTypeCondition.AxisRotation.ANY && this.rotationY.rotation != null)
if if(this.blockTypes.length == 0)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(this.rotationX == BlockTypeCondition.AxisRotation.ANY && this.rotationY == BlockTypeCondition.AxisRotation.ANY && this.rotationZ == BlockTypeCondition.AxisRotation.ANY)
if if(var2 == null)
if if(var3 == null)
if if(var9 == null)
public boolean matchespublic boolean matches(@Nonnull Rotation var1)
private boolean matchesBlockTypesboolean matchesBlockTypes(@Nonnull String var1, @Nullable BlockType var2)
private boolean matchesRotationboolean matchesRotation(@Nonnull TriggerContext var1, @Nullable Vector3d var2)
private boolean matchesStateboolean matchesState(@Nonnull BlockType var1)
private static BlockTypeCondition.AxisRotation ofprivate static BlockTypeCondition.AxisRotation of(@Nonnull Rotation var0)
return switchreturn switch(var0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.triggervolumes.YawRotation;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
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.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Arrays;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class BlockTypeCondition class="kw">extends TriggerCondition {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<BlockTypeCondition> CODEC = BuilderCodec.builder(BlockTypeCondition.class, BlockTypeCondition::new, BASE_CODEC)
      .append(
         new KeyedCodec<>("BlockType", Codec.STRING_ARRAY, false),
         (var0, var1) -> var0.blockTypes = var1 != null ? var1 : new String[0],
         var0 -> var0.blockTypes.length == 0 ? null : var0.blockTypes
      )
      .add()
      .append(
         new KeyedCodec<>("PositionSource", new EnumCodec<>(BlockTypeCondition.PositionSource.class), false),
         (var0, var1) -> var0.positionSource = var1 != null ? var1 : BlockTypeCondition.PositionSource.EVENT,
         var0 -> var0.positionSource
      )
      .add()
      .append(
         new KeyedCodec<>("PositionOffset", Vector3dUtil.CODEC, false),
         (var0, var1) -> var0.positionOffset = var1 != null ? var1 : new Vector3d(),
         var0 -> var0.hasOffset() ? var0.positionOffset : null
      )
      .add()
      .append(
         new KeyedCodec<>("RotationX", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
         (var0, var1) -> var0.rotationX = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
         var0 -> var0.rotationX == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationX
      )
      .add()
      .append(
         new KeyedCodec<>("RotationY", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
         (var0, var1) -> var0.rotationY = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
         var0 -> var0.rotationY == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationY
      )
      .add()
      .append(
         new KeyedCodec<>("RotationZ", new EnumCodec<>(BlockTypeCondition.AxisRotation.class), false),
         (var0, var1) -> var0.rotationZ = var1 != null ? var1 : BlockTypeCondition.AxisRotation.ANY,
         var0 -> var0.rotationZ == BlockTypeCondition.AxisRotation.ANY ? null : var0.rotationZ
      )
      .add()
      .append(
         new KeyedCodec<>("State", Codec.STRING, false),
         (var0, var1) -> var0.state = var1 != null ? var1 : "",
         var0 -> var0.state.isEmpty() ? null : var0.state
      )
      .add()
      .build();
   @Nonnull
   class="kw">private String[] blockTypes = new String[0];
   @Nonnull
   class="kw">private String state = "";
   @Nonnull
   class="kw">private BlockTypeCondition.AxisRotation rotationX = BlockTypeCondition.AxisRotation.ANY;
   @Nonnull
   class="kw">private BlockTypeCondition.AxisRotation rotationY = BlockTypeCondition.AxisRotation.ANY;
   @Nonnull
   class="kw">private BlockTypeCondition.AxisRotation rotationZ = BlockTypeCondition.AxisRotation.ANY;
   @Nonnull
   class="kw">private BlockTypeCondition.PositionSource positionSource = BlockTypeCondition.PositionSource.EVENT;
   @Nonnull
   class="kw">private Vector3d positionOffset = new Vector3d();

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

   @Nonnull
   class="kw">public class="kw">static BlockTypeCondition create(@Nonnull TriggerEventType var0, @Nonnull String... var1) {
      BlockTypeCondition var2 = new BlockTypeCondition();
      var2.setEventType(var0);
      var2.blockTypes = var1;
      class="kw">return var2;
   }

   @Override
   class="kw">public boolean test(@Nonnull TriggerContext var1) {
      if (this.positionSource == BlockTypeCondition.PositionSource.EVENT && !this.hasOffset() && this.state.isEmpty()) {
         String var8 = var1.getBlockId();
         if (var8 == null) {
            class="kw">return false;
         } else {
            class="kw">return !this.matchesBlockTypes(var8, null) ? false : this.matchesRotation(var1, var1.getBlockPosition());
         }
      } else {
         Vector3d var2 = this.resolvePosition(var1);
         if (var2 == null) {
            class="kw">return false;
         }

         World var3 = var1.getStore().getExternalData().getWorld();
         if (var3 == null) {
            class="kw">return false;
         }

         int var4 = MathUtil.floor(var2.x());
         int var5 = MathUtil.floor(var2.y());
         int var6 = MathUtil.floor(var2.z());
         BlockType var7 = var3.getBlockType(var4, var5, var6);
         if (var7 != null && var7 != BlockType.EMPTY) {
            if (!this.matchesBlockTypes(var7.getId(), var7)) {
               class="kw">return false;
            } else {
               class="kw">return !this.matchesState(var7) ? false : this.matchesRotation(var1, var2);
            }
         } else {
            class="kw">return false;
         }
      }
   }

   @Override
   class="kw">public void rotateInPlace(float var1, @Nonnull Vector3d var2) {
      if (this.positionSource == BlockTypeCondition.PositionSource.VOLUME_ORIGIN && this.positionOffset != null) {
         YawRotation.rotateBlockOffset(this.positionOffset, var1, var2);
      }

      int var3 = YawRotation.quarterTurns(var1);
      if (var3 > 0 && this.rotationY != BlockTypeCondition.AxisRotation.ANY && this.rotationY.rotation != null) {
         this.rotationY = BlockTypeCondition.AxisRotation.of(YawRotation.rotate(this.rotationY.rotation, var3));
      }
   }

   @Nullable
   class="kw">private Vector3d resolvePosition(@Nonnull TriggerContext var1) {
      Vector3d var2 = class="kw">switch (this.positionSource) {
         case EVENT -> var1.getBlockPosition();
         case VOLUME_ORIGIN -> new Vector3d(var1.getVolume().getPosition());
         case ENTITY -> var1.getActorPosition();
         case WORLD_ABSOLUTE -> new Vector3d();
      };
      class="kw">return var2 != null ? var2.add(this.positionOffset) : null;
   }

   class="kw">private boolean matchesBlockTypes(@Nonnull String var1, @Nullable BlockType var2) {
      if (this.blockTypes.length == 0) {
         class="kw">return true;
      }

      List var3 = Arrays.asList(this.blockTypes);
      if (var3.contains(var1)) {
         class="kw">return true;
      }

      if (var2 == null) {
         var2 = BlockType.getAssetMap().getAsset(var1);
         if (var2 == null) {
            class="kw">return false;
         }
      }

      String var4 = var2.getBlockKeyForState("class="kw">default");
      class="kw">return var4 != null && var3.contains(var4);
   }

   class="kw">private boolean matchesState(@Nonnull BlockType var1) {
      if (this.state.isEmpty()) {
         class="kw">return true;
      }

      String var2 = var1.getStateForBlock(var1);
      if (var2 == null) {
         var2 = "class="kw">default";
      }

      for (String var6 : this.state.split(",", -1)) {
         String var7 = var6.trim();
         if (!var7.isEmpty() && var7.equalsIgnoreCase(var2)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean matchesRotation(@Nonnull TriggerContext var1, @Nullable Vector3d var2) {
      if (this.rotationX == BlockTypeCondition.AxisRotation.ANY
         && this.rotationY == BlockTypeCondition.AxisRotation.ANY
         && this.rotationZ == BlockTypeCondition.AxisRotation.ANY) {
         class="kw">return true;
      }

      if (var2 == null) {
         class="kw">return false;
      }

      World var3 = var1.getStore().getExternalData().getWorld();
      if (var3 == null) {
         class="kw">return false;
      }

      int var4 = MathUtil.floor(var2.x());
      int var5 = MathUtil.floor(var2.y());
      int var6 = MathUtil.floor(var2.z());
      ChunkStore var7 = var3.getChunkStore();
      Ref var8 = var7.getChunkReference(ChunkUtil.indexChunkFromBlock(var4, var6));
      if (var8 != null && var8.isValid()) {
         BlockChunk var9 = var7.getStore().getComponent(var8, BlockChunk.getComponentType());
         if (var9 == null) {
            class="kw">return false;
         }

         int var10 = var9.getSectionAtBlockY(var5).getRotationIndex(var4, var5, var6);
         RotationTuple var11 = RotationTuple.get(var10);
         class="kw">return this.rotationX.matches(var11.pitch()) && this.rotationY.matches(var11.yaw()) && this.rotationZ.matches(var11.roll());
      } else {
         class="kw">return false;
      }
   }

   class="kw">private boolean hasOffset() {
      class="kw">return this.positionOffset.x() != 0.0 || this.positionOffset.y() != 0.0 || this.positionOffset.z() != 0.0;
   }

   class="kw">public enum AxisRotation {
      ANY(null),
      DEG_0(Rotation.None),
      DEG_90(Rotation.Ninety),
      DEG_180(Rotation.OneEighty),
      DEG_270(Rotation.TwoSeventy);

      @Nullable
      class="kw">private class="kw">final Rotation rotation;

      AxisRotation(@Nullable Rotation nullxx) {
         this.rotation = nullxx;
      }

      class="kw">public boolean matches(@Nonnull Rotation var1) {
         class="kw">return this.rotation == null || this.rotation == var1;
      }

      @Nonnull
      class="kw">private class="kw">static BlockTypeCondition.AxisRotation of(@Nonnull Rotation var0) {
         class="kw">return class="kw">switch (var0) {
            case None -> DEG_0;
            case Ninety -> DEG_90;
            case OneEighty -> DEG_180;
            case TwoSeventy -> DEG_270;
         };
      }
   }

   class="kw">public enum PositionSource {
      EVENT,
      VOLUME_ORIGIN,
      ENTITY,
      WORLD_ABSOLUTE;

      PositionSource() {
      }
   }
}