package joshie.progression.criteria.rewards;
import joshie.progression.Progression;
import joshie.progression.api.criteria.*;
import joshie.progression.api.special.*;
import joshie.progression.gui.fields.ItemFilterField;
import joshie.progression.gui.filters.FilterTypeEntity;
import joshie.progression.helpers.EntityHelper;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.DamageSource;
import net.minecraft.util.text.TextFormatting;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ProgressionRule(name="hurt", color=0xFFE599FF, meta="attackPlayer")
public class RewardHurt extends RewardBase implements IInit, ICustomDescription, ICustomWidth, IGetterCallback, IHasFilters, ISpecialFieldProvider {
public static final HashMap<String, DamageSource> sources = new HashMap();
public List<IFilterProvider> targets = new ArrayList();
private DamageSource source;
public String damageSource = "magic";
public float damage = 1F;
public boolean defaultToPlayer = true;
@Override
public void init(boolean isClient) {
if (damageSource.equals("magic")) source = DamageSource.magic;
else {
source = sources.get(damageSource);
}
}
@Override
public String getDescription() {
if (source != null) {
String s = TextFormatting.GREEN + WordUtils.capitalizeFully(StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(source.damageType), ' '));
return Progression.format(getProvider().getUnlocalisedName() + ".description", TextFormatting.RED + "" + damage + TextFormatting.WHITE, s);
} else return "Incorrectly setup damage source";
}
@Override
public int getWidth(DisplayMode mode) {
return mode == DisplayMode.EDIT ? 85 : 80;
}
@Override
public String getField(String fieldName) {
return fieldName.equals("damageSource") ? (source != null ? TextFormatting.GREEN + damageSource : TextFormatting.RED + damageSource) : "" + damage;
}
@Override
public List<IFilterProvider> getAllFilters() {
return targets;
}
@Override
public IFilterType getFilterForField(String fieldName) {
return FilterTypeEntity.INSTANCE;
}
@Override
public void addSpecialFields(List<IField> fields, DisplayMode mode) {
fields.add(new ItemFilterField("targets", this));
}
@Override
public void reward(EntityPlayerMP thePlayer) {
if (source == null) return;
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) {
entity.attackEntityFrom(source, damage);
}
}
}
}