package dekk.pw.pokemate.tasks; import POGOProtos.Enums.PokemonIdOuterClass; import com.pokegoapi.api.pokemon.Pokemon; import com.pokegoapi.exceptions.LoginFailedException; import com.pokegoapi.exceptions.RemoteServerException; import dekk.pw.pokemate.Config; import dekk.pw.pokemate.Context; import dekk.pw.pokemate.PokeMateUI; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by TimD on 7/21/2016. */ class ReleasePokemon extends Task implements Runnable { ReleasePokemon(final Context context) { super(context); } @Override public void run() { Map<PokemonIdOuterClass.PokemonId, List<Pokemon>> groups; try { groups = context.getInventories().getPokebank().getPokemons().stream().collect(Collectors.groupingBy(Pokemon::getPokemonId)); for (List<Pokemon> list : groups.values()) { if (Config.isTransferPrefersIV()) { Collections.sort(list, (a, b) -> context.getIvRatio(a) - context.getIvRatio(b)); } else { Collections.sort(list, (a, b) -> a.getCp() - b.getCp()); } int minCP = Config.getMinCP(); list.stream().filter(p -> (minCP <= 1 || p.getCp() < minCP) && list.indexOf(p) < list.size() - 1 && context.getIvRatio(p) < Config.getIvRatio() && !Config.getNeverTransferPokemon().contains(p.getPokemonId())).forEach(p -> { //Passing this filter means they are not a 'perfect pokemon' try { p.transferPokemon(); PokeMateUI.addMessageToLog("Transferring " + (list.indexOf(p) + 1) + "/" + list.size() + " " + p.getPokemonId() + " CP " + p.getCp() + " [" + p.getIndividualAttack() + "/" + p.getIndividualDefense() + "/" + p.getIndividualStamina() + "]"); context.setConsoleString("ReleasePokemon", "Transferred " + (list.indexOf(p) + 1) + "/" + list.size() + " " + p.getPokemonId() + " CP " + p.getCp() + " [" + p.getIndividualAttack() + "/" + p.getIndividualDefense() + "/" + p.getIndividualStamina() + "]"); } catch (LoginFailedException | RemoteServerException e) { e.printStackTrace(); } }); } } finally { context.addTask(new ReleasePokemon(context)); } } }