package cn.academy.ability.develop.action;
import cn.academy.ability.ModuleAbility;
import cn.academy.ability.api.Category;
import cn.academy.ability.api.data.AbilityData;
import cn.academy.ability.develop.DeveloperType;
import cn.academy.ability.develop.IDeveloper;
import cn.academy.ability.item.ItemInductionFactor;
import com.google.common.base.Objects;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import java.util.Arrays;
import java.util.Optional;
public class DevelopActionReset implements IDevelopAction {
public static boolean canReset(EntityPlayer player, IDeveloper developer) {
AbilityData data = AbilityData.get(player);
ItemStack equip = player.getCurrentEquippedItem();
Optional<ItemStack> factor = getFactor(player);
int level = data.getLevel();
return level >= 3 &&
developer.getType() == DeveloperType.ADVANCED &&
equip != null && equip.getItem() == ModuleAbility.magneticCoil &&
factor.isPresent() && ItemInductionFactor.getCategory(factor.get()) != data.getCategory();
}
static Optional<ItemStack> getFactor(EntityPlayer player) {
Category playerCategory = AbilityData.get(player).getCategoryNullable();
return Arrays.stream(player.inventory.mainInventory)
.filter(stack -> stack != null && stack.getItem() instanceof ItemInductionFactor)
.filter(stack -> ItemInductionFactor.getCategory(stack) != playerCategory)
.findAny();
}
@Override
public int getStimulations(EntityPlayer player) {
AbilityData data = AbilityData.get(player);
return data.getLevel() * 10;
}
@Override
public boolean validate(EntityPlayer player, IDeveloper developer) {
return canReset(player, developer);
}
@Override
public void onLearned(EntityPlayer player) {
AbilityData data = AbilityData.get(player);
ItemStack factor = getFactor(player).get();
Category newCat = ItemInductionFactor.getCategory(factor);
int prevLevel = data.getLevel();
data.setCategory(newCat);
data.setLevel(prevLevel - 1);
player.setCurrentItemOrArmor(0, null);
int factorIdx = Arrays.asList(player.inventory.mainInventory).indexOf(factor);
player.inventory.mainInventory[factorIdx] = null;
}
}