ActionPickUpItem class

Пакет: com.hypixel.hytale.server.npc.corecomponents.items

Файл: com/hypixel/hytale/server/npc/corecomponents/items/ActionPickUpItem.java

extends: ActionWithDelay

Поля (18)

МодификаторыТипИмя
final ComponentType<EntityStore, ItemComponent> ITEM_COMPONENT_TYPE
break
break
private final String description
Vector3d var10
TransformComponent var11
Vector3d var12
double var13
String[] var3
ItemComponent var3
Ref var7
Ref var7
var7
var7
ItemComponent var8
CombinedItemContainer var8
TransformComponent var9
CombinedItemContainer var9

Методы (13)

МодификаторыВозвратСигнатура
abstract Destroy Destroy("Destroy the item")
StorageTarget StorageTarget(String nullxx)
protected boolean filterItemboolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
public String getpublic String get()
if if(!this.hoover)
if if(var7 == null)
if if(var13 > this.range * this.range)
if if(!this.hoover)
if if(var3 != null)
if if(var7 == null)
if if(this.hooverItems == null)
abstract super super(var1, var2)
switch switch(this.storageTarget)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ActionWithDelay;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.items.builders.BuilderActionPickUpItem;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.InventoryHelper;
class="kw">import java.util.List;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class ActionPickUpItem class="kw">extends ActionWithDelay {
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, ItemComponent> ITEM_COMPONENT_TYPE = ItemComponent.getComponentType();
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
   class="kw">protected class="kw">final double range;
   class="kw">protected class="kw">final ActionPickUpItem.StorageTarget storageTarget;
   class="kw">protected class="kw">final boolean hoover;
   @Nullable
   class="kw">protected class="kw">final List<String> hooverItems;

   class="kw">public ActionPickUpItem(@Nonnull BuilderActionPickUpItem var1, @Nonnull BuilderSupport var2) {
      super(var1, var2);
      this.range = var1.getRange(var2);
      this.storageTarget = var1.getStorageTarget(var2);
      this.hoover = var1.getHoover();
      String[] var3 = var1.getItems(var2);
      this.hooverItems = var3 != null ? List.of(var3) : null;
   }

   @Override
   class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
      var1.getPositionCache().requireDroppedItemDistance(this.range);
   }

   @Override
   class="kw">public boolean canExecute(
      @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
   ) {
      if (!super.canExecute(var1, var2, var3, var4, var6)) {
         class="kw">return false;
      }

      if (!this.hoover) {
         if (var3 == null || !var3.hasPosition()) {
            class="kw">return false;
         }

         Ref var7 = var3.getPositionProvider().getTarget();
         if (var7 == null) {
            class="kw">return false;
         }

         ItemComponent var8 = var6.getComponent(var7, ITEM_COMPONENT_TYPE);
         if (var8 == null || !var8.canPickUp()) {
            class="kw">return false;
         }

         TransformComponent var9 = var6.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
         assert var9 != null;
         Vector3d var10 = var9.getPosition();
         TransformComponent var11 = var6.getComponent(var7, TRANSFORM_COMPONENT_TYPE);
         assert var11 != null;
         Vector3d var12 = var11.getPosition();
         double var13 = var10.distanceSquared(var12);
         if (var13 > this.range * this.range) {
            class="kw">return false;
         }
      } else if (var2.getPositionCache().getDroppedItemList().isEmpty()) {
         class="kw">return false;
      }

      class="kw">return !this.isDelaying();
   }

   @Override
   class="kw">public boolean execute(
      @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
   ) {
      super.execute(var1, var2, var3, var4, var6);
      Ref var7 = null;
      if (!this.hoover) {
         if (var3 != null) {
            var7 = var3.getPositionProvider().getTarget();
         }
      } else {
         var7 = var2.getPositionCache().getClosestDroppedItemInRange(var1, 0.0, this.range, ActionPickUpItem::filterItem, this, var6);
      }

      this.prepareDelay();
      this.startDelay(var2.getEntitySupport());
      if (var7 == null) {
         class="kw">return false;
      }

      class="kw">switch (this.storageTarget) {
         case Hotbar:
            CombinedItemContainer var9 = InventoryComponent.getCombined(var6, var1, InventoryComponent.HOTBAR_FIRST);
            ItemComponent.addToItemContainer(var6, var7, var9);
            break;
         case Inventory:
            CombinedItemContainer var8 = InventoryComponent.getCombined(var6, var1, InventoryComponent.STORAGE_FIRST);
            ItemComponent.addToItemContainer(var6, var7, var8);
            break;
         case Destroy:
            var6.removeEntity(var7, RemoveReason.REMOVE);
      }

      class="kw">return true;
   }

   class="kw">protected boolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      if (!var1.isValid()) {
         class="kw">return false;
      }

      if (this.hooverItems == null) {
         class="kw">return true;
      }

      ItemComponent var3 = var2.getComponent(var1, ITEM_COMPONENT_TYPE);
      assert var3 != null;
      class="kw">return InventoryHelper.matchesItem(this.hooverItems, var3.getItemStack());
   }

   class="kw">public enum StorageTarget class="kw">implements Supplier<String> {
      Hotbar("Prioritise hotbar"),
      Inventory("Prioritise inventory"),
      Destroy("Destroy the item");

      class="kw">private class="kw">final String description;

      StorageTarget(String nullxx) {
         this.description = nullxx;
      }

      class="kw">public String get() {
         class="kw">return this.description;
      }
   }
}