StorageTarget enum
Пакет: com.hypixel.hytale.server.npc.corecomponents.items
Файл: com/hypixel/hytale/server/npc/corecomponents/items/ActionPickUpItem.java
implements: Supplier<String>
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final String |
description |
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
Destroy Destroy("Destroy the item") |
|
public String |
getpublic String get() |
Исходный код
Показать/скрыть
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;
}
}
}