InteractionContext class

Пакет: com.hypixel.hytale.server.core.entity

Файл: com/hypixel/hytale/server/core/entity/InteractionContext.java

Поля (52)

МодификаторыТипИмя
InteractionContext var1
Item var1
BlockPosition var10
ItemStack var10
int var11
ItemStack var11
ForkedChainId var12
var12
int var12
var12
var12
var12
var12
var12
ForkedChainId var13
int var13
ForkedChainId var14
var14
int var14
InteractionChain.TempChain var15
SimpleItemContainer var15
Vector4d var16
String var17
InteractionChain var19
Interactions var2
NetworkId var3
String var3
int var4
UnarmedInteractions var4
CommandBuffer var4
InventoryComponent.Hotbar var4
InteractionChainData var5
SnapshotBuffer var5
Item var5
Player var5
var5
InventoryComponent.Hotbar var5
Integer var6
var6
EntitySnapshot var6
CarriedBlock var6
GameMode var6
CarriedBlock var6
Ref var7
TransformComponent var7
UnarmedInteractions var7
RootInteractionSettings var7
InventoryComponent.Utility var7
CommandBuffer var8
InventoryComponent.Armor var8
NetworkId var9
InventoryComponent.Tool var9

Методы (47)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Cannot use current context")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Equipped interaction type requires a slot set")
public boolean allowSkipChainOnClickboolean allowSkipChainOnClick()
void deinitEntryvoid deinitEntry(InteractionChain var1, InteractionEntry var2, Ref<EntityStore> var3)
public void executevoid execute(@Nonnull RootInteraction var1)
abstract return forInteractionreturn forInteraction(var0, var1, var2, 0, var3)
public int getHeldItemSectionIdint getHeldItemSectionId()
public byte getHeldItemSlotbyte getHeldItemSlot()
public InteractionManager getInteractionManagerInteractionManager getInteractionManager()
public Map<String, String> getInteractionVarsMap<String, String> getInteractionVars()
public Function<InteractionContext, Map<String, String>> getInteractionVarsGetterFunction<InteractionContext, Map<String, String>> getInteractionVarsGetter()
public Label getLabelLabel getLabel(int var1)
public int getOperationCounterint getOperationCounter()
public EntitySnapshot getSnapshotEntitySnapshot getSnapshot(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
abstract EntitySnapshot getSnapshotEntitySnapshot getSnapshot(CommandBuffer<EntityStore> var1, Ref<EntityStore> var2, int var3)
public boolean hasLabelsboolean hasLabels()
if if(var3 == this)
if if(var6 == null)
if if(var6 != null)
if if(var9 != null)
if if(var16 != null)
if if(var17 != null)
if if(var10 != null)
if if(var12 != null)
if if(var15 != null)
if if(this.snapshotProvider != null)
if if(var5 != null)
if if(var6 != null)
if if(var2 != null)
if if(var3 != null)
if if(var5 == null)
if if(var6 != null)
if if(var3 != null)
if if(var2 == InteractionType.Equipped)
if if(var10 == null && var11 != null)
if if(var13 == var14)
void initEntryvoid initEntry(@Nonnull InteractionChain var1, @Nonnull InteractionEntry var2, @Nullable Ref<EntityStore> var3)
public void jumpvoid jump(@Nonnull Label var1)
public void setHeldItemvoid setHeldItem(@Nullable ItemStack var1)
public void setInteractionVarsGettervoid setInteractionVarsGetter(Function<InteractionContext, Map<String, String>> var1)
public void setLabelsvoid setLabels(Label[] var1)
public void setOperationCountervoid setOperationCounter(int var1)
public void setSnapshotProvidervoid setSnapshotProvider(@Nullable InteractionContext.SnapshotProvider var1)
public void setTimeShiftvoid setTimeShift(float var1)
switch switch(var2)
abstract this this(var1, var2, var2, var3, var4, var5, var6)
while while(var14.forkedId != null)

Исходный код

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

class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.ForkedChainId;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.InteractionChainData;
class="kw">import com.hypixel.hytale.protocol.InteractionSyncData;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.PrioritySlot;
class="kw">import com.hypixel.hytale.protocol.RootInteractionSettings;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemContext;
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.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.meta.DynamicMetaStore;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.SnapshotBuffer;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.Interactions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.components.CarriedBlock;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.UnarmedInteractions;
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.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.Label;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.Arrays;
class="kw">import java.util.Map;
class="kw">import java.util.function.Function;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector4d;

class="kw">public class InteractionContext {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Function<InteractionContext, Map<String, String>> DEFAULT_VAR_GETTER = InteractionContext::defaultGetVars;
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">final int heldItemSectionId;
   @Nullable
   class="kw">private class="kw">final ItemContainer heldItemContainer;
   class="kw">private class="kw">final byte heldItemSlot;
   @Nullable
   class="kw">private ItemStack heldItem;
   @Nullable
   class="kw">private class="kw">final Item originalItemType;
   class="kw">private Function<InteractionContext, Map<String, String>> interactionVarsGetter = DEFAULT_VAR_GETTER;
   @Nullable
   class="kw">private class="kw">final InteractionManager interactionManager;
   @Nullable
   class="kw">private class="kw">final Ref<EntityStore> owningEntity;
   @Nullable
   class="kw">private class="kw">final Ref<EntityStore> runningForEntity;
   @Nullable
   class="kw">private InteractionChain chain;
   @Nullable
   class="kw">private InteractionEntry entry;
   @Nullable
   class="kw">private Label[] labels;
   @Nullable
   class="kw">private InteractionContext.SnapshotProvider snapshotProvider;
   @Nonnull
   class="kw">private class="kw">final DynamicMetaStore<InteractionContext> metaStore;

   class="kw">private InteractionContext(
      @Nullable InteractionManager var1, @Nullable Ref<EntityStore> var2, int var3, @Nullable ItemContainer var4, byte var5, @Nullable ItemStack var6
   ) {
      this(var1, var2, var2, var3, var4, var5, var6);
   }

   class="kw">private InteractionContext(
      @Nullable InteractionManager var1,
      @Nullable Ref<EntityStore> var2,
      @Nullable Ref<EntityStore> var3,
      int var4,
      @Nullable ItemContainer var5,
      byte var6,
      @Nullable ItemStack var7
   ) {
      this.interactionManager = var1;
      this.owningEntity = var2;
      this.runningForEntity = var3;
      this.heldItemSectionId = var4;
      this.heldItemContainer = var5;
      this.heldItemSlot = var6;
      this.heldItem = var7;
      this.originalItemType = var7 != null ? var7.getItem() : null;
      this.metaStore = new DynamicMetaStore<>(this, Interaction.CONTEXT_META_REGISTRY);
   }

   @Nonnull
   class="kw">public InteractionChain fork(@Nonnull InteractionContext var1, @Nonnull RootInteraction var2, boolean var3) {
      assert this.chain != null;
      class="kw">return this.fork(this.chain.getType(), var1, var2, var3);
   }

   @Nonnull
   class="kw">public InteractionChain fork(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull RootInteraction var3, boolean var4) {
      InteractionChainData var5 = new InteractionChainData(this.chain.getChainData());
      class="kw">return this.fork(var5, var1, var2, var3, var4);
   }

   @Nonnull
   class="kw">public InteractionChain fork(
      @Nonnull InteractionChainData var1, @Nonnull InteractionType var2, @Nonnull InteractionContext var3, @Nonnull RootInteraction var4, boolean var5
   ) {
      if (var3 == this) {
         throw new IllegalArgumentException("Cannot use current context");
      }

      Integer var6 = var3.metaStore.getMetaObject(Interaction.TARGET_SLOT);
      if (var6 == null) {
         var6 = this.metaStore.getMetaObject(Interaction.TARGET_SLOT);
         var3.metaStore.putMetaObject(Interaction.TARGET_SLOT, var6);
      }

      if (var6 != null) {
         var1.targetSlot = var6;
      }

      Ref var7 = var3.metaStore.getIfPresentMetaObject(Interaction.TARGET_ENTITY);
      if (var7 != null && var7.isValid()) {
         CommandBuffer var8 = this.getCommandBuffer();
         assert var8 != null;
         NetworkId var9 = var8.getComponent(var7, NetworkId.getComponentType());
         if (var9 != null) {
            var1.entityId = var9.getId();
         }
      }

      Vector4d var16 = var3.metaStore.getIfPresentMetaObject(Interaction.HIT_LOCATION);
      if (var16 != null) {
         var1.hitLocation = new Vector3f((float)var16.x, (float)var16.y, (float)var16.z);
      }

      String var17 = var3.metaStore.getIfPresentMetaObject(Interaction.HIT_DETAIL);
      if (var17 != null) {
         var1.hitDetail = var17;
      }

      BlockPosition var10 = var3.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK_RAW);
      if (var10 != null) {
         var1.blockPosition = var10;
      }

      int var11 = this.chain.getChainId();
      ForkedChainId var12 = this.chain.getForkedChainId();
      ForkedChainId var13 = new ForkedChainId(this.entry.getIndex(), this.entry.nextForkId(), null);
      if (var12 != null) {
         ForkedChainId var14 = var12 = var12.clone();

         while (var14.forkedId != null) {
            var14 = var14.forkedId;
         }

         var14.forkedId = var13;
      } else {
         var12 = var13;
      }

      InteractionChain var19 = new InteractionChain(var12, var13, var2, var3, var1, var4, null, true);
      var19.setChainId(var11);
      var19.setBaseType(this.chain.getBaseType());
      var19.setPredicted(var5);
      var19.skipChainOnClick = this.allowSkipChainOnClick();
      var19.setTimeShift(this.chain.getTimeShift());
      this.chain.putForkedChain(var13, var19);
      InteractionChain.TempChain var15 = this.chain.removeTempForkedChain(var13, var19);
      if (var15 != null) {
         LOGGER.at(Level.FINEST).log("Loading temp chain data for fork %s", var13);
         var19.copyTempFrom(var15);
      }

      class="kw">return var19;
   }

   @Nonnull
   class="kw">public InteractionContext duplicate() {
      InteractionContext var1 = new InteractionContext(
         this.interactionManager, this.owningEntity, this.runningForEntity, this.heldItemSectionId, this.heldItemContainer, this.heldItemSlot, this.heldItem
      );
      var1.interactionVarsGetter = this.interactionVarsGetter;
      var1.metaStore.copyFrom(this.metaStore);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public Ref<EntityStore> getEntity() {
      class="kw">return this.runningForEntity;
   }

   @Nullable
   class="kw">public Ref<EntityStore> getOwningEntity() {
      class="kw">return this.owningEntity;
   }

   class="kw">public void execute(@Nonnull RootInteraction var1) {
      this.chain.getContext().getState().enteredRootInteraction = RootInteraction.getAssetMap().getIndex(var1.getId());
      this.chain.pushRoot(var1, this.entry.isUseSimulationState());
   }

   @Nullable
   class="kw">public InteractionChain getChain() {
      class="kw">return this.chain;
   }

   @Nullable
   class="kw">public InteractionEntry getEntry() {
      class="kw">return this.entry;
   }

   class="kw">public int getOperationCounter() {
      class="kw">return this.entry.isUseSimulationState() ? this.chain.getSimulatedOperationCounter() : this.chain.getOperationCounter();
   }

   class="kw">public void setOperationCounter(int var1) {
      if (this.entry.isUseSimulationState()) {
         this.chain.setSimulatedOperationCounter(var1);
      } else {
         this.chain.setOperationCounter(var1);
      }
   }

   class="kw">public void jump(@Nonnull Label var1) {
      this.setOperationCounter(var1.getIndex());
   }

   @Nullable
   class="kw">public Item getOriginalItemType() {
      class="kw">return this.originalItemType;
   }

   class="kw">public int getHeldItemSectionId() {
      class="kw">return this.heldItemSectionId;
   }

   @Nullable
   class="kw">public ItemContainer getHeldItemContainer() {
      class="kw">return this.heldItemContainer;
   }

   class="kw">public byte getHeldItemSlot() {
      class="kw">return this.heldItemSlot;
   }

   @Nullable
   class="kw">public ItemStack getHeldItem() {
      class="kw">return this.heldItem;
   }

   class="kw">public void setHeldItem(@Nullable ItemStack var1) {
      this.heldItem = var1;
   }

   @Nullable
   class="kw">public ItemContext createHeldItemContext() {
      class="kw">return this.heldItemContainer != null && this.heldItem != null ? new ItemContext(this.heldItemContainer, this.heldItemSlot, this.heldItem) : null;
   }

   class="kw">public Function<InteractionContext, Map<String, String>> getInteractionVarsGetter() {
      class="kw">return this.interactionVarsGetter;
   }

   class="kw">public Map<String, String> getInteractionVars() {
      class="kw">return this.interactionVarsGetter.apply(this);
   }

   class="kw">public void setInteractionVarsGetter(Function<InteractionContext, Map<String, String>> var1) {
      this.interactionVarsGetter = var1;
   }

   class="kw">public InteractionManager getInteractionManager() {
      class="kw">return this.interactionManager;
   }

   @Nullable
   class="kw">public Ref<EntityStore> getTargetEntity() {
      class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_ENTITY);
   }

   @Nullable
   class="kw">public BlockPosition getTargetBlock() {
      class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK);
   }

   @Nullable
   class="kw">public BlockPosition getTargetBlockRaw() {
      class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK_RAW);
   }

   @Nonnull
   class="kw">public DynamicMetaStore<InteractionContext> getMetaStore() {
      class="kw">return this.metaStore;
   }

   @Nonnull
   class="kw">public InteractionSyncData getState() {
      class="kw">return this.entry.getState();
   }

   @Nullable
   class="kw">public InteractionSyncData getClientState() {
      class="kw">return this.entry.getClientState();
   }

   @Nonnull
   class="kw">public InteractionSyncData getServerState() {
      class="kw">return this.entry.getServerState();
   }

   @Nonnull
   class="kw">public DynamicMetaStore<Interaction> getInstanceStore() {
      class="kw">return this.entry.getMetaStore();
   }

   class="kw">public boolean allowSkipChainOnClick() {
      class="kw">return this.chain.skipChainOnClick;
   }

   class="kw">public void setLabels(Label[] var1) {
      this.labels = var1;
   }

   class="kw">public boolean hasLabels() {
      class="kw">return this.labels != null;
   }

   class="kw">public Label getLabel(int var1) {
      class="kw">return this.labels[var1];
   }

   class="kw">public EntitySnapshot getSnapshot(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      NetworkId var3 = var2.getComponent(var1, NetworkId.getComponentType());
      assert var3 != null;
      int var4 = var3.getId();
      if (this.snapshotProvider != null) {
         class="kw">return this.snapshotProvider.getSnapshot(this.getCommandBuffer(), this.runningForEntity, var4);
      }

      SnapshotBuffer var5 = var2.getComponent(var1, SnapshotBuffer.getComponentType());
      if (var5 != null) {
         EntitySnapshot var6 = var5.getSnapshot(var5.getCurrentTickIndex());
         if (var6 != null) {
            class="kw">return var6;
         }
      }

      TransformComponent var7 = var2.getComponent(var1, TransformComponent.getComponentType());
      assert var7 != null;
      class="kw">return new EntitySnapshot(var7.getPosition(), var7.getRotation());
   }

   class="kw">public void setSnapshotProvider(@Nullable InteractionContext.SnapshotProvider var1) {
      this.snapshotProvider = var1;
   }

   class="kw">public void setTimeShift(float var1) {
      if (!this.entry.isUseSimulationState()) {
         this.chain.setTimeShift(var1);
         if (this.chain.getForkedChainId() == null) {
            this.interactionManager.setGlobalTimeShift(this.chain.getType(), var1);
         }
      }
   }

   @Nullable
   class="kw">public CommandBuffer<EntityStore> getCommandBuffer() {
      class="kw">return this.interactionManager.commandBuffer;
   }

   @Nullable
   class="kw">public String getRootInteractionId(@Nonnull InteractionType var1) {
      if (this.runningForEntity != null && this.runningForEntity.isValid()) {
         Interactions var2 = this.runningForEntity.getStore().getComponent(this.runningForEntity, Interactions.getComponentType());
         if (var2 != null) {
            String var3 = var2.getInteractionId(var1);
            if (var3 != null) {
               class="kw">return var3;
            }

            if (var2.isOverrideAll()) {
               class="kw">return null;
            }
         }
      }

      Item var5 = this.originalItemType;
      if (var5 == null) {
         UnarmedInteractions var7 = UnarmedInteractions.getAssetMap().getAsset("Empty");
         class="kw">return var7 != null ? var7.getInteractions().get(var1) : null;
      }

      if (this.runningForEntity != null && this.runningForEntity.isValid()) {
         CarriedBlock var6 = this.runningForEntity.getStore().getComponent(this.runningForEntity, CarriedBlock.getComponentType());
         if (var6 != null) {
            if (var6.getCarriedItemId() != null) {
               class="kw">return Item.getAssetMap().getAsset(var6.getCarriedItemId()).getCarryInteractions().get(var1);
            }

            UnarmedInteractions var4 = UnarmedInteractions.getAssetMap().getAsset("Empty");
            class="kw">return var4 != null ? var4.getInteractions().get(var1) : null;
         }
      }

      class="kw">return var5.getInteractions().get(var1);
   }

   void initEntry(@Nonnull InteractionChain var1, @Nonnull InteractionEntry var2, @Nullable Ref<EntityStore> var3) {
      CommandBuffer var4 = this.getCommandBuffer();
      assert var4 != null;
      this.chain = var1;
      this.entry = var2;
      this.labels = null;
      Player var5 = null;
      if (var3 != null) {
         var5 = var4.getComponent(var3, Player.getComponentType());
      }

      GameMode var6 = var5 != null ? var5.getGameMode() : GameMode.Adventure;
      RootInteractionSettings var7 = var1.getRootInteraction().getSettings().get(var6);
      var1.skipChainOnClick = var1.skipChainOnClick | (var7 != null && var7.allowSkipChainOnClick);
   }

   void deinitEntry(InteractionChain var1, InteractionEntry var2, Ref<EntityStore> var3) {
      this.chain = null;
      this.entry = null;
      this.labels = null;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "InteractionContext{heldItemSectionId="
         + this.heldItemSectionId
         + ", heldItemContainer="
         + this.heldItemContainer
         + ", heldItemSlot="
         + this.heldItemSlot
         + ", heldItem="
         + this.heldItem
         + ", originalItemType="
         + this.originalItemType
         + ", interactionVarsGetter="
         + this.interactionVarsGetter
         + ", labels="
         + Arrays.toString(this.labels)
         + ", snapshotProvider="
         + this.snapshotProvider
         + ", metaStore="
         + this.metaStore
         + "}";
   }

   @Nonnull
   class="kw">public class="kw">static InteractionContext forProxyEntity(
      @Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3
   ) {
      InventoryComponent.Hotbar var4 = var3.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
      class="kw">return new InteractionContext(
         var0, var1, var2, -1, var4 != null ? var4.getInventory() : null, var4 != null ? var4.getActiveSlot() : -1, var4 != null ? var4.getActiveItem() : null
      );
   }

   @Nonnull
   class="kw">public class="kw">static InteractionContext forInteraction(
      @Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull InteractionType var2, @Nonnull ComponentAccessor<EntityStore> var3
   ) {
      if (var2 == InteractionType.Equipped) {
         throw new IllegalArgumentException("Equipped interaction type requires a slot set");
      } else {
         class="kw">return forInteraction(var0, var1, var2, 0, var3);
      }
   }

   @Nonnull
   class="kw">public class="kw">static InteractionContext forInteraction(
      @Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull InteractionType var2, int var3, @Nonnull ComponentAccessor<EntityStore> var4
   ) {
      InventoryComponent.Hotbar var5 = var4.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
      CarriedBlock var6 = var4.getComponent(var1, CarriedBlock.getComponentType());
      if (var6 != null && var6.getCarriedItemId() != null) {
         SimpleItemContainer var15 = var6.getItemContainer();
         class="kw">return new InteractionContext(var0, var1, -10, var15, (byte)0, var15.getItemStack((short)0));
      }

      InventoryComponent.Utility var7 = var4.getComponent(var1, InventoryComponent.Utility.getComponentType());
      InventoryComponent.Armor var8 = var4.getComponent(var1, InventoryComponent.Armor.getComponentType());
      InventoryComponent.Tool var9 = var4.getComponent(var1, InventoryComponent.Tool.getComponentType());
      class="kw">switch (var2) {
         case Equipped:
            class="kw">return new InteractionContext(
               var0, var1, -3, var8 != null ? var8.getInventory() : null, (byte)var3, var8 != null ? var8.getInventory().getItemStack((short)var3) : null
            );
         case HeldOffhand:
            class="kw">return new InteractionContext(
               var0, var1, -5, var7 != null ? var7.getInventory() : null, var7 != null ? var7.getActiveSlot() : -1, var7 != null ? var7.getActiveItem() : null
            );
         case Ability1:
         case Ability2:
         case Ability3:
         case Pick:
         case Primary:
         case Secondary:
            if (var9 != null && var9.isUsingToolsItem()) {
               class="kw">return new InteractionContext(var0, var1, -8, var9.getInventory(), var9.getActiveSlot(), var9.getActiveItem());
            } else {
               ItemStack var10 = var5 != null ? var5.getActiveItem() : null;
               ItemStack var11 = var7 != null ? var7.getActiveItem() : null;
               int var12 = -1;
               if (var10 == null && var11 != null) {
                  var12 = -5;
               } else if (var10 != null && var11 != null) {
                  int var13 = var10.getItem().getInteractionConfig().getPriorityFor(var2, PrioritySlot.MainHand);
                  int var14 = var11.getItem().getInteractionConfig().getPriorityFor(var2, PrioritySlot.OffHand);
                  if (var13 == var14) {
                     if (var2 == InteractionType.Secondary && var10.getItem().getUtility().isCompatible()) {
                        var12 = -5;
                     }
                  } else if (var13 < var14) {
                     var12 = -5;
                  } else {
                     if (var2 == InteractionType.Primary && !var10.getItem().getInteractions().containsKey(InteractionType.Primary)) {
                        var12 = -5;
                     }

                     if (var2 == InteractionType.Secondary && !var10.getItem().getInteractions().containsKey(InteractionType.Secondary)) {
                        var12 = -5;
                     }
                  }
               }

               class="kw">return var12 == -5
                  ? new InteractionContext(
                     var0,
                     var1,
                     -5,
                     var7 != null ? var7.getInventory() : null,
                     var7 != null ? var7.getActiveSlot() : -1,
                     var7 != null ? var7.getActiveItem() : null
                  )
                  : new InteractionContext(
                     var0,
                     var1,
                     -1,
                     var5 != null ? var5.getInventory() : null,
                     var5 != null ? var5.getActiveSlot() : -1,
                     var5 != null ? var5.getActiveItem() : null
                  );
            }
         case Held:
         class="kw">default:
            class="kw">return new InteractionContext(
               var0, var1, -1, var5 != null ? var5.getInventory() : null, var5 != null ? var5.getActiveSlot() : -1, var5 != null ? var5.getActiveItem() : null
            );
      }
   }

   @Nonnull
   class="kw">public class="kw">static InteractionContext withoutEntity() {
      class="kw">return new InteractionContext(null, null, -1, null, (byte)-1, null);
   }

   @Nullable
   class="kw">private class="kw">static Map<String, String> defaultGetVars(@Nonnull InteractionContext var0) {
      Item var1 = var0.originalItemType;
      class="kw">return var1 != null ? var1.getInteractionVars() : null;
   }

   @Deprecated
   @FunctionalInterface
   class="kw">public class="kw">interface SnapshotProvider {
      EntitySnapshot getSnapshot(CommandBuffer<EntityStore> var1, Ref<EntityStore> var2, int var3);
   }
}