Search in sources :

Example 1 with Encounter

use of com.pokegoapi.api.map.pokemon.Encounter in project PokeGOAPI-Java by Grover-c13.

the class CatchPokemonAtAreaExample method catchArea.

private static void catchArea(PokemonGo api) throws RequestFailedException, NoSuchItemException {
    ItemBag bag = api.getInventories().getItemBag();
    try {
        //Wait until map is updated for the current location
        api.getMap().awaitUpdate();
        Set<CatchablePokemon> catchablePokemon = api.getMap().getMapObjects().getPokemon();
        System.out.println("Pokemon in area: " + catchablePokemon.size());
        Random random = new Random();
        PokeBank pokebank = api.getInventories().getPokebank();
        for (CatchablePokemon cp : catchablePokemon) {
            // Encounter this pokemon
            Encounter encounter = cp.encounter();
            // If the encounter was successful, attempt to catch this pokemon
            if (encounter.isSuccessful()) {
                System.out.println("Encountered: " + cp.getPokemonId());
                List<Pokeball> usablePokeballs = bag.getUsablePokeballs();
                if (usablePokeballs.size() > 0) {
                    //Select pokeball with smart selector to print what pokeball is used
                    double probability = encounter.getCaptureProbability();
                    Pokeball pokeball = PokeballSelector.SMART.select(usablePokeballs, probability);
                    System.out.println("Attempting to catch: " + cp.getPokemonId() + " with " + pokeball + " (" + probability + ")");
                    // Throw pokeballs until capture or flee
                    while (encounter.isActive()) {
                        // Wait between Pokeball throws
                        Thread.sleep(500 + random.nextInt(1000));
                        // If no item is active, use a razzberry
                        int razzberryCount = bag.getItem(ItemId.ITEM_RAZZ_BERRY).getCount();
                        if (encounter.getActiveItem() == null && razzberryCount > 0) {
                            encounter.useItem(ItemId.ITEM_RAZZ_BERRY);
                        }
                        // Throw pokeball with random properties
                        encounter.throwPokeball(PokeballSelector.SMART, ThrowProperties.random());
                        if (encounter.getStatus() == CatchStatus.CATCH_SUCCESS) {
                            // Print pokemon stats
                            Pokemon pokemon = pokebank.getPokemonById(encounter.getCapturedPokemon());
                            if (pokemon != null) {
                                double iv = pokemon.getIvInPercentage();
                                int number = pokemon.getPokemonId().getNumber();
                                String name = PokeDictionary.getDisplayName(number, Locale.ENGLISH);
                                System.out.println("====" + name + "====");
                                System.out.println("CP: " + pokemon.getCp());
                                System.out.println("IV: " + iv + "%");
                                System.out.println("Height: " + pokemon.getHeightM() + "m");
                                System.out.println("Weight: " + pokemon.getWeightKg() + "kg");
                                System.out.println("Move 1: " + pokemon.getMove1());
                                System.out.println("Move 2: " + pokemon.getMove2());
                                //Rename the pokemon to <Name> IV%
                                pokemon.renamePokemon(name + " " + iv + "%");
                                //Set pokemon with IV above 90% as favorite
                                if (iv > 90) {
                                    pokemon.setFavoritePokemon(true);
                                }
                            }
                        }
                    }
                } else {
                    System.out.println("Skipping Pokemon, we have no Pokeballs!");
                }
                // Wait for animation before catching next pokemon
                Thread.sleep(3000 + random.nextInt(1000));
            } else {
                System.out.println("Failed to encounter pokemon: " + encounter.getEncounterResult());
            }
        }
    } catch (InterruptedException e) {
        return;
    }
}
Also used : PokeBank(com.pokegoapi.api.inventory.PokeBank) CatchablePokemon(com.pokegoapi.api.map.pokemon.CatchablePokemon) Point(com.pokegoapi.api.map.Point) ItemBag(com.pokegoapi.api.inventory.ItemBag) Random(java.util.Random) Encounter(com.pokegoapi.api.map.pokemon.Encounter) NearbyPokemon(com.pokegoapi.api.map.pokemon.NearbyPokemon) Pokemon(com.pokegoapi.api.pokemon.Pokemon) CatchablePokemon(com.pokegoapi.api.map.pokemon.CatchablePokemon) Pokeball(com.pokegoapi.api.inventory.Pokeball)

Aggregations

ItemBag (com.pokegoapi.api.inventory.ItemBag)1 PokeBank (com.pokegoapi.api.inventory.PokeBank)1 Pokeball (com.pokegoapi.api.inventory.Pokeball)1 Point (com.pokegoapi.api.map.Point)1 CatchablePokemon (com.pokegoapi.api.map.pokemon.CatchablePokemon)1 Encounter (com.pokegoapi.api.map.pokemon.Encounter)1 NearbyPokemon (com.pokegoapi.api.map.pokemon.NearbyPokemon)1 Pokemon (com.pokegoapi.api.pokemon.Pokemon)1 Random (java.util.Random)1