UseBlockInteraction class

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

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

extends: SimpleBlockInteraction

Поля (10)

МодификаторыТипИмя
return
Ref var10
CommandBuffer var11
UseBlockEvent.Pre var12
UseBlockEvent.Post var13
ChunkStore var5
Ref var6
BlockSection var7
BlockType var8
String var9

Методы (7)

МодификаторыВозвратСигнатура
static void doInteractionvoid doInteraction(@Nonnull InteractionType var0, @Nonnull InteractionContext var1, @Nonnull World var2, @Nonnull Vector3i var3, boolean var4)
abstract doInteraction doInteraction(var3, var4, var1, var6, true)
abstract doInteraction doInteraction(var1, var2, var4, var5, false)
if if(var7 == null)
if if(var9 == null)
if if(var4)
if if(var4)

Исходный код

Показать/скрыть
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.protocol.Interaction;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
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.event.events.ecs.UseBlockEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.entity.LivingEntityUseBlockEvent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
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.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 javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class UseBlockInteraction class="kw">extends SimpleBlockInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<UseBlockInteraction> CODEC = BuilderCodec.builder(
         UseBlockInteraction.class, UseBlockInteraction::new, SimpleBlockInteraction.CODEC
      )
      .documentation("Attempts to use the target block, executing interactions on it if any.")
      .build();

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

   @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
   ) {
      doInteraction(var3, var4, var1, var6, true);
   }

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

   class="kw">private class="kw">static void doInteraction(@Nonnull InteractionType var0, @Nonnull InteractionContext var1, @Nonnull World var2, @Nonnull Vector3i var3, boolean var4) {
      ChunkStore var5 = var2.getChunkStore();
      Ref var6 = var5.getChunkSectionReferenceAtBlock(var3.x, var3.y, var3.z);
      if (var6 != null && var6.isValid()) {
         BlockSection var7 = var5.getStore().getComponent(var6, BlockSection.getComponentType());
         if (var7 == null) {
            var1.getState().state = InteractionState.Failed;
         } else {
            BlockType var8 = BlockType.getAssetMap().getAsset(var7.get(var3.x, var3.y, var3.z));
            String var9 = var8.getInteractions().get(var0);
            if (var9 == null) {
               var1.getState().state = InteractionState.Failed;
            } else {
               Ref var10 = var1.getEntity();
               CommandBuffer var11 = var1.getCommandBuffer();
               assert var11 != null;
               if (var4) {
                  UseBlockEvent.Pre var12 = new UseBlockEvent.Pre(var0, var1, var3, var8);
                  var11.invoke(var10, var12);
                  if (var12.isCancelled()) {
                     var1.getState().state = InteractionState.Failed;
                     class="kw">return;
                  }
               }

               var1.getState().state = InteractionState.Finished;
               var1.execute(RootInteraction.getRootInteractionOrUnknown(var9));
               if (var4) {
                  UseBlockEvent.Post var13 = new UseBlockEvent.Post(var0, var1, var3, var8);
                  var11.invoke(var10, var13);
                  HytaleServer.get()
                     .getEventBus()
                     .dispatchFor(LivingEntityUseBlockEvent.class, var2.getName())
                     .dispatch(new LivingEntityUseBlockEvent(var1.getEntity(), var8.getId()));
               }
            }
         }
      } else {
         var1.getState().state = InteractionState.Failed;
      }
   }

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

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