use of com.pokegoapi.api.pokemon.Pokemon in project PokeGOAPI-Java by Grover-c13.
the class PokeBank method releasePokemon.
/**
* Releases multiple pokemon in a single request
*
* @param releasePokemon the pokemon to release
* @return the amount of candies for each pokemon family
* @throws RequestFailedException if an exception occurred while sending requests
*/
public Map<PokemonFamilyId, Integer> releasePokemon(Pokemon... releasePokemon) throws RequestFailedException {
ReleasePokemonMessage.Builder releaseBuilder = ReleasePokemonMessage.newBuilder();
for (Pokemon pokemon : releasePokemon) {
if (!pokemon.isDeployed() && !pokemon.isFavorite()) {
releaseBuilder.addPokemonIds(pokemon.getId());
}
}
ServerRequestEnvelope envelope = ServerRequestEnvelope.createCommons();
ServerRequest releaseRequest = envelope.add(RequestType.RELEASE_POKEMON, releaseBuilder.build());
Map<PokemonFamilyId, Integer> lastCandies = new HashMap<>(api.getInventories().getCandyjar().getCandies());
ServerResponse response = api.getRequestHandler().sendServerRequests(envelope);
try {
GetInventoryResponse inventoryResponse = GetInventoryResponse.parseFrom(response.get(RequestType.GET_INVENTORY));
ReleasePokemonResponse releaseResponse = ReleasePokemonResponse.parseFrom(releaseRequest.getData());
Map<PokemonFamilyId, Integer> candyCount = new HashMap<>();
if (releaseResponse.getResult() == Result.SUCCESS && inventoryResponse.getSuccess()) {
synchronized (this.lock) {
for (Pokemon pokemon : releasePokemon) {
this.pokemons.remove(pokemon);
}
}
for (Pokemon pokemon : releasePokemon) {
api.getInventories().getPokebank().removePokemon(pokemon);
}
List<InventoryItem> items = inventoryResponse.getInventoryDelta().getInventoryItemsList();
for (InventoryItem item : items) {
InventoryItemData data = item.getInventoryItemData();
if (data != null && data.hasCandy()) {
Candy candy = data.getCandy();
PokemonFamilyId family = candy.getFamilyId();
Integer lastCandy = lastCandies.get(family);
if (lastCandy == null) {
lastCandy = 0;
}
candyCount.put(family, candy.getCandy() - lastCandy);
}
}
api.getInventories().updateInventories(inventoryResponse);
}
return candyCount;
} catch (InvalidProtocolBufferException e) {
throw new RequestFailedException(e);
}
}
use of com.pokegoapi.api.pokemon.Pokemon 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;
}
}
Aggregations