SpawnMinecartInteraction class

Пакет: com.hypixel.hytale.builtin.mounts.interactions

Файл: com/hypixel/hytale/builtin/mounts/interactions/SpawnMinecartInteraction.java

extends: SimpleBlockInteraction

Поля (60)

МодификаторыТипИмя
final BuilderCodec<SpawnMinecartInteraction> CODEC
Vector3d var10
double var10
var10
Rotation3f var11
HeadRotation var12
double var12
var12
ChunkStore var13
Store var14
double var14
long var15
double var16
Ref var17
WorldChunk var18
BlockType var19
Vector3fc var19
BlockChunk var20
Vector3fc var20
int var21
double var21
RailConfig var22
BlockBoundingBoxes.RotatedVariantBoxes var23
double var23
Model var24
ModelAsset var25
var25
double var25
double var27
double var29
double var31
double var33
var33
double var35
var35
double var37
var37
double var39
double var41
double var43
double var45
double var47
double var49
RailPoint[] var5
double var51
double var53
double var55
double var57
double var59
double var6
var6
double var61
double var63
double var65
float var67
float var68
Ref var8
double var8
var8
Holder var9

Методы (8)

МодификаторыВозвратСигнатура
static void alignToRailvoid alignToRail(@Nonnull Vector3i var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, float var3, @Nonnull RailConfig var4)
for for(int var18 = 0; var18 < var5.length - 1; var18++)
if if(var12 != null)
if if(var18 != null)
if if(var22 != null)
if if(var25 == null)
if if(var65 >= 0.0 && var65 <= 0.8F && var65 < var6)
if if(var14 * var33 + var16 * var37 < 0.0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.mounts.minecart.MinecartComponent;
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.map.EnumMapCodec;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Holder;
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.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.RailConfig;
class="kw">import com.hypixel.hytale.protocol.RailPoint;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentModel;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.Interactions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction;
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.chunk.WorldChunk;
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 java.util.Collections;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3fc;
class="kw">import org.joml.Vector3i;

class="kw">public class SpawnMinecartInteraction class="kw">extends SimpleBlockInteraction {
   class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnMinecartInteraction> CODEC = BuilderCodec.builder(
         SpawnMinecartInteraction.class, SpawnMinecartInteraction::new, SimpleBlockInteraction.CODEC
      )
      .documentation("Spawns a minecart at the target block")
      .<String>appendInherited(
         new KeyedCodec<>("Model", Codec.STRING), (var0, var1) -> var0.modelId = var1, var0 -> var0.modelId, (var0, var1) -> var0.modelId = var1.modelId
      )
      .addValidator(ModelAsset.VALIDATOR_CACHE.getValidator())
      .add()
      .<Map<InteractionType, String>>appendInherited(
         new KeyedCodec<>("CartInteractions", new EnumMapCodec<>(InteractionType.class, RootInteraction.CHILD_ASSET_CODEC)),
         (var0, var1) -> var0.cartInteractions = var1,
         var0 -> var0.cartInteractions,
         (var0, var1) -> var0.cartInteractions = var1.cartInteractions
      )
      .addValidatorLate(() -> RootInteraction.VALIDATOR_CACHE.getMapValueValidator().late())
      .add()
      .build();
   class="kw">private String modelId;
   class="kw">private Map<InteractionType, String> cartInteractions = Collections.emptyMap();

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

   @Override
   class="kw">protected void interactWithBlock(
      @Nonnull World var1,
      @Nonnull CommandBuffer<EntityStore> var2,
      @Nonnull InteractionType var3,
      @Nonnull InteractionContext var4,
      @Nullable ItemStack var5,
      @Nonnull Vector3i var6,
      @Nonnull CooldownHandler var7
   ) {
      Ref var8 = var4.getEntity();
      Holder var9 = EntityStore.REGISTRY.newHolder();
      Vector3d var10 = Vector3iUtil.toVector3d(var6);
      var10.add(0.5, 0.5, 0.5);
      Rotation3f var11 = new Rotation3f();
      HeadRotation var12 = var2.getComponent(var8, HeadRotation.getComponentType());
      if (var12 != null) {
         var11.setYaw(var12.getRotation().yaw());
      }

      ChunkStore var13 = var1.getChunkStore();
      Store var14 = var13.getStore();
      long var15 = ChunkUtil.indexChunkFromBlock(var6.x, var6.z);
      Ref var17 = var13.getChunkReference(var15);
      if (var17 != null && var17.isValid()) {
         WorldChunk var18 = var14.getComponent(var17, WorldChunk.getComponentType());
         if (var18 != null) {
            BlockType var19 = var18.getBlockType(var6);
            BlockChunk var20 = var14.getComponent(var17, BlockChunk.getComponentType());
            assert var20 != null;
            int var21 = var20.getSectionAtBlockY(var6.y).getRotationIndex(var6.x, var6.y, var6.z);
            RailConfig var22 = var19.getRailConfig(var21);
            if (var22 != null) {
               alignToRail(var6, var10, var11, var11.yaw(), var22);
            } else {
               BlockBoundingBoxes.RotatedVariantBoxes var23 = BlockBoundingBoxes.getAssetMap().getAsset(var19.getHitboxTypeIndex()).get(var21);
               var10.add(0.0, var23.getBoundingBox().max.y - 0.5, 0.0);
            }

            var9.addComponent(TransformComponent.getComponentType(), new TransformComponent(var10, var11));
            var9.ensureComponent(UUIDComponent.getComponentType());
            ModelAsset var25 = ModelAsset.getAssetMap().getAsset(this.modelId);
            if (var25 == null) {
               var25 = ModelAsset.DEBUG;
            }

            Model var24 = Model.createRandomScaleModel(var25);
            var9.addComponent(PersistentModel.getComponentType(), new PersistentModel(var24.toReference()));
            var9.addComponent(ModelComponent.getComponentType(), new ModelComponent(var24));
            var9.addComponent(BoundingBox.getComponentType(), new BoundingBox(var24.getBoundingBox()));
            var9.ensureComponent(Interactable.getComponentType());
            var9.addComponent(Interactions.getComponentType(), new Interactions(this.cartInteractions));
            var9.putComponent(MinecartComponent.getComponentType(), new MinecartComponent(var4.getHeldItem() != null ? var4.getHeldItem().getItemId() : null));
            var2.addEntity(var9, AddReason.SPAWN);
         }
      }
   }

   @Override
   class="kw">protected void simulateInteractWithBlock(
      @Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
   ) {
   }

   class="kw">private class="kw">static void alignToRail(@Nonnull Vector3i var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, float var3, @Nonnull RailConfig var4) {
      RailPoint[] var5 = var4.points;
      double var6 = Double.MAX_VALUE;
      double var8 = var1.x;
      double var10 = var1.y;
      double var12 = var1.z;
      double var14 = -TrigMathUtil.sin(var3);
      double var16 = -TrigMathUtil.cos(var3);

      for (int var18 = 0; var18 < var5.length - 1; var18++) {
         Vector3fc var19 = var5[var18].point;
         Vector3fc var20 = var5[var18 + 1].point;
         double var21 = var0.x + var19.x();
         double var23 = var0.y + var19.y();
         double var25 = var0.z + var19.z();
         double var27 = var0.x + var20.x();
         double var29 = var0.y + var20.y();
         double var31 = var0.z + var20.z();
         double var33 = var27 - var21;
         double var35 = var29 - var23;
         double var37 = var31 - var25;
         double var39 = Math.sqrt(var33 * var33 + var35 * var35 + var37 * var37);
         double var41 = 1.0 / var39;
         var33 *= var41;
         var35 *= var41;
         var37 *= var41;
         double var43 = var1.x - var21;
         double var45 = var1.y - var23;
         double var47 = var1.z - var25;
         double var49 = var33 * var43 + var35 * var45 + var37 * var47;
         double var51 = Math.min(var39, Math.max(0.0, var49));
         double var53 = var21 + var33 * var51;
         double var55 = var23 + var35 * var51;
         double var57 = var25 + var37 * var51;
         double var59 = var53 - var1.x;
         double var61 = var55 - var1.y;
         double var63 = var57 - var1.z;
         double var65 = var59 * var59 + var61 * var61 + var63 * var63;
         if (var65 >= 0.0 && var65 <= 0.8F && var65 < var6) {
            var8 = var53;
            var10 = var55;
            var12 = var57;
            var6 = var65;
            if (var14 * var33 + var16 * var37 < 0.0) {
               var33 = -var33;
               var35 = -var35;
               var37 = -var37;
            }

            float var67 = (float)(Math.atan2(var33, var37) + Math.PI);
            float var68 = (float)Math.asin(var35);
            var2.setYaw(var67);
            var2.setPitch(var68);
         }
      }

      if (!(var6 >= Double.MAX_VALUE)) {
         var1.set(var8, var10, var12);
      }
   }
}