TeleporterInteraction class

Пакет: com.hypixel.hytale.builtin.adventure.teleporter.interaction.server

Файл: com/hypixel/hytale/builtin/adventure/teleporter/interaction/server/TeleporterInteraction.java

extends: SimpleBlockInteraction

Поля (17)

МодификаторыТипИмя
Player var10
Archetype var11
BlockSection var12
BlockType var13
String var14
BlockType var15
Vector3d var16
SpatialResource var17
List var18
TransformComponent var19
Teleport var20
ChunkStore var5
Ref var6
Ref var7
boolean var8
Teleporter var8
Ref var9

Методы (10)

МодификаторыВозвратСигнатура
if if(!var8)
if if(var7 == null)
if if(var8 == null)
if if(var12 == null)
if if(var13 == null)
if if(var15 != null)
if if(var19 == null)
if if(var20 == null)
if if(this.particle != null)
private boolean interactboolean interact(@Nonnull World var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull InteractionContext var3, @Nonnull Vector3i var4)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.teleporter.component.Teleporter;
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.validation.Validators;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.PendingTeleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.SimpleBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class TeleporterInteraction class="kw">extends SimpleBlockInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<TeleporterInteraction> CODEC = BuilderCodec.builder(
         TeleporterInteraction.class, TeleporterInteraction::new, SimpleBlockInteraction.CODEC
      )
      .appendInherited(
         new KeyedCodec<>("Particle", Codec.STRING), (var0, var1) -> var0.particle = var1, var0 -> var0.particle, (var0, var1) -> var0.particle = var1.particle
      )
      .documentation("The particle to play on the entity when teleporting.")
      .add()
      .<Double>appendInherited(
         new KeyedCodec<>("ClearOutXZ", Codec.DOUBLE),
         (var0, var1) -> var0.clearoutXZ = var1,
         var0 -> var0.clearoutXZ,
         (var0, var1) -> var0.clearoutXZ = var1.clearoutXZ
      )
      .addValidator(Validators.greaterThanOrEqual(0.0))
      .documentation("Upon reaching the warp destination, how far away one has to move on the XZ plane in order to use another Teleporter.")
      .add()
      .<Double>appendInherited(
         new KeyedCodec<>("ClearOutY", Codec.DOUBLE),
         (var0, var1) -> var0.clearoutY = var1,
         var0 -> var0.clearoutY,
         (var0, var1) -> var0.clearoutY = var1.clearoutY
      )
      .addValidator(Validators.greaterThanOrEqual(0.0))
      .documentation("Upon reaching the warp destination, how far away one has to move along the Y axis in order to use another Teleporter.")
      .add()
      .build();
   @Nullable
   class="kw">private String particle;
   class="kw">private double clearoutXZ = 1.3;
   class="kw">private double clearoutY = 2.5;

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

   @Nonnull
   @Override
   class="kw">public WaitForDataFrom getWaitForDataFrom() {
      class="kw">return WaitForDataFrom.Server;
   }

   @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
   ) {
      boolean var8 = this.interact(var1, var2, var4, var6);
      if (!var8) {
         var4.getState().state = InteractionState.Failed;
      }
   }

   class="kw">private boolean interact(@Nonnull World var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull InteractionContext var3, @Nonnull Vector3i var4) {
      ChunkStore var5 = var1.getChunkStore();
      Ref var6 = var5.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
      if (var6 != null && var6.isValid()) {
         Ref var7 = BlockModule.getBlockEntity(var5.getStore(), var6, var4.x, var4.y, var4.z);
         if (var7 == null) {
            class="kw">return false;
         }

         Teleporter var8 = var5.getStore().getComponent(var7, Teleporter.getComponentType());
         if (var8 == null) {
            class="kw">return false;
         }

         Ref var9 = var3.getEntity();
         Player var10 = var2.getComponent(var9, Player.getComponentType());
         if (var10 != null && var10.isWaitingForClientReady()) {
            class="kw">return false;
         }

         Archetype var11 = var2.getArchetype(var9);
         if (var11.contains(Teleport.getComponentType()) || var11.contains(PendingTeleport.getComponentType())) {
            class="kw">return false;
         }

         if (var11.contains(UsedTeleporter.getComponentType())) {
            class="kw">return false;
         }

         BlockSection var12 = var5.getStore().getComponent(var6, BlockSection.getComponentType());
         if (var12 == null) {
            class="kw">return false;
         }

         BlockType var13 = BlockType.getAssetMap().getAsset(var12.get(var4.x, var4.y, var4.z));
         if (var13 == null) {
            class="kw">return false;
         }

         if (!var8.isValid()) {
            String var14 = var13.getStateForBlock(var13);
            if (!"class="kw">default".equals(var14)) {
               BlockType var15 = var13.getBlockForState("class="kw">default");
               if (var15 != null) {
                  BlockOperations.setBlockInteractionState(var5, var6, var4.x, var4.y, var4.z, var15, "class="kw">default", true);
               }
            }
         }

         TransformComponent var19 = var2.getComponent(var9, TransformComponent.getComponentType());
         if (var19 == null) {
            class="kw">return false;
         }

         Teleport var20 = var8.toTeleport(var19.getPosition(), var19.getRotation(), var4);
         if (var20 == null) {
            class="kw">return false;
         }

         var2.addComponent(var9, Teleport.getComponentType(), var20);
         var2.addComponent(
            var9, UsedTeleporter.getComponentType(), new UsedTeleporter(var8.getWorldUuid(), var20.getPosition(), this.clearoutXZ, this.clearoutY)
         );
         if (this.particle != null) {
            Vector3d var16 = var19.getPosition();
            SpatialResource var17 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
            List var18 = SpatialResource.getThreadLocalReferenceList();
            var17.getSpatialStructure().collect(var16, 75.0, var18);
            ParticleUtil.spawnParticleEffect(this.particle, var16, var18, var2);
         }

         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   @Override
   class="kw">protected void simulateInteractWithBlock(
      @Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
   ) {
      if (var2.getServerState() != null) {
         var2.getState().state = var2.getServerState().state;
      }
   }
}