SensorDroppedItem class

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

Файл: com/hypixel/hytale/server/npc/corecomponents/items/SensorDroppedItem.java

extends: SensorBase

Поля (11)

МодификаторыТипИмя
final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE
Attitude var10
String[] var3
TransformComponent var4
Vector3d var5
HeadRotation var6
TransformComponent var6
Ref var7
Vector3d var7
ItemComponent var8
ItemStack var9

Методы (4)

МодификаторыВозвратСигнатура
protected boolean filterItemboolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3)
if if(var7 == null)
if if(this.viewCone > 0.0F)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.server.core.asset.type.attitude.Attitude;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
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.items.builders.BuilderSensorDroppedItem;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.PositionCache;
class="kw">import com.hypixel.hytale.server.npc.role.support.WorldSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.InventoryHelper;
class="kw">import com.hypixel.hytale.server.npc.util.NPCPhysicsMath;
class="kw">import java.util.EnumSet;
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 SensorDroppedItem class="kw">extends SensorBase {
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
   @Nullable
   class="kw">protected class="kw">final List<String> items;
   @Nonnull
   class="kw">protected class="kw">final EnumSet<Attitude> attitudes;
   class="kw">protected class="kw">final double range;
   class="kw">protected class="kw">final float viewCone;
   class="kw">protected class="kw">final boolean hasLineOfSight;
   class="kw">protected float heading;
   class="kw">protected class="kw">final EntityPositionProvider positionProvider = new EntityPositionProvider();

   class="kw">public SensorDroppedItem(@Nonnull BuilderSensorDroppedItem var1, @Nonnull BuilderSupport var2) {
      super(var1);
      String[] var3 = var1.getItems(var2);
      this.items = var3 != null ? List.of(var3) : null;
      this.attitudes = var1.getAttitudes(var2);
      this.range = var1.getRange(var2);
      this.viewCone = var1.getViewSectorRadians(var2);
      this.hasLineOfSight = var1.getHasLineOfSight(var2);
   }

   @Override
   class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
      var1.getPositionCache().requireDroppedItemDistance(this.range);
   }

   @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)) {
         this.positionProvider.clear();
         class="kw">return false;
      } else {
         HeadRotation var6 = var5.getComponent(var1, HeadRotation.getComponentType());
         assert var6 != null;
         this.heading = var6.getRotation().yaw();
         Ref var7 = var2.getPositionCache()
            .getClosestDroppedItemInRange(var1, 0.0, this.range, (var1x, var2x, var3x) -> var1x.filterItem(var1, var2x, var3x), this, var5);
         if (var7 == null) {
            this.positionProvider.clear();
            class="kw">return false;
         } else {
            this.positionProvider.setTarget(var7, var5);
            class="kw">return true;
         }
      }
   }

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

   class="kw">protected boolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      if (!var2.isValid()) {
         class="kw">return false;
      }

      if (this.viewCone > 0.0F) {
         TransformComponent var4 = var3.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
         assert var4 != null;
         Vector3d var5 = var4.getPosition();
         TransformComponent var6 = var3.getComponent(var2, TRANSFORM_COMPONENT_TYPE);
         assert var6 != null;
         Vector3d var7 = var6.getPosition();
         if (!NPCPhysicsMath.inViewSector(var5.x(), var5.z(), this.heading, this.viewCone, var7.x(), var7.z())) {
            class="kw">return false;
         }
      }

      if (this.hasLineOfSight && !PositionCache.get(var1, var3).hasLineOfSight(var1, var2, var3)) {
         class="kw">return false;
      }

      if (this.items == null && this.attitudes.isEmpty()) {
         class="kw">return true;
      }

      ItemComponent var8 = var3.getComponent(var2, ItemComponent.getComponentType());
      assert var8 != null;
      ItemStack var9 = var8.getItemStack();
      if (InventoryHelper.matchesItem(this.items, var9)) {
         class="kw">return true;
      }

      Attitude var10 = WorldSupport.get(var1, var3).getItemAttitude(var9);
      class="kw">return var10 != null && this.attitudes.contains(var10);
   }
}