Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e867183
Modified how caching of map objects works
Jul 21, 2016
55be76c
Fixed the license
Jul 21, 2016
b1e7bc5
Moved inventories to group them together better. Moved update method…
mjmjelde Jul 22, 2016
3b05c23
Added Player Stats
mjmjelde Jul 22, 2016
83aab1b
Added more data to EncounterResult
mjmjelde Jul 22, 2016
3a9505e
Merge pull request #109 from mjmfighter/add_more_encounter_data
Grover-c13 Jul 22, 2016
59fdf7a
Modified how caching of map objects works
Jul 21, 2016
0c286e7
Fixed the license
Jul 21, 2016
5b44634
Merge branch 'mjmfighter-MapAPI_Updates'
Grover-c13 Jul 22, 2016
12ee3de
Merge remote-tracking branch 'origin/master'
Grover-c13 Jul 22, 2016
9bcc995
Fix merge issue with package rename (Pokemon -> pokemon) and styleche…
Grover-c13 Jul 22, 2016
8617042
Make server requests work over multiple threads at once
jabbink Jul 22, 2016
855ad07
made catchPokemon() use the next tier pokeball if out of the tier bel…
Grover-c13 Jul 22, 2016
09e66f6
Merge pull request #112 from Grover-c13/PokemonCatch
Grover-c13 Jul 22, 2016
2ebc072
Only build master pushes
langerhans Jul 22, 2016
94ba91e
Merge branch 'master' into fix-threadSafeServerRequest
jabbink Jul 22, 2016
0a2fdb4
Merge pull request #114 from langerhans/patch-1
Grover-c13 Jul 22, 2016
580d752
Fix checkstyle
jabbink Jul 22, 2016
f55dc0e
Merge pull request #113 from jabbink/fix-threadSafeServerRequest
Grover-c13 Jul 22, 2016
0550908
automatically close the Response stream, even when the server fails t…
jabbink Jul 22, 2016
13d4f9a
Merge pull request #121 from jabbink/fix-closeResponseResource
jabbink Jul 22, 2016
b6eb9d3
refresh expired auth tickets
jabbink Jul 22, 2016
93834bb
Merge pull request #122 from jabbink/fix/refreshAuthTicket
jabbink Jul 22, 2016
4f69978
Added check to see if pokemon was already in the inventory
mjmjelde Jul 22, 2016
6a2f87a
Moved inventories to group them together better. Moved update method…
mjmjelde Jul 22, 2016
a4b951d
Added Player Stats
mjmjelde Jul 22, 2016
a4f4721
Added check to see if pokemon was already in the inventory
mjmjelde Jul 22, 2016
755482b
Rebased with latest master. Removed code that automatically updated …
Jul 22, 2016
bcfa426
Removed an unused import
Jul 22, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ language: java
jdk:
- oraclejdk8

branches:
only:
- master

before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
- $HOME/.gradle/wrapper/
161 changes: 15 additions & 146 deletions src/main/java/com/pokegoapi/api/PokemonGo.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,13 @@

package com.pokegoapi.api;

