RelativeMode enum

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

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

Поля (1)

МодификаторыТипИмя
ABSOLUTE, VOLUME_ORIGIN, HORIZONTAL_FACING, FULL_LOOK

Исходный код

Показать/скрыть
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() {
      }
   }
}