package joshie.progression.criteria.triggers;
import joshie.progression.api.criteria.IField;
import joshie.progression.api.criteria.IFilterProvider;
import joshie.progression.api.criteria.IFilterType;
import joshie.progression.api.special.*;
import joshie.progression.gui.fields.EntityFilterFieldPreview;
import joshie.progression.gui.fields.ItemFilterField;
import joshie.progression.gui.filters.FilterTypeEntity;
import joshie.progression.helpers.EntityHelper;
import joshie.progression.helpers.MCClientHelper;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
import static joshie.progression.ItemProgression.ItemMeta.kill;
import static joshie.progression.ItemProgression.getStackFromMeta;
public abstract class TriggerBaseEntity extends TriggerBaseCounter implements ICustomWidth, ICustomIcon, IMiniIcon, IHasFilters, ISpecialFieldProvider {
private static final ItemStack mini = getStackFromMeta(kill);
public List<IFilterProvider> entities = new ArrayList();
protected transient EntityLivingBase entity;
protected transient int ticker;
public TriggerBaseEntity copyEntity(TriggerBaseEntity trigger) {
trigger.entities = entities;
return (TriggerBaseEntity) copyCounter(trigger);
}
@Override
public int getWidth(DisplayMode mode) {
return mode == DisplayMode.EDIT ? 100 : 85;
}
@Override
public ItemStack getIcon() {
return EntityHelper.getItemForEntity(getEntity());
}
@Override
public ItemStack getMiniIcon() {
return mini;
}
@Override
public List<IFilterProvider> getAllFilters() {
return entities;
}
@Override
public IFilterType getFilterForField(String fieldName) {
return FilterTypeEntity.INSTANCE;
}
@Override
public void addSpecialFields(List<IField> fields, DisplayMode mode) {
if (mode == DisplayMode.EDIT) {
fields.add(new ItemFilterField("entities", this));
} else fields.add(new EntityFilterFieldPreview("entities", this, 45, 70, 2.8F));
}
@Override
protected boolean canIncrease(Object... data) {
EntityLivingBase entity = (EntityLivingBase) data[0];
for (IFilterProvider filter : entities) {
if (filter.getProvided().matches(entity)) return true;
}
return false;
}
private EntityLivingBase getEntity() {
if (ticker >= 200 || ticker == 0) {
entity = EntityHelper.getRandomEntityFromFilters(entities, MCClientHelper.getPlayer());
ticker = 1;
}
if (!GuiScreen.isShiftKeyDown()) ticker++;
return entity != null ? entity : MCClientHelper.getPlayer();
}
}