import POGOProtos.Data.Player.CurrencyOuterClass;
import POGOProtos.Data.Player.PlayerStatsOuterClass;
import POGOProtos.Data.PlayerDataOuterClass;
import POGOProtos.Enums.PokemonFamilyIdOuterClass.PokemonFamilyId;
import POGOProtos.Enums.PokemonIdOuterClass;
import POGOProtos.Inventory.InventoryItemOuterClass;
import POGOProtos.Inventory.ItemIdOuterClass;
import POGOProtos.Networking.Envelopes.RequestEnvelopeOuterClass;
import POGOProtos.Networking.Requests.Messages.GetInventoryMessageOuterClass.GetInventoryMessage;
import POGOProtos.Networking.Requests.Messages.GetPlayerMessageOuterClass.GetPlayerMessage;
import POGOProtos.Networking.Requests.RequestTypeOuterClass.RequestType;
import POGOProtos.Networking.Responses.GetInventoryResponseOuterClass.GetInventoryResponse;
import POGOProtos.Networking.Responses.GetPlayerResponseOuterClass.GetPlayerResponse;
import com.google.protobuf.InvalidProtocolBufferException;
import com.pokegoapi.api.inventory.Bag;
import com.pokegoapi.api.inventory.CandyJar;
import com.pokegoapi.api.inventory.Item;
import com.pokegoapi.api.inventory.PokeBank;
import com.pokegoapi.api.inventory.Inventories;
import com.pokegoapi.api.map.Map;
import com.pokegoapi.api.player.ContactSettings;
import com.pokegoapi.api.player.DailyBonus;
import com.pokegoapi.api.player.PlayerAvatar;
import com.pokegoapi.api.player.PlayerProfile;
import com.pokegoapi.api.player.Team;
import com.pokegoapi.api.pokemon.Pokemon;
import com.pokegoapi.exceptions.InvalidCurrencyException;
import com.pokegoapi.exceptions.LoginFailedException;
import com.pokegoapi.exceptions.RemoteServerException;
import com.pokegoapi.main.RequestHandler;
import com.pokegoapi.main.ServerRequest;
import com.pokegoapi.util.Log;
import lombok.Getter;
import lombok.Setter;
Expand All @@ -57,15 +34,12 @@ public class PokemonGo {
@Getter
RequestHandler requestHandler;
@Getter
PokeBank pokebank;
@Getter
Bag bag;
@Getter
Map map;
@Getter
CandyJar candyjar;
private PlayerProfile playerProfile;
@Getter
private Inventories inventories;
@Getter
@Setter
private double latitude;
@Getter
Expand All @@ -75,88 +49,29 @@ public class PokemonGo {
@Setter
private double altitude;

private long lastInventoryUpdate;

/**
* Instantiates a new Pokemon go.
*
* @param auth the auth
* @param client the client
*/
public PokemonGo(RequestEnvelopeOuterClass.RequestEnvelope.AuthInfo auth, OkHttpClient client) {
public PokemonGo(RequestEnvelopeOuterClass.RequestEnvelope.AuthInfo auth, OkHttpClient client)
throws LoginFailedException, RemoteServerException {
playerProfile = null;

// send profile request to get the ball rolling
requestHandler = new RequestHandler(this, auth, client);
getPlayerProfile();
// should have proper end point now.

map = new Map(this);
lastInventoryUpdate = 0;
}

private PlayerDataOuterClass.PlayerData getPlayerAndUpdateInventory(PlayerProfile playerProfile)
throws LoginFailedException, RemoteServerException {

GetPlayerMessage getPlayerReqMsg = GetPlayerMessage.newBuilder().build();
ServerRequest getPlayerServerRequest = new ServerRequest(RequestType.GET_PLAYER, getPlayerReqMsg);
getRequestHandler().request(getPlayerServerRequest);

GetInventoryMessage invReqMsg = GetInventoryMessage.newBuilder()
.setLastTimestampMs(this.lastInventoryUpdate)
.build();
ServerRequest getInventoryServerRequest = new ServerRequest(RequestType.GET_INVENTORY, invReqMsg);
getRequestHandler().request(getInventoryServerRequest);

getRequestHandler().sendServerRequests();
playerProfile = new PlayerProfile(this);
inventories = new Inventories(this);

GetPlayerResponse getPlayerResponse;
GetInventoryResponse getInventoryResponse;
try {
getPlayerResponse = GetPlayerResponse.parseFrom(getPlayerServerRequest.getData());
getInventoryResponse = GetInventoryResponse.parseFrom(getInventoryServerRequest.getData());
} catch (InvalidProtocolBufferException e) {
throw new RemoteServerException(e);
}

pokebank = new PokeBank(this);
bag = new Bag(this);
candyjar = new CandyJar(this);

for (InventoryItemOuterClass.InventoryItem item :
getInventoryResponse.getInventoryDelta().getInventoryItemsList()) {

if (item.getInventoryItemData().getPokemonData().getPokemonId() != PokemonIdOuterClass.PokemonId.MISSINGNO) {
pokebank.addPokemon(new Pokemon(item.getInventoryItemData().getPokemonData()));
}

if (item.getInventoryItemData().getItem().getItemId() != ItemIdOuterClass.ItemId.ITEM_UNKNOWN) {
bag.addItem(new Item(item.getInventoryItemData().getItem()));
}

if (item.getInventoryItemData().getPokemonFamily().getFamilyId() != PokemonFamilyId.UNRECOGNIZED) {
candyjar.setCandy(
item.getInventoryItemData().getPokemonFamily().getFamilyId(),
item.getInventoryItemData().getPokemonFamily().getCandy());
}

if (item.getInventoryItemData().hasPlayerStats()) {
PlayerStatsOuterClass.PlayerStats stats = item.getInventoryItemData().getPlayerStats();
playerProfile.setStats(stats);
}
playerProfile.updateProfile();
inventories.updateInventories();

}

return getPlayerResponse.getPlayerData();
}
// should have proper end point now.

/**
* Gets player profile.
*
* @return the player profile
*/
public PlayerProfile getPlayerProfile() {
return getPlayerProfile(false);
map = new Map(this);
}

/**
Expand All @@ -165,61 +80,15 @@ public PlayerProfile getPlayerProfile() {
* @param forceUpdate the force update
* @return the player profile
*/
@Deprecated
public PlayerProfile getPlayerProfile(boolean forceUpdate) {
if (!forceUpdate && playerProfile != null) {
return playerProfile;
}

// init here so we can set the experience and level, which is somehow contained in the inventory...
PlayerProfile tempProfile = new PlayerProfile();
PlayerDataOuterClass.PlayerData localPlayer = null;
try {
localPlayer = getPlayerAndUpdateInventory(tempProfile);
} catch (LoginFailedException | RemoteServerException e) {
Log.e(TAG, "Failed to get profile data and update inventory", e);
}

if (localPlayer == null) {
return null;
}
playerProfile = tempProfile;

playerProfile.setBadge(localPlayer.getEquippedBadge());
playerProfile.setCreationTime(localPlayer.getCreationTimestampMs());
playerProfile.setItemStorage(localPlayer.getMaxItemStorage());
playerProfile.setPokemonStorage(localPlayer.getMaxPokemonStorage());
playerProfile.setTeam(Team.values()[localPlayer.getTeam()]);
playerProfile.setUsername(localPlayer.getUsername());

final PlayerAvatar avatarApi = new PlayerAvatar();
final DailyBonus bonusApi = new DailyBonus();
final ContactSettings contactApi = new ContactSettings();

// maybe something more graceful?
for (CurrencyOuterClass.Currency currency : localPlayer.getCurrenciesList()) {
try {
playerProfile.addCurrency(currency.getName(), currency.getAmount());
} catch (InvalidCurrencyException e) {
Log.w(TAG, "Error adding currency. You can probably ignore this.", e);
playerProfile.updateProfile();
} catch (Exception e) {
Log.e(TAG, "Error updating Player Profile", e);
}
}

avatarApi.setGender(localPlayer.getAvatar().getGender());
avatarApi.setBackpack(localPlayer.getAvatar().getBackpack());
avatarApi.setEyes(localPlayer.getAvatar().getEyes());
avatarApi.setHair(localPlayer.getAvatar().getHair());
avatarApi.setHat(localPlayer.getAvatar().getHat());
avatarApi.setPants(localPlayer.getAvatar().getPants());
avatarApi.setShirt(localPlayer.getAvatar().getShirt());
avatarApi.setShoes(localPlayer.getAvatar().getShoes());
avatarApi.setSkin(localPlayer.getAvatar().getSkin());

bonusApi.setNextCollectionTimestamp(localPlayer.getDailyBonus().getNextCollectedTimestampMs());
bonusApi.setNextDefenderBonusCollectTimestamp(localPlayer.getDailyBonus().getNextDefenderBonusCollectTimestampMs());

playerProfile.setAvatar(avatarApi);
playerProfile.setDailyBonus(bonusApi);

return playerProfile;
}

Expand Down
41 changes: 41 additions & 0 deletions src/main/java/com/pokegoapi/api/inventory/CandyJar.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import POGOProtos.Enums.PokemonFamilyIdOuterClass.PokemonFamilyId;
import com.pokegoapi.api.PokemonGo;
import com.pokegoapi.api.pokemon.Pokemon;
import lombok.ToString;

import java.util.HashMap;
Expand All @@ -31,10 +32,50 @@ public CandyJar(PokemonGo pgo) {
candies = new HashMap<>();
}

/**
* Sets the number of candies in the jar.
* @param family Pokemon family id
* @param candies Amount to set it to
*/
public void setCandy(PokemonFamilyId family, int candies) {
this.candies.put(family, candies);
}

/**
* Adds a candy to the candy jar.
* @param family Pokemon family id
* @param amount Amount of candies to add
*/
public void addCandy(PokemonFamilyId family, int amount) {
if (candies.containsKey(family)) {
candies.put(family, candies.get(family) + amount);
} else {
candies.put(family, amount);
}
}

/**
* Remove a candy from the candy jar.
* @param family Pokemon family id
* @param amount Amount of candies to remove
*/
public void removeCandy(PokemonFamilyId family, int amount) {
if (candies.containsKey(family)) {
if (candies.get(family) - amount < 0) {
candies.put(family, 0);
} else {
candies.put(family, candies.get(family) - amount);
}
} else {
candies.put(family, 0);
}
}

/**
* Get number of candies from the candyjar.
* @param family Pokemon family id
* @return number of candies in jar
*/
public int getCandies(PokemonFamilyId family) {
return this.candies.get(family);
}
Expand Down
Loading