package com.hypixel.hytale.server.npc.corecomponents.items.builders;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import com.hypixel.hytale.server.npc.asset.builder.holder.AssetArrayHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.DoubleHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.EnumHolder;
import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleSingleValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.asset.ItemExistsValidator;
import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderActionWithDelay;
import com.hypixel.hytale.server.npc.corecomponents.items.ActionPickUpItem;
import com.hypixel.hytale.server.npc.instructions.Action;
import java.util.EnumSet;
import javax.annotation.Nonnull;
publicclassBuilderActionPickUpItemextendsBuilderActionWithDelay {
protectedfinalDoubleHolderrange=newDoubleHolder();
protectedfinal EnumHolder<ActionPickUpItem.StorageTarget> pickupTarget = newEnumHolder<ActionPickUpItem.StorageTarget>();
protectedAssetArrayHolderitems=newAssetArrayHolder();
protectedboolean hoover;
publicBuilderActionPickUpItem() {
}
@Nonnullpublic String getShortDescription() {
return"Pick up an item";
}
@Nonnullpublic String getLongDescription() {
return"Pick up an item. In hoover mode, will match to the Item array. Otherwise, requires a target to be provided e.g. by a DroppedItemSensor";
}
@Nonnullpublic Action build(@Nonnull BuilderSupport builderSupport) {
returnnewActionPickUpItem(this, builderSupport);
}
@Nonnullpublic BuilderActionPickUpItem readConfig(@Nonnull JsonElement data) {
this.getDouble(data, "Range", this.range, 1.0, DoubleSingleValidator.greater0(), BuilderDescriptorState.Stable, "The range the item will be picked up from", (String)null);
this.getEnum(data, "StorageTarget", this.pickupTarget, ActionPickUpItem.StorageTarget.class, ActionPickUpItem.StorageTarget.Hotbar, BuilderDescriptorState.Experimental, "Where to prioritise putting the item", (String)null);
this.getBoolean(data, "Hoover", (s) -> this.hoover = s, false, BuilderDescriptorState.Stable, "Suck up all items in range", "Suck up all items in range with optional cooldown. Can be filtered with a list of glob patterns. Ignored outside hoover mode");
this.getAssetArray(data, "Items", this.items, (String[])null, 0, 2147483647, ItemExistsValidator.withConfig(EnumSet.of(AssetValidator.Config.LIST_NULLABLE, AssetValidator.Config.LIST_CAN_BE_EMPTY, AssetValidator.Config.MATCHER)), BuilderDescriptorState.Stable, "A list of glob item patterns to match", "A list of glob item patterns to match for hoover mode. If omitted, will match any item. Ignored outside hoover mode");
this.requireFeatureIf("Hoover", false, this.hoover, EnumSet.of(Feature.Drop));
returnthis;
}
@Nonnullpublic BuilderDescriptorState getBuilderDescriptorState() {
return BuilderDescriptorState.Stable;
}
public String[] getItems(BuilderSupport support) {
returnthis.items.get(support.getExecutionContext());
}
publicbooleangetHoover() {
returnthis.hoover;
}
publicdoublegetRange(@Nonnull BuilderSupport support) {
returnthis.range.get(support.getExecutionContext());
}
public ActionPickUpItem.StorageTarget getStorageTarget(@Nonnull BuilderSupport support) {
returnthis.pickupTarget.get(support.getExecutionContext());
}
}