DeployableTrapConfig class

Пакет: com.hypixel.hytale.builtin.deployables.config

Файл: com/hypixel/hytale/builtin/deployables/config/DeployableTrapConfig.java

extends: DeployableAoeConfig

Поля (17)

МодификаторыТипИмя
break
break
break
Ref var10
float var11
Ref var12
DespawnComponent var3
Instant var3
Instant var3
WorldTimeResource var4
Instant var4
DespawnComponent var4
float var5
TransformComponent var7
Vector3d var8
var var8
World var9

Методы (10)

МодификаторыВозвратСигнатура
public void acceptpublic void accept(@Nonnull Ref<EntityStore> var1x)
if if(var7 != null)
if if(var11 >= this.endRadius)
if if(var1x != var3)
if if(var5 >= this.fuzeDuration)
protected boolean isLiveboolean isLive(@Nonnull Store<EntityStore> var1, @Nonnull DeployableComponent var2)
protected void onTriggeredvoid onTriggered(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2)
abstract playAnimation playAnimation(var5, var10, this, "Grow")
abstract playAnimation playAnimation(var5, var10, this, "Looping")
switch switch(this.shape)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.deployables.component.DeployableComponent;
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.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.modules.entity.DespawnComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageCause;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
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.core.util.TargetUtil;
class="kw">import java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import java.util.function.Consumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class DeployableTrapConfig class="kw">extends DeployableAoeConfig {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<DeployableTrapConfig> CODEC = BuilderCodec.builder(
         DeployableTrapConfig.class, DeployableTrapConfig::new, DeployableAoeConfig.CODEC
      )
      .appendInherited(
         new KeyedCodec<>("FuzeDuration", Codec.FLOAT),
         (var0, var1) -> var0.fuzeDuration = var1,
         var0 -> var0.fuzeDuration,
         (var0, var1) -> var0.fuzeDuration = var1.fuzeDuration
      )
      .documentation("The time it will take for the trap to become active")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("ActiveDuration", Codec.FLOAT),
         (var0, var1) -> var0.activeDuration = var1,
         var0 -> var0.activeDuration,
         (var0, var1) -> var0.activeDuration = var1.activeDuration
      )
      .documentation("The time the trap will stay alive after getting triggered")
      .add()
      .<Boolean>appendInherited(
         new KeyedCodec<>("DestroyOnTriggered", Codec.BOOLEAN),
         (var0, var1) -> var0.destroyOnTriggered = var1,
         var0 -> var0.destroyOnTriggered,
         (var0, var1) -> var0.destroyOnTriggered = var1.destroyOnTriggered
      )
      .documentation("Whether the trap will disappear when it's triggered by a players")
      .add()
      .build();
   class="kw">protected float fuzeDuration = 0.0F;
   class="kw">protected float activeDuration = 1.0F;
   class="kw">protected boolean destroyOnTriggered = false;

   class="kw">protected DeployableTrapConfig() {
   }

   @Override
   class="kw">public void tick(
      @Nonnull DeployableComponent var1,
      float var2,
      int var3,
      @Nonnull ArchetypeChunk<EntityStore> var4,
      @Nonnull Store<EntityStore> var5,
      @Nonnull CommandBuffer<EntityStore> var6
   ) {
      TransformComponent var7 = var4.getComponent(var3, TransformComponent.getComponentType());
      if (var7 != null) {
         Vector3d var8 = var7.getPosition();
         World var9 = var5.getExternalData().getWorld();
         Ref var10 = var4.getReferenceTo(var3);
         if (!var1.getOwner().isValid()) {
            var9.execute(() -> {
               if (var10.isValid()) {
                  DespawnComponent var3 = var5.ensureAndGetComponent(var10, DespawnComponent.getComponentType());
                  WorldTimeResource var4 = var6.getResource(WorldTimeResource.getResourceType());
                  var3.setDespawn(var4.getGameTime());
               }
            });
         } else {
            float var11 = this.getRadius(var5, var1.getSpawnInstant());
            this.handleDebugGraphics(var9, var1.getDebugColor(), var8, var11 * 2.0F);
            class="kw">switch (var1.getFlag(DeployableComponent.DeployableFlag.STATE)) {
               case 0:
                  var1.setFlag(DeployableComponent.DeployableFlag.STATE, 1);
                  break;
               case 1:
                  var1.setFlag(DeployableComponent.DeployableFlag.STATE, 2);
                  playAnimation(var5, var10, this, "Grow");
                  break;
               case 2:
                  if (var11 >= this.endRadius) {
                     var1.setFlag(DeployableComponent.DeployableFlag.STATE, 3);
                     playAnimation(var5, var10, this, "Looping");
                  }
            }

            Ref var12 = var4.getReferenceTo(var3);
            var1.setTimeSinceLastAttack(var1.getTimeSinceLastAttack() + var2);
            if (var1.getTimeSinceLastAttack() > this.damageInterval && this.isLive(var5, var1)) {
               var1.setTimeSinceLastAttack(0.0F);
               this.handleDetection(var5, var6, var12, var1, var8, var11, this.getDamageCause());
            }
         }
      }
   }

   @Override
   class="kw">protected void handleDetection(
      @Nonnull class="kw">final Store<EntityStore> var1,
      @Nonnull class="kw">final CommandBuffer<EntityStore> var2,
      @Nonnull class="kw">final Ref<EntityStore> var3,
      @Nonnull class="kw">final DeployableComponent var4,
      @Nonnull Vector3d var5,
      float var6,
      @Nonnull class="kw">final DamageCause var7
   ) {
      var var8 = new Consumer<Ref<EntityStore>>() {
         class="kw">public void accept(@Nonnull Ref<EntityStore> var1x) {
            if (var1x != var3) {
               if (var1.getComponent(var1x, DeployableComponent.getComponentType()) == null) {
                  if (DeployableTrapConfig.this.canAttackEntity(var1x, var4, var1)) {
                     DeployableTrapConfig.this.attackTarget(var1x, var4.getOwner(), var7, var2);
                     if (DeployableTrapConfig.this.destroyOnTriggered && var4.getFlag(DeployableComponent.DeployableFlag.TRIGGERED) == 0) {
                        DeployableTrapConfig.this.onTriggered(var1, var3);
                        var4.setFlag(DeployableComponent.DeployableFlag.TRIGGERED, 1);
                     }

                     DeployableTrapConfig.this.applyEffectToTarget(var1, var1x);
                  }
               }
            }
         }
      };
      class="kw">switch (this.shape) {
         case Sphere:
            for (Ref var14 : TargetUtil.getAllEntitiesInSphere(var5, var6, var1)) {
               var8.accept(var14);
            }
            break;
         case Cylinder:
            for (Ref var11 : TargetUtil.getAllEntitiesInCylinder(var5, var6, this.height, var1)) {
               var8.accept(var11);
            }
      }
   }

   class="kw">protected boolean isLive(@Nonnull Store<EntityStore> var1, @Nonnull DeployableComponent var2) {
      if (var2.getFlag(DeployableComponent.DeployableFlag.LIVE) == 1) {
         class="kw">return true;
      } else if (this.fuzeDuration == 0.0F) {
         var2.setFlag(DeployableComponent.DeployableFlag.LIVE, 1);
         class="kw">return true;
      } else {
         Instant var3 = var1.getResource(TimeResource.getResourceType()).getNow();
         Instant var4 = var2.getSpawnInstant();
         float var5 = (float)Duration.between(var4, var3).toMillis() / 1000.0F;
         if (var5 >= this.fuzeDuration) {
            var2.setFlag(DeployableComponent.DeployableFlag.LIVE, 1);
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }
   }

   class="kw">protected void onTriggered(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      Instant var3 = var1.getResource(TimeResource.getResourceType()).getNow();
      DespawnComponent var4 = var1.getComponent(var2, DespawnComponent.getComponentType());
      var4.setDespawn(var3.plus((long)this.activeDuration, ChronoUnit.SECONDS));
   }

   @Override
   class="kw">public String toString() {
      class="kw">return "DeployableTrapConfig{}" + super.toString();
   }
}