DestroyBlockInteraction class

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

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

extends: SimpleInstantInteraction

Поля (12)

МодификаторыТипИмя
final HytaleLogger LOGGER
World var10
ChunkStore var11
Ref var12
Vector3i var13
Store var14
BlockPosition var4
Ref var5
Ref var6
Ref var7
CommandBuffer var8
BlockPosition var9

Методы (2)

МодификаторыВозвратСигнатура
if if(var4 != null)
if if(var12 != null)

Исходный код

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

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.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
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.modules.interaction.BlockHarvestUtils;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
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.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 DestroyBlockInteraction class="kw">extends SimpleInstantInteraction {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<DestroyBlockInteraction> CODEC = BuilderCodec.builder(
         DestroyBlockInteraction.class, DestroyBlockInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Destroys the target block.")
      .build();

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      BlockPosition var4 = var2.getTargetBlock();
      if (var4 != null) {
         Ref var5 = var2.getEntity();
         Ref var6 = var2.getOwningEntity();
         Ref var7 = var6 != null && var6.isValid() ? var6 : var5;
         CommandBuffer var8 = var2.getCommandBuffer();
         assert var8 != null;
         BlockPosition var9 = var2.getTargetBlockRaw() != null ? var2.getTargetBlockRaw() : var4;
         if (!InteractionValidation.canEntityInteractWithBlock(var5, var8, var2.getHeldItem(), var4, var9)) {
            LOGGER.at(Level.WARNING)
               .log("%s failed destroy block interaction distance check at [%d, %d, %d]", EntityUtils.getEntityName(var5, var8), var4.x, var4.y, var4.z);
            var2.getState().state = InteractionState.Failed;
         } else {
            World var10 = var8.getExternalData().getWorld();
            ChunkStore var11 = var10.getChunkStore();
            Ref var12 = var11.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
            if (var12 != null) {
               Vector3i var13 = new Vector3i(var4.x, var4.y, var4.z);
               Store var14 = var11.getStore();
               BlockHarvestUtils.performBlockBreak(var7, var5, null, var13, 0, var12, var8, var14);
            }
         }
      }
   }
}