SetVelocityEffect class

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

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

extends: TriggerEffect

Поля (14)

МодификаторыТипИмя
ABSOLUTE, VOLUME_ORIGIN, HORIZONTAL_FACING, FULL_LOOK
Store var1
Ref var2
SetVelocityEffect.RelativeMode var2
Ref var2
SetVelocityEffect var3
Store var3
Rotation3fc var3
HeadRotation var3
Velocity var4
Vector3d var4
TransformComponent var4
Vector3d var5
Vector3d var5

Методы (10)

МодификаторыВозвратСигнатура
RelativeMode RelativeMode()
abstract return new Vector3dreturn new Vector3d(this.velocity)
if if(this.velocity != null)
if if(var4 != null)
if if(var5 != null)
if if(this.additive)
if if(this.relativeMode == SetVelocityEffect.RelativeMode.ABSOLUTE && this.velocity != null)
if if(var2 == SetVelocityEffect.RelativeMode.ABSOLUTE)
if if(var3 == null)
if if(var3 != null)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.triggervolumes.YawRotation;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
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.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.ChangeVelocityType;
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.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class SetVelocityEffect class="kw">extends TriggerEffect {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SetVelocityEffect> CODEC = BuilderCodec.builder(SetVelocityEffect.class, SetVelocityEffect::new, BASE_CODEC)
      .append(new KeyedCodec<>("Velocity", Vector3dUtil.CODEC), (var0, var1) -> var0.velocity = var1, var0 -> var0.velocity)
      .add()
      .append(new KeyedCodec<>("Additive", Codec.BOOLEAN, false), (var0, var1) -> var0.additive = var1, var0 -> var0.additive)
      .add()
      .append(
         new KeyedCodec<>("RelativeMode", new EnumCodec<>(SetVelocityEffect.RelativeMode.class), false),
         (var0, var1) -> var0.relativeMode = var1,
         var0 -> var0.relativeMode
      )
      .add()
      .build();
   class="kw">private Vector3d velocity = new Vector3d(0.0, 0.0, 0.0);
   class="kw">private boolean additive = false;
   @Nonnull
   class="kw">private SetVelocityEffect.RelativeMode relativeMode = SetVelocityEffect.RelativeMode.ABSOLUTE;

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

   @Nonnull
   class="kw">public class="kw">static SetVelocityEffect create(@Nonnull TriggerEventType var0, @Nonnull Vector3d var1, boolean var2) {
      SetVelocityEffect var3 = new SetVelocityEffect();
      var3.setEventType(var0);
      var3.velocity = var1;
      var3.additive = var2;
      class="kw">return var3;
   }

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      if (this.velocity != null) {
         Ref var2 = var1.getEntityRef();
         Store var3 = var1.getStore();
         Velocity var4 = var3.getComponent(var2, Velocity.getComponentType());
         if (var4 != null) {
            Vector3d var5 = this.resolveVelocity(var1);
            if (var5 != null) {
               if (this.additive) {
                  var4.addInstruction(var5, null, ChangeVelocityType.Add);
               } else {
                  var4.addInstruction(var5, null, ChangeVelocityType.Set);
               }
            }
         }
      }
   }

   @Override
   class="kw">public void rotateInPlace(float var1, @Nonnull Vector3d var2) {
      if (this.relativeMode == SetVelocityEffect.RelativeMode.ABSOLUTE && this.velocity != null) {
         YawRotation.rotate(this.velocity, var1);
      }
   }

   @Nullable
   class="kw">private Vector3d resolveVelocity(@Nonnull TriggerContext var1) {
      SetVelocityEffect.RelativeMode var2 = this.relativeMode != null ? this.relativeMode : SetVelocityEffect.RelativeMode.ABSOLUTE;
      if (var2 == SetVelocityEffect.RelativeMode.ABSOLUTE) {
         class="kw">return new Vector3d(this.velocity);
      } else if (var2 == SetVelocityEffect.RelativeMode.VOLUME_ORIGIN) {
         Vector3d var5 = var1.getActorPosition();
         class="kw">return var5 == null ? null : Rotation3f.lookAt(var1.getVolume().getPosition(), var5).transform(new Vector3d(this.velocity));
      } else {
         Rotation3fc var3 = getLookRotation(var1);
         if (var3 == null) {
            class="kw">return null;
         } else if (var2 == SetVelocityEffect.RelativeMode.HORIZONTAL_FACING) {
            Vector3d var4 = new Rotation3f(0.0F, var3.yaw(), 0.0F).transform(new Vector3d(this.velocity.x, 0.0, this.velocity.z));
            var4.y = this.velocity.y;
            class="kw">return var4;
         } else {
            class="kw">return var3.transform(new Vector3d(this.velocity));
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static Rotation3fc getLookRotation(@Nonnull TriggerContext var0) {
      Store var1 = var0.getStore();
      Ref var2 = var0.getEntityRef();
      HeadRotation var3 = var1.getComponent(var2, HeadRotation.getComponentType());
      if (var3 != null) {
         class="kw">return var3.getRotation();
      }

      TransformComponent var4 = var1.getComponent(var2, TransformComponent.getComponentType());
      class="kw">return var4 != null ? var4.getRotation() : null;
   }

   class="kw">public enum RelativeMode {
      ABSOLUTE,
      VOLUME_ORIGIN,
      HORIZONTAL_FACING,
      FULL_LOOK;

      RelativeMode() {
      }
   }
}