SensorBeacon class

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

Файл: com/hypixel/hytale/server/npc/corecomponents/entity/SensorBeacon.java

extends: SensorBase

Поля (8)

МодификаторыТипИмя
final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE
Vector3d var10
TransformComponent var11
Vector3d var12
BeaconSupport var6
Ref var7
Ref var8
TransformComponent var9

Методы (4)

МодификаторыВозвратСигнатура
if if(var6 == null)
if if(var7 == null)
if if(this.targetSlot >= 0)
abstract super super(var1)

Исходный код

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

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.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.BeaconSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.builders.BuilderSensorBeacon;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class SensorBeacon class="kw">extends SensorBase {
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
   class="kw">protected class="kw">final int messageIndex;
   class="kw">protected class="kw">final double range;
   class="kw">protected class="kw">final int targetSlot;
   class="kw">protected class="kw">final boolean consume;
   class="kw">protected class="kw">final boolean rebind;
   class="kw">private class="kw">final EntityPositionProvider positionProvider = new EntityPositionProvider();

   class="kw">public SensorBeacon(@Nonnull BuilderSensorBeacon var1, @Nonnull BuilderSupport var2) {
      super(var1);
      this.messageIndex = var1.getMessageSlot(var2);
      this.range = var1.getRange(var2);
      this.targetSlot = var1.getTargetSlot(var2);
      this.consume = var1.isConsume();
      this.rebind = var1.isRebind();
   }

   @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)) {
         class="kw">return false;
      }

      BeaconSupport var6 = var5.getComponent(var1, BeaconSupport.getComponentType());
      if (var6 == null) {
         this.positionProvider.clear();
         class="kw">return false;
      }

      if (!var6.isMessageQueued(this.messageIndex)) {
         this.positionProvider.clear();
         class="kw">return false;
      }

      Ref var7 = this.consume ? var6.pollMessage(this.messageIndex) : var6.peekMessage(this.messageIndex);
      if (var7 == null) {
         this.positionProvider.clear();
         class="kw">return false;
      }

      Ref var8 = this.positionProvider.setTarget(var7, var5);
      if (var8 != null && var8.isValid()) {
         TransformComponent var9 = var5.getComponent(var8, TRANSFORM_COMPONENT_TYPE);
         assert var9 != null;
         Vector3d var10 = var9.getPosition();
         TransformComponent var11 = var5.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
         assert var11 != null;
         Vector3d var12 = var11.getPosition();
         if (var10.distanceSquared(var12) > this.range * this.range) {
            this.positionProvider.clear();
            class="kw">return false;
         }

         if (this.targetSlot >= 0) {
            var2.getMarkedEntitySupport().setMarkedEntity(this.targetSlot, var8, this.rebind, var5);
         }

         if (var2.getDebugSupport().isDebugFlagSet(RoleDebugFlags.BeaconMessages)) {
            ((HytaleLogger.Api)NPCPlugin.get().getLogger().atInfo())
               .log("ID %d received message '%s' with target ID %d", var1.getIndex(), var6.getMessageTextForIndex(this.messageIndex), var7.getIndex());
         }

         class="kw">return true;
      } else {
         this.positionProvider.clear();
         class="kw">return false;
      }
   }

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