Direction enum

Пакет: com.hypixel.hytale.server.npc.corecomponents.world

Файл: com/hypixel/hytale/server/npc/corecomponents/world/SensorCanPlace.java

implements: Supplier<String>

Поля (1)

МодификаторыТипИмя
private final Vector3dc direction

Методы (3)

МодификаторыВозвратСигнатура
abstract Right Right(Vector3dUtil.RIGHT)
public Vector3d applypublic Vector3d apply(@Nonnull Vector3d var1, float var2)
public String getpublic String get()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.world;

class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.world.builders.BuilderSensorCanPlace;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.CachedPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.BlockPlacementHelper;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class SensorCanPlace class="kw">extends SensorBase {
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, BoundingBox> BOUNDING_BOX_COMPONENT_TYPE = BoundingBox.getComponentType();
   class="kw">protected class="kw">final SensorCanPlace.Direction direction;
   class="kw">protected class="kw">final SensorCanPlace.Offset offset;
   class="kw">protected class="kw">final double retryDelay;
   class="kw">protected class="kw">final boolean allowEmptyMaterials;
   class="kw">protected class="kw">final Vector3d transform = new Vector3d();
   class="kw">protected class="kw">final CachedPositionProvider positionProvider = new CachedPositionProvider();
   class="kw">protected class="kw">final Vector3d cachedPosition = new Vector3d();
   class="kw">protected boolean cachedResult;
   class="kw">protected double delay;

   class="kw">public SensorCanPlace(@Nonnull BuilderSensorCanPlace var1, @Nonnull BuilderSupport var2) {
      super(var1);
      this.direction = var1.getDirection(var2);
      this.offset = var1.getOffset(var2);
      this.retryDelay = var1.getRetryDelay(var2);
      this.allowEmptyMaterials = var1.isAllowEmptyMaterials(var2);
   }

   @Override
   class="kw">public boolean matches(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
      if (super.matches(var1, var2, var3, var5) && var2.getWorldSupport().getBlockToPlace() != null) {
         BlockType var6 = BlockType.getAssetMap().getAsset(var2.getWorldSupport().getBlockToPlace());
         if (var6 == null) {
            this.positionProvider.clear();
            class="kw">return false;
         }

         TransformComponent var7 = var5.getComponent(var1, TransformComponent.getComponentType());
         assert var7 != null;
         World var8 = var5.getExternalData().getWorld();
         float var9 = var7.getRotation().yaw();
         float var10 = (float) (Math.PI / 4);
         var9 = Math.round(var9 / var10) * var10;
         this.direction.apply(this.transform, var9);
         BoundingBox var11 = var5.getComponent(var1, BOUNDING_BOX_COMPONENT_TYPE);
         if (var11 != null) {
            Box var12 = var11.getBoundingBox();
            Box var13 = BlockBoundingBoxes.getAssetMap().getAsset(var6.getHitboxTypeIndex()).get(0).getBoundingBox();
            boolean var14 = this.transform.x < 0.0;
            boolean var15 = this.transform.z < 0.0;
            boolean var16 = this.transform.x - 1.0E-5 > 0.0;
            boolean var17 = this.transform.z - 1.0E-5 > 0.0;
            double var18 = var14 ? var12.min.x : var12.max.x;
            double var20 = var15 ? var12.min.z : var12.max.z;
            double var22 = var14 ? var13.max.x : var13.min.x;
            double var24 = var15 ? var13.max.z : var13.min.z;
            double var26 = var14 ? -this.transform.x : this.transform.x;
            double var28 = var15 ? -this.transform.z : this.transform.z;
            double var30 = Math.sqrt(var18 * var18 * var26 + var20 * var20 * var28) + Math.sqrt(var22 * var22 * var26 + var24 * var24 * var28);
            this.transform.normalize(var30);
            this.transform.add(var16 ? 1.0 : 0.0, 0.0, var17 ? 1.0 : 0.0);
         }

         this.offset.apply(this.transform);
         Vector3d var33 = var7.getPosition();
         this.transform.add(var33.x(), var33.y(), var33.z()).floor();
         int var34 = (int)this.transform.x();
         int var35 = (int)this.transform.y();
         int var36 = (int)this.transform.z();
         if (!this.cachedPosition.equals(this.transform)) {
            this.delay = 0.0;
         }

         boolean var37 = BlockPlacementHelper.canPlaceUnitBlock(var8, var6, this.allowEmptyMaterials, var34, var35, var36);
         if (var37 != this.cachedResult) {
            this.delay = 0.0;
         }

         if (!((this.delay -= var3) > 0.0)) {
            this.cachedResult = var37 && BlockPlacementHelper.canPlaceBlock(var8, var6, 0, this.allowEmptyMaterials, var34, var35, var36);
            this.cachedPosition.set(this.transform);
            this.delay = this.retryDelay;
            if (!this.cachedResult) {
               this.positionProvider.clear();
               class="kw">return false;
            } else {
               this.positionProvider.setIsFromCache(false);
               this.positionProvider.setTarget(this.transform);
               class="kw">return true;
            }
         } else if (this.cachedResult) {
            this.positionProvider.setIsFromCache(true);
            this.positionProvider.setTarget(this.transform);
            class="kw">return true;
         } else {
            this.positionProvider.clear();
            class="kw">return false;
         }
      } else {
         this.positionProvider.clear();
         class="kw">return false;
      }
   }

   @Override
   class="kw">public void clearOnce() {
      super.clearOnce();
      this.delay = 0.0;
   }

   @Override
   class="kw">public InfoProvider getSensorInfo() {
      class="kw">return this.positionProvider;
   }

   class="kw">public enum Direction class="kw">implements Supplier<String> {
      Forward(Vector3dUtil.FORWARD),
      Backward(Vector3dUtil.BACKWARD),
      Left(Vector3dUtil.LEFT),
      Right(Vector3dUtil.RIGHT);

      class="kw">private class="kw">final Vector3dc direction;

      Direction(Vector3dc nullxx) {
         this.direction = nullxx;
      }

      @Nonnull
      class="kw">public Vector3d apply(@Nonnull Vector3d var1, float var2) {
         class="kw">return var1.set(this.direction).rotateY(var2);
      }

      @Nonnull
      class="kw">public String get() {
         class="kw">return this.name();
      }
   }

   class="kw">public enum Offset class="kw">implements Supplier<String> {
      HeadPosition(Vector3dUtil.UP),
      BodyPosition(Vector3dUtil.ZERO),
      FootPosition(Vector3dUtil.DOWN);

      class="kw">private class="kw">final Vector3dc offset;

      Offset(Vector3dc nullxx) {
         this.offset = nullxx;
      }

      @Nonnull
      class="kw">public Vector3d apply(@Nonnull Vector3d var1) {
         class="kw">return var1.add(this.offset);
      }

      @Nonnull
      class="kw">public String get() {
         class="kw">return this.name();
      }
   }
}