SimpleBlockInteraction class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/SimpleBlockInteraction.java

extends: SimpleInteraction

Поля (43)

МодификаторыТипИмя
final HytaleLogger LOGGER
return
return
BlockPosition var1
BlockPosition var10
Vector3i var10
var10
var10
TransformComponent var11
BlockPosition var11
BlockPosition var12
ChunkStore var12
ChunkStore var13
Ref var13
Ref var14
BlockSection var14
BlockSection var15
int var15
int var16
BlockPosition var17
BlockPosition var18
ItemStack var19
ItemStack var2
ChunkStore var2
CommandBuffer var2
com.hypixel.hytale.protocol.SimpleBlockInteraction var2
Vector3i var20
Ref var3
World var3
BlockSection var4
ChunkStore var4
int var5
Ref var5
Ref var6
Ref var6
BlockSection var6
CommandBuffer var7
CommandBuffer var7
RotationTuple var7
World var8
World var8
InteractionSyncData var9
ItemStack var9

Методы (17)

МодификаторыВозвратСигнатура
static void computeCurrentBlockSyncDatavoid computeCurrentBlockSyncData(@Nonnull InteractionContext var0)
static boolean hasRemovedBlockContextboolean hasRemovedBlockContext(@Nonnull InteractionContext var0)
if if(var1)
if if(this.useLatestTarget)
if if(var9 == null || var9.blockPosition == null)
if if(var17 == null)
if if(var15 == null)
if if(var1)
if if(var11 == null)
if if(var10 == null)
if if(var14 == null)
if if(var4 == null)
if if(var1 != null)
if if(var6 != null)
abstract abstract void interactWithBlockvoid interactWithBlock(@Nonnull World var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nullable ItemStack var5, @Nonnull Vector3i var6, @Nonnull CooldownHandler var7)
abstract abstract void simulateInteractWithBlockvoid simulateInteractWithBlock(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5)
abstract super super(var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;

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.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockFace;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.BlockRotation;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionSyncData;
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.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.entity.EntityUtils;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
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.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.util.InteractionValidation;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class="kw">abstract class SimpleBlockInteraction class="kw">extends SimpleInteraction {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SimpleBlockInteraction> CODEC = BuilderCodec.abstractBuilder(SimpleBlockInteraction.class, SimpleInteraction.CODEC)
      .appendInherited(
         new KeyedCodec<>("UseLatestTarget", Codec.BOOLEAN),
         (var0, var1) -> var0.useLatestTarget = var1,
         var0 -> var0.useLatestTarget,
         (var0, var1) -> var0.useLatestTarget = var1.useLatestTarget
      )
      .documentation("Determines whether to use the clients latest target block position for this interaction.")
      .add()
      .build();
   class="kw">private boolean useLatestTarget;

   class="kw">public SimpleBlockInteraction(@Nonnull String var1) {
      super(var1);
   }

   class="kw">protected SimpleBlockInteraction() {
   }

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

   @Override
   class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
      if (var1) {
         Ref var6 = var4.getEntity();
         CommandBuffer var7 = var4.getCommandBuffer();
         assert var7 != null;
         World var8 = var7.getExternalData().getWorld();
         if (this.useLatestTarget) {
            InteractionSyncData var9 = var4.getClientState();
            if (var9 == null || var9.blockPosition == null) {
               var4.getState().state = InteractionState.Failed;
               super.tick0(var1, var2, var3, var4, var5);
               class="kw">return;
            }

            BlockPosition var10 = var9.blockPosition;
            TransformComponent var11 = var7.getComponent(var6, TransformComponent.getComponentType());
            assert var11 != null;
            BlockPosition var12 = resolveBaseBlockPosition(var8, var10);
            var4.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK, var12);
            var4.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK_RAW, var10);
         }

         BlockPosition var17 = var4.getTargetBlock();
         if (var17 == null) {
            var4.getState().state = InteractionState.Failed;
            super.tick0(var1, var2, var3, var4, var5);
         } else {
            BlockPosition var18 = var4.getTargetBlockRaw() != null ? var4.getTargetBlockRaw() : var17;
            if (!InteractionValidation.canEntityInteractWithBlock(var6, var7, var4.getHeldItem(), var17, var18)) {
               LOGGER.at(Level.WARNING)
                  .log("%s failed block interaction distance check at [%d, %d, %d]", EntityUtils.getEntityName(var6, var7), var17.x, var17.y, var17.z);
               var4.getState().state = InteractionState.Failed;
               super.tick0(var1, var2, var3, var4, var5);
            } else {
               ItemStack var19 = resolveItemInHand(var4, var7);
               Vector3i var20 = new Vector3i(var17.x, var17.y, var17.z);
               ChunkStore var13 = var8.getChunkStore();
               Ref var14 = var13.getChunkSectionReferenceAtBlock(var20.x, var20.y, var20.z);
               if (var14 != null && var14.isValid()) {
                  BlockSection var15 = var13.getStore().getComponent(var14, BlockSection.getComponentType());
                  if (var15 == null) {
                     var4.getState().state = InteractionState.Failed;
                     super.tick0(var1, var2, var3, var4, var5);
                  } else {
                     int var16 = var15.get(var20.x, var20.y, var20.z);
                     if (hasRemovedBlockContext(var4) || var16 != 1 && var16 != 0) {
                        this.interactWithBlock(var8, var7, var3, var4, var19, var20, var5);
                        super.tick0(var1, var2, var3, var4, var5);
                     } else {
                        var4.getState().state = InteractionState.Failed;
                        super.tick0(var1, var2, var3, var4, var5);
                     }
                  }
               } else {
                  var4.getState().state = InteractionState.Failed;
                  super.tick0(var1, var2, var3, var4, var5);
               }
            }
         }
      }
   }

   class="kw">protected class="kw">abstract void interactWithBlock(
      @Nonnull World var1,
      @Nonnull CommandBuffer<EntityStore> var2,
      @Nonnull InteractionType var3,
      @Nonnull InteractionContext var4,
      @Nullable ItemStack var5,
      @Nonnull Vector3i var6,
      @Nonnull CooldownHandler var7
   );

   @Override
   class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
      if (var1) {
         Ref var6 = var4.getEntity();
         CommandBuffer var7 = var4.getCommandBuffer();
         assert var7 != null;
         World var8 = var7.getExternalData().getWorld();
         ItemStack var9 = resolveItemInHand(var4, var7);
         var4.getState().blockFace = BlockFace.Up;
         BlockPosition var11 = var4.getTargetBlock();
         Vector3i var10;
         if (var11 == null) {
            var10 = TargetUtil.getTargetBlock(var6, 8.0, var7);
            if (var10 == null) {
               var4.getState().state = InteractionState.Failed;
               super.tick0(var1, var2, var3, var4, var5);
               class="kw">return;
            }

            var4.getState().blockPosition = new BlockPosition(var10.x, var10.y, var10.z);
         } else {
            var4.getState().blockPosition = var11;
            var10 = new Vector3i(var11.x, var11.y, var11.z);
         }

         ChunkStore var12 = var8.getChunkStore();
         Ref var13 = var12.getChunkSectionReferenceAtBlock(var10.x, var10.y, var10.z);
         if (var13 != null && var13.isValid()) {
            BlockSection var14 = var12.getStore().getComponent(var13, BlockSection.getComponentType());
            if (var14 == null) {
               var4.getState().state = InteractionState.Failed;
               super.tick0(var1, var2, var3, var4, var5);
            } else {
               int var15 = var14.get(var10.x, var10.y, var10.z);
               if (hasRemovedBlockContext(var4) || var15 != 1 && var15 != 0) {
                  this.simulateInteractWithBlock(var3, var4, var9, var8, var10);
                  super.tick0(var1, var2, var3, var4, var5);
               } else {
                  var4.getState().state = InteractionState.Failed;
                  super.tick0(var1, var2, var3, var4, var5);
               }
            }
         } else {
            var4.getState().state = InteractionState.Failed;
            super.tick0(var1, var2, var3, var4, var5);
         }
      }
   }

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

   @Nullable
   class="kw">private class="kw">static ItemStack resolveItemInHand(@Nonnull InteractionContext var0, @Nonnull CommandBuffer<EntityStore> var1) {
      ItemStack var2 = InventoryComponent.getItemInHand(var1, var0.getEntity());
      class="kw">return var2 != null ? var2 : var0.getHeldItem();
   }

   @Nonnull
   class="kw">public class="kw">static BlockPosition resolveBaseBlockPosition(@Nonnull World var0, @Nonnull BlockPosition var1) {
      ChunkStore var2 = var0.getChunkStore();
      Ref var3 = var2.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
      if (var3 != null && var3.isValid()) {
         BlockSection var4 = var2.getStore().getComponent(var3, BlockSection.getComponentType());
         if (var4 == null) {
            class="kw">return var1;
         }

         int var5 = var4.getFiller(var1.x, var1.y, var1.z);
         class="kw">return var5 == 0
            ? var1
            : new BlockPosition(var1.x - FillerBlockUtil.unpackX(var5), var1.y - FillerBlockUtil.unpackY(var5), var1.z - FillerBlockUtil.unpackZ(var5));
      } else {
         class="kw">return var1;
      }
   }

   class="kw">protected class="kw">static boolean hasRemovedBlockContext(@Nonnull InteractionContext var0) {
      class="kw">return var0.getMetaStore().getIfPresentMetaObject(Interaction.TARGET_BLOCK_TYPE) != null;
   }

   class="kw">protected class="kw">static void computeCurrentBlockSyncData(@Nonnull InteractionContext var0) {
      BlockPosition var1 = var0.getTargetBlock();
      if (var1 != null) {
         CommandBuffer var2 = var0.getCommandBuffer();
         assert var2 != null;
         World var3 = var2.getStore().getExternalData().getWorld();
         ChunkStore var4 = var3.getChunkStore();
         Ref var5 = var4.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
         if (var5 != null && var5.isValid()) {
            BlockSection var6 = var4.getStore().getComponent(var5, BlockSection.getComponentType());
            if (var6 != null) {
               var0.getState().blockPosition = new BlockPosition(var1.x, var1.y, var1.z);
               var0.getState().placedBlockId = var6.get(var1.x, var1.y, var1.z);
               RotationTuple var7 = var6.getRotation(var1.x, var1.y, var1.z);
               var0.getState().blockRotation = new BlockRotation(var7.yaw().toPacket(), var7.pitch().toPacket(), var7.roll().toPacket());
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
      class="kw">return new com.hypixel.hytale.protocol.SimpleBlockInteraction();
   }

   @Override
   class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
      super.configurePacket(var1);
      com.hypixel.hytale.protocol.SimpleBlockInteraction var2 = (com.hypixel.hytale.protocol.SimpleBlockInteraction)var1;
      var2.useLatestTarget = this.useLatestTarget;
   }

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

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "SimpleBlockInteraction{} " + super.toString();
   }
}