SpawnDeployableAtLocationInteraction class

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

Файл: com/hypixel/hytale/builtin/deployables/interaction/SpawnDeployableAtLocationInteraction.java

extends: SimpleInstantInteraction

Поля (28)

МодификаторыТипИмя
break
break
break
return
return
return
long var10
Rotation3f var11
Ref var12
Store var13
BlockChunk var14
Rotation var15
Ref var16
Ref var17
TransformComponent var18
Ref var19
HeadRotation var20
Vector3d var21
CommandBuffer var4
var4
World var5
Rotation3f var6
var6
Vector3d var7
var7
var7
BlockPosition var8
ChunkStore var9

Методы (6)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Unhandled origin source")
if if(var8 == null)
if if(var14 == null)
switch switch(this.originSource)
switch switch(this.offsetRotationMode)
switch switch(this.deployableRotationMode)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.deployables.DeployablesUtils;
class="kw">import com.hypixel.hytale.builtin.deployables.config.DeployableConfig;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
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.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.OriginSource;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RelativeRotationMode;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class SpawnDeployableAtLocationInteraction class="kw">extends SimpleInstantInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnDeployableAtLocationInteraction> CODEC = BuilderCodec.builder(
         SpawnDeployableAtLocationInteraction.class, SpawnDeployableAtLocationInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Spawns a deployable at a specific location.")
      .<DeployableConfig>appendInherited(
         new KeyedCodec<>("Config", DeployableConfig.CODEC), (var0, var1) -> var0.config = var1, var0 -> var0.config, (var0, var1) -> var0.config = var1.config
      )
      .addValidator(Validators.nonNull())
      .add()
      .<Vector3d>appendInherited(
         new KeyedCodec<>("Offset", Vector3dUtil.CODEC), (var0, var1) -> var0.offset = var1, var0 -> var0.offset, (var0, var1) -> var0.offset = var1.offset
      )
      .addValidator(Validators.nonNull())
      .add()
      .<Rotation>appendInherited(
         new KeyedCodec<>("RotationYaw", Rotation.CODEC),
         (var0, var1) -> var0.rotationYaw = var1,
         var0 -> var0.rotationYaw,
         (var0, var1) -> var0.rotationYaw = var1.rotationYaw
      )
      .addValidator(Validators.nonNull())
      .add()
      .<OriginSource>appendInherited(
         new KeyedCodec<>("OriginSource", OriginSource.CODEC),
         (var0, var1) -> var0.originSource = var1,
         var0 -> var0.originSource,
         (var0, var1) -> var0.originSource = var1.originSource
      )
      .addValidator(Validators.nonNull())
      .add()
      .<RelativeRotationMode>appendInherited(
         new KeyedCodec<>("OffsetRotationMode", RelativeRotationMode.CODEC),
         (var0, var1) -> var0.offsetRotationMode = var1,
         var0 -> var0.offsetRotationMode,
         (var0, var1) -> var0.offsetRotationMode = var1.offsetRotationMode
      )
      .addValidator(Validators.nonNull())
      .add()
      .<RelativeRotationMode>appendInherited(
         new KeyedCodec<>("DeployableRotationMode", RelativeRotationMode.CODEC),
         (var0, var1) -> var0.deployableRotationMode = var1,
         var0 -> var0.deployableRotationMode,
         (var0, var1) -> var0.deployableRotationMode = var1.deployableRotationMode
      )
      .addValidator(Validators.nonNull())
      .add()
      .build();
   class="kw">private DeployableConfig config;
   @Nonnull
   class="kw">private Vector3d offset = new Vector3d();
   @Nonnull
   class="kw">private Rotation rotationYaw = Rotation.None;
   @Nonnull
   class="kw">private OriginSource originSource = OriginSource.ENTITY;
   @Nonnull
   class="kw">private RelativeRotationMode offsetRotationMode = RelativeRotationMode.NONE;
   @Nonnull
   class="kw">private RelativeRotationMode deployableRotationMode = RelativeRotationMode.NONE;

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

   @Override
   class="kw">public boolean needsRemoteSync() {
      class="kw">return false;
   }

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4;
      Rotation3f var6;
      Vector3d var7;
      var4 = var2.getCommandBuffer();
      assert var4 != null;
      World var5 = var4.getExternalData().getWorld();
      var6 = new Rotation3f(0.0F, (float)this.rotationYaw.getRadians(), 0.0F);
      label60:
      class="kw">switch (this.originSource) {
         case ENTITY:
            Ref var16 = var2.getEntity();
            TransformComponent var18 = var4.getComponent(var16, TransformComponent.getComponentType());
            assert var18 != null;
            HeadRotation var20 = var4.getComponent(var16, HeadRotation.getComponentType());
            Rotation3f var11 = var20 != null ? var20.getRotation() : var18.getRotation();
            Vector3d var21 = new Vector3d(this.offset);
            class="kw">switch (this.offsetRotationMode) {
               case NONE:
               class="kw">default:
                  break;
               case YAW:
                  var21.rotateY(var11.yaw());
                  break;
               case FULL:
                  var11.transform(var21);
            }

            var7 = new Vector3d(var18.getPosition()).add(var21);
            class="kw">switch (this.deployableRotationMode) {
               case NONE:
               class="kw">default:
                  break label60;
               case YAW:
                  var6.addYaw(var11.yaw());
                  break label60;
               case FULL:
                  var6.add(var11);
                  break label60;
            }
         case BLOCK:
            BlockPosition var8 = var2.getTargetBlock();
            if (var8 == null) {
               class="kw">return;
            }

            ChunkStore var9 = var5.getChunkStore();
            long var10 = ChunkUtil.indexChunkFromBlock(var8.x, var8.z);
            Ref var12 = var9.getChunkReference(var10);
            if (var12 == null || !var12.isValid()) {
               class="kw">return;
            }

            Store var13 = var9.getStore();
            BlockChunk var14 = var13.getComponent(var12, BlockChunk.getComponentType());
            if (var14 == null) {
               class="kw">return;
            }

            Rotation var15 = var14.getSectionAtBlockY(var8.y).getRotation(var8.x, var8.y, var8.z).yaw();
            var7 = new Vector3d();
            var15.rotateY(this.offset, var7);
            var6.addYaw((float)var15.getRadians());
            var7.add(var8.x, var8.y, var8.z);
            break;
         class="kw">default:
            throw new IllegalArgumentException("Unhandled origin source");
      }

      Ref var17 = var2.getOwningEntity();
      Ref var19 = var17 != null ? var17 : var2.getEntity();
      DeployablesUtils.spawnDeployable(var4, var4.getStore(), this.config, var19, var7, var6, "UP");
   }
}