CarryPlaceBlockInteraction class

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

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

extends: SimpleInteraction

Поля (19)

МодификаторыТипИмя
final HytaleLogger LOGGER
BlockPosition var10
BlockRotation var11
String var12
ItemStack var13
World var14
Store var15
Vector3i var16
ItemContainer var17
Ref var18
boolean var19
PlaceBlockInteraction var2
BlockSection var20
RotationTuple var21
InteractionSyncData var6
InteractionSyncData var6
Ref var7
CommandBuffer var8
CarriedBlock var9

Методы (7)

МодификаторыВозвратСигнатура
abstract return new PlaceBlockInteractionreturn new PlaceBlockInteraction()
if if(!var1)
if if(var9 != null && var10 != null && var11 != null)
if if(var12 != null && var13 != null)
if if(var17 == null)
if if(!var19)
if if(!var1)

Исходный код

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

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.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.BlockRotation;
class="kw">import com.hypixel.hytale.protocol.Interaction;
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.PlaceBlockInteraction;
class="kw">import com.hypixel.hytale.protocol.Rotation;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace;
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.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.BlockPlaceUtils;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.components.CarriedBlock;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
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 java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class CarryPlaceBlockInteraction 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<CarryPlaceBlockInteraction> CODEC = BuilderCodec.builder(
         CarryPlaceBlockInteraction.class, CarryPlaceBlockInteraction::new, SimpleInteraction.CODEC
      )
      .documentation("Places the block currently being carried, restoring its block entity data.")
      .build();

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

   @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) {
      InteractionSyncData var6 = var4.getClientState();
      assert var6 != null;
      if (!var1) {
         var4.getState().state = var6.state;
      } else {
         Ref var7 = var4.getEntity();
         CommandBuffer var8 = var4.getCommandBuffer();
         assert var8 != null;
         CarriedBlock var9 = var8.getComponent(var7, CarriedBlock.getComponentType());
         BlockPosition var10 = var6.blockPosition;
         BlockRotation var11 = var6.blockRotation;
         if (var9 != null && var10 != null && var11 != null) {
            String var12 = var9.getBlockTypeKey();
            ItemStack var13 = var9.toItemStack();
            if (var12 != null && var13 != null) {
               World var14 = var8.getExternalData().getWorld();
               Store var15 = var14.getChunkStore().getStore();
               Vector3i var16 = new Vector3i(var10.x, var10.y, var10.z);
               if (!InteractionValidation.canPlayerInteractWithBlock(var7, var8, var4.getHeldItem(), var16)) {
                  LOGGER.at(Level.WARNING)
                     .log(
                        "%s failed carry place block interaction distance check at [%d, %d, %d]",
                        EntityUtils.getEntityName(var7, var8),
                        var16.x,
                        var16.y,
                        var16.z
                     );
                  var4.getState().state = InteractionState.Failed;
               } else {
                  ItemContainer var17 = var4.getHeldItemContainer();
                  if (var17 == null) {
                     var4.getState().state = InteractionState.Failed;
                  } else {
                     Ref var18 = var14.getChunkStore().getChunkSectionReferenceAtBlock(var16.x, var16.y, var16.z);
                     if (var18 != null && var18.isValid()) {
                        boolean var19 = BlockPlaceUtils.placeBlock(
                           var7,
                           var13,
                           var12,
                           var17,
                           new Vector3i(BlockFace.fromProtocolFace(var6.blockFace).getDirection()),
                           var16,
                           var11,
                           var4.getHeldItemSlot(),
                           false,
                           var18,
                           var15,
                           var8,
                           false,
                           false,
                           false
                        );
                        if (!var19) {
                           var4.getState().state = InteractionState.Failed;
                        } else {
                           var9.clearItemContainer();
                           var9.clearItemBlockKey();
                           var8.tryRemoveComponent(var7, CarriedBlock.getComponentType());
                           BlockSection var20 = var15.getComponent(var18, BlockSection.getComponentType());
                           RotationTuple var21 = var20.getRotation(var10.x, var10.y, var10.z);
                           var4.getState().blockPosition = var10;
                           var4.getState().placedBlockId = var20.get(var10.x, var10.y, var10.z);
                           var4.getState().blockRotation = new BlockRotation(var21.yaw().toPacket(), var21.pitch().toPacket(), var21.roll().toPacket());
                           super.tick0(var1, var2, var3, var4, var5);
                        }
                     } else {
                        var4.getState().state = InteractionState.Failed;
                     }
                  }
               }
            } else {
               var4.getState().state = InteractionState.Failed;
            }
         } else {
            var4.getState().state = InteractionState.Failed;
         }
      }
   }

   @Override
   class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
      super.simulateTick0(var1, var2, var3, var4, var5);
      if (!failed(var4.getState().state)) {
         InteractionSyncData var6 = var4.getClientState();
         assert var6 != null;
         if (!var1) {
            var4.getState().state = var6.state;
         } else {
            var6.blockRotation = new BlockRotation(Rotation.None, Rotation.None, Rotation.None);
         }
      }
   }

   @Nonnull
   @Override
   class="kw">protected Interaction generatePacket() {
      class="kw">return new PlaceBlockInteraction();
   }

   @Override
   class="kw">protected void configurePacket(Interaction var1) {
      super.configurePacket(var1);
      PlaceBlockInteraction var2 = (PlaceBlockInteraction)var1;
      var2.blockId = -1;
      var2.removeItemInHand = false;
   }

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

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