package joshie.progression.criteria.rewards;
import com.google.common.collect.Lists;
import joshie.progression.api.criteria.*;
import joshie.progression.api.special.*;
import joshie.progression.criteria.filters.potion.FilterPotionBase;
import joshie.progression.gui.fields.ItemFilterField;
import joshie.progression.gui.fields.ItemFilterFieldPreview;
import joshie.progression.gui.filters.FilterTypeEntity;
import joshie.progression.gui.filters.FilterTypePotion;
import joshie.progression.helpers.EntityHelper;
import joshie.progression.helpers.MCClientHelper;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@ProgressionRule(name="potioneffect", color=0xFF2C7373)
public class RewardPotion extends RewardBaseItemFilter implements ICustomDescription, ICustomWidth, ICustomTooltip, ISpecialFieldProvider {
public List<IFilterProvider> targets = new ArrayList();
public boolean defaultToPlayer = true;
public boolean randomVanilla = false;
public int duration = 200;
public int amplifier = 0;
public boolean particles = false;
public RewardPotion() {
BROKEN = new ItemStack(Items.POTIONITEM, 1, 0);
}
@Override
public String getDescription() {
return "";
}
@Override
public int getWidth(DisplayMode mode) {
return mode == DisplayMode.EDIT ? 100 : 55;
}
@Override
public void addTooltip(List list) {
ItemStack stack = preview == null ? BROKEN : preview;
Items.POTIONITEM.addInformation(stack, MCClientHelper.getPlayer(), list, false);
}
@Override
public void addSpecialFields(List<IField> fields, DisplayMode mode) {
if (mode == DisplayMode.DISPLAY) fields.add(new ItemFilterFieldPreview("filters", this, 5, 25, 2.8F));
else {
fields.add(new ItemFilterField("filters", this));
fields.add(new ItemFilterField("targets", this));
}
}
@Override
public List<IFilterProvider> getAllFilters() {
List<IFilterProvider> list = Lists.newArrayList();
list.addAll(filters);
list.addAll(targets);
return list;
}
@Override
public IFilterType getFilterForField(String fieldName) {
if (fieldName.equals("targets")) return FilterTypeEntity.INSTANCE;
return FilterTypePotion.INSTANCE;
}
@Override
public void reward(EntityPlayerMP thePlayer) {
if (thePlayer != null) {
Collection<PotionEffect> effects = FilterPotionBase.getRandomEffects(filters);
if (effects != null && effects.size() > 0) {
IFilter filter = EntityHelper.getFilter(targets, thePlayer);
if (filter != null) {
List<EntityLivingBase> entities = (List<EntityLivingBase>) filter.getRandom(thePlayer);
if (entities.size() == 0 && defaultToPlayer) entities.add(thePlayer);
for (EntityLivingBase entity : entities) {
for (PotionEffect effect : effects) {
if (randomVanilla) entity.addPotionEffect(new PotionEffect(effect));
else {
entity.addPotionEffect(new PotionEffect(effect.getPotion(), duration, amplifier, false, particles));
}
}
}
}
}
}
}
}