package joshie.progression.criteria.rewards;
import joshie.progression.ItemProgression;
import joshie.progression.ItemProgression.ItemMeta;
import joshie.progression.Progression;
import joshie.progression.api.criteria.IField;
import joshie.progression.api.criteria.IFilterProvider;
import joshie.progression.api.criteria.ProgressionRule;
import joshie.progression.api.special.*;
import joshie.progression.gui.core.GuiList;
import joshie.progression.gui.fields.ItemFilterFieldPreview;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import java.util.List;
import static joshie.progression.api.special.DisplayMode.EDIT;
@ProgressionRule(name="clear", color=0xFF69008C, meta="clearInventory")
public class RewardClear extends RewardBaseItemFilter implements ICustomDisplayName, ICustomDescription, ICustomWidth, ICustomTooltip, ISpecialFieldProvider {
public int stackSize = 1;
public RewardClear() {
BROKEN = ItemProgression.getStackFromMeta(ItemMeta.clearInventory);
}
@Override
public String getDisplayName() {
return GuiList.MODE == EDIT ? Progression.translate(getProvider().getUnlocalisedName()) : Progression.translate(getProvider().getUnlocalisedName() + ".display");
}
@Override
public String getDescription() {
return "";
}
@Override
public ItemStack getIcon() {
super.getIcon(); //Update the preview
return BROKEN;
}
@Override
public int getWidth(DisplayMode mode) {
return mode == EDIT ? 100 : 60;
}
@Override
public void addTooltip(List list) {
list.add(TextFormatting.RED + "Remove Item");
ItemStack stack = preview == null ? BROKEN : preview;
list.add(stack.getDisplayName() + " x" + stack.stackSize);
}
@Override
public void addSpecialFields(List<IField> fields, DisplayMode mode) {
if (mode == EDIT) fields.add(new ItemFilterFieldPreview("filters", this, 25, 30, 2.8F));
else fields.add(new ItemFilterFieldPreview("filters", this, 5, 25, 2.8F));
}
@Override
public void reward(EntityPlayerMP player) {
int taken = 0;
for (int i = 0; i < player.inventory.mainInventory.length && taken < stackSize; i++) {
ItemStack check = player.inventory.mainInventory[i];
int decrease = 0;
if (check != null) {
for (int j = 0; j < check.stackSize && taken < stackSize; j++) {
for (IFilterProvider filter : filters) {
if (filter.getProvided().matches(check)) {
decrease++;
taken++;
}
}
}
if (decrease > 0) player.inventory.decrStackSize(i, decrease);
}
}
}
}