Skip to content

Commit 685c4f7

Browse files
committed
Merge remote-tracking branch 'upstream/master' into feature/captureLures
2 parents cc7a0bc + f5b5368 commit 685c4f7

9 files changed

Lines changed: 304 additions & 167 deletions

File tree

src/main/java/com/pokegoapi/api/PokemonGo.java

Lines changed: 15 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,13 @@
1515

1616
package com.pokegoapi.api;
1717

18-
import POGOProtos.Data.Player.CurrencyOuterClass;
19-
import POGOProtos.Data.Player.PlayerStatsOuterClass;
20-
import POGOProtos.Data.PlayerDataOuterClass;
21-
import POGOProtos.Enums.PokemonFamilyIdOuterClass.PokemonFamilyId;
22-
import POGOProtos.Enums.PokemonIdOuterClass;
23-
import POGOProtos.Inventory.InventoryItemOuterClass;
24-
import POGOProtos.Inventory.ItemIdOuterClass;
2518
import POGOProtos.Networking.Envelopes.RequestEnvelopeOuterClass;
26-
import POGOProtos.Networking.Requests.Messages.GetInventoryMessageOuterClass.GetInventoryMessage;
27-
import POGOProtos.Networking.Requests.Messages.GetPlayerMessageOuterClass.GetPlayerMessage;
28-
import POGOProtos.Networking.Requests.RequestTypeOuterClass.RequestType;
29-
import POGOProtos.Networking.Responses.GetInventoryResponseOuterClass.GetInventoryResponse;
30-
import POGOProtos.Networking.Responses.GetPlayerResponseOuterClass.GetPlayerResponse;
31-
import com.google.protobuf.InvalidProtocolBufferException;
32-
import com.pokegoapi.api.inventory.Bag;
33-
import com.pokegoapi.api.inventory.CandyJar;
34-
import com.pokegoapi.api.inventory.Item;
35-
import com.pokegoapi.api.inventory.PokeBank;
19+
import com.pokegoapi.api.inventory.Inventories;
3620
import com.pokegoapi.api.map.Map;
37-
import com.pokegoapi.api.player.ContactSettings;
38-
import com.pokegoapi.api.player.DailyBonus;
39-
import com.pokegoapi.api.player.PlayerAvatar;
4021
import com.pokegoapi.api.player.PlayerProfile;
41-
import com.pokegoapi.api.player.Team;
42-
import com.pokegoapi.api.pokemon.Pokemon;
43-
import com.pokegoapi.exceptions.InvalidCurrencyException;
4422
import com.pokegoapi.exceptions.LoginFailedException;
4523
import com.pokegoapi.exceptions.RemoteServerException;
4624
import com.pokegoapi.main.RequestHandler;
47-
import com.pokegoapi.main.ServerRequest;
4825
import com.pokegoapi.util.Log;
4926
import lombok.Getter;
5027
import lombok.Setter;
@@ -57,15 +34,12 @@ public class PokemonGo {
5734
@Getter
5835
RequestHandler requestHandler;
5936
@Getter
60-
PokeBank pokebank;
61-
@Getter
62-
Bag bag;
63-
@Getter
6437
Map map;
6538
@Getter
66-
CandyJar candyjar;
6739
private PlayerProfile playerProfile;
6840
@Getter
41+
private Inventories inventories;
42+
@Getter
6943
@Setter
7044
private double latitude;
7145
@Getter
@@ -75,86 +49,29 @@ public class PokemonGo {
7549
@Setter
7650
private double altitude;
7751

78-
private long lastInventoryUpdate;
7952

8053
/**
8154
* Instantiates a new Pokemon go.
8255
*
8356
* @param auth the auth
8457
* @param client the client
8558
*/
86-
public PokemonGo(RequestEnvelopeOuterClass.RequestEnvelope.AuthInfo auth, OkHttpClient client) {
59+
public PokemonGo(RequestEnvelopeOuterClass.RequestEnvelope.AuthInfo auth, OkHttpClient client)
60+
throws LoginFailedException, RemoteServerException {
8761
playerProfile = null;
8862

8963
// send profile request to get the ball rolling
9064
requestHandler = new RequestHandler(this, auth, client);
91-
getPlayerProfile();
92-
// should have proper end point now.
93-
94-
map = new Map(this);
95-
lastInventoryUpdate = 0;
96-
}
97-
98-
private PlayerDataOuterClass.PlayerData getPlayerAndUpdateInventory(PlayerProfile playerProfile)
99-
throws LoginFailedException, RemoteServerException {
100-
101-
GetPlayerMessage getPlayerReqMsg = GetPlayerMessage.newBuilder().build();
102-
ServerRequest getPlayerServerRequest = new ServerRequest(RequestType.GET_PLAYER, getPlayerReqMsg);
103-
104-
GetInventoryMessage invReqMsg = GetInventoryMessage.newBuilder()
105-
.setLastTimestampMs(this.lastInventoryUpdate)
106-
.build();
107-
ServerRequest getInventoryServerRequest = new ServerRequest(RequestType.GET_INVENTORY, invReqMsg);
10865

109-
getRequestHandler().sendServerRequests(getPlayerServerRequest, getInventoryServerRequest);
66+
playerProfile = new PlayerProfile(this);
67+
inventories = new Inventories(this);
11068

111-
GetPlayerResponse getPlayerResponse;
112-
GetInventoryResponse getInventoryResponse;
113-
try {
114-
getPlayerResponse = GetPlayerResponse.parseFrom(getPlayerServerRequest.getData());
115-
getInventoryResponse = GetInventoryResponse.parseFrom(getInventoryServerRequest.getData());
116-
} catch (InvalidProtocolBufferException e) {
117-
throw new RemoteServerException(e);
118-
}
119-
120-
pokebank = new PokeBank(this);
121-
bag = new Bag(this);
122-
candyjar = new CandyJar(this);
123-
124-
for (InventoryItemOuterClass.InventoryItem item :
125-
getInventoryResponse.getInventoryDelta().getInventoryItemsList()) {
126-
127-
if (item.getInventoryItemData().getPokemonData().getPokemonId() != PokemonIdOuterClass.PokemonId.MISSINGNO) {
128-
pokebank.addPokemon(new Pokemon(item.getInventoryItemData().getPokemonData()));
129-
}
130-
131-
if (item.getInventoryItemData().getItem().getItemId() != ItemIdOuterClass.ItemId.ITEM_UNKNOWN) {
132-
bag.addItem(new Item(item.getInventoryItemData().getItem()));
133-
}
134-
135-
if (item.getInventoryItemData().getPokemonFamily().getFamilyId() != PokemonFamilyId.UNRECOGNIZED) {
136-
candyjar.setCandy(
137-
item.getInventoryItemData().getPokemonFamily().getFamilyId(),
138-
item.getInventoryItemData().getPokemonFamily().getCandy());
139-
}
140-
141-
if (item.getInventoryItemData().hasPlayerStats()) {
142-
PlayerStatsOuterClass.PlayerStats stats = item.getInventoryItemData().getPlayerStats();
143-
playerProfile.setStats(stats);
144-
}
69+
playerProfile.updateProfile();
70+
inventories.updateInventories();
14571

146-
}
147-
148-
return getPlayerResponse.getPlayerData();
149-
}
72+
// should have proper end point now.
15073

151-
/**
152-
* Gets player profile.
153-
*
154-
* @return the player profile
155-
*/
156-
public PlayerProfile getPlayerProfile() {
157-
return getPlayerProfile(false);
74+
map = new Map(this);
15875
}
15976

16077
/**
@@ -163,61 +80,15 @@ public PlayerProfile getPlayerProfile() {
16380
* @param forceUpdate the force update
16481
* @return the player profile
16582
*/
83+
@Deprecated
16684
public PlayerProfile getPlayerProfile(boolean forceUpdate) {
16785
if (!forceUpdate && playerProfile != null) {
168-
return playerProfile;
169-
}
170-
171-
// init here so we can set the experience and level, which is somehow contained in the inventory...
172-
PlayerProfile tempProfile = new PlayerProfile();
173-
PlayerDataOuterClass.PlayerData localPlayer = null;
174-
try {
175-
localPlayer = getPlayerAndUpdateInventory(tempProfile);
176-
} catch (LoginFailedException | RemoteServerException e) {
177-
Log.e(TAG, "Failed to get profile data and update inventory", e);
178-
}
179-
180-
if (localPlayer == null) {
181-
return null;
182-
}
183-
playerProfile = tempProfile;
184-
185-
playerProfile.setBadge(localPlayer.getEquippedBadge());
186-
playerProfile.setCreationTime(localPlayer.getCreationTimestampMs());
187-
playerProfile.setItemStorage(localPlayer.getMaxItemStorage());
188-
playerProfile.setPokemonStorage(localPlayer.getMaxPokemonStorage());
189-
playerProfile.setTeam(Team.values()[localPlayer.getTeam()]);
190-
playerProfile.setUsername(localPlayer.getUsername());
191-
192-
final PlayerAvatar avatarApi = new PlayerAvatar();
193-
final DailyBonus bonusApi = new DailyBonus();
194-
final ContactSettings contactApi = new ContactSettings();
195-
196-
// maybe something more graceful?
197-
for (CurrencyOuterClass.Currency currency : localPlayer.getCurrenciesList()) {
19886
try {
199-
playerProfile.addCurrency(currency.getName(), currency.getAmount());
200-
} catch (InvalidCurrencyException e) {
201-
Log.w(TAG, "Error adding currency. You can probably ignore this.", e);
87+
playerProfile.updateProfile();
88+
} catch (Exception e) {
89+
Log.e(TAG, "Error updating Player Profile", e);
20290
}
20391
}
204-
205-
avatarApi.setGender(localPlayer.getAvatar().getGender());
206-
avatarApi.setBackpack(localPlayer.getAvatar().getBackpack());
207-
avatarApi.setEyes(localPlayer.getAvatar().getEyes());
208-
avatarApi.setHair(localPlayer.getAvatar().getHair());
209-
avatarApi.setHat(localPlayer.getAvatar().getHat());
210-
avatarApi.setPants(localPlayer.getAvatar().getPants());
211-
avatarApi.setShirt(localPlayer.getAvatar().getShirt());
212-
avatarApi.setShoes(localPlayer.getAvatar().getShoes());
213-
avatarApi.setSkin(localPlayer.getAvatar().getSkin());
214-
215-
bonusApi.setNextCollectionTimestamp(localPlayer.getDailyBonus().getNextCollectedTimestampMs());
216-
bonusApi.setNextDefenderBonusCollectTimestamp(localPlayer.getDailyBonus().getNextDefenderBonusCollectTimestampMs());
217-
218-
playerProfile.setAvatar(avatarApi);
219-
playerProfile.setDailyBonus(bonusApi);
220-
22192
return playerProfile;
22293
}
22394

src/main/java/com/pokegoapi/api/inventory/CandyJar.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import POGOProtos.Enums.PokemonFamilyIdOuterClass.PokemonFamilyId;
1919
import com.pokegoapi.api.PokemonGo;
20+
import com.pokegoapi.api.pokemon.Pokemon;
2021
import lombok.ToString;
2122

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

35+
/**
36+
* Sets the number of candies in the jar.
37+
* @param family Pokemon family id
38+
* @param candies Amount to set it to
39+
*/
3440
public void setCandy(PokemonFamilyId family, int candies) {
3541
this.candies.put(family, candies);
3642
}
3743

44+
/**
45+
* Adds a candy to the candy jar.
46+
* @param family Pokemon family id
47+
* @param amount Amount of candies to add
48+
*/
49+
public void addCandy(PokemonFamilyId family, int amount) {
50+
if (candies.containsKey(family)) {
51+
candies.put(family, candies.get(family) + amount);
52+
} else {
53+
candies.put(family, amount);
54+
}
55+
}
56+
57+
/**
58+
* Remove a candy from the candy jar.
59+
* @param family Pokemon family id
60+
* @param amount Amount of candies to remove
61+
*/
62+
public void removeCandy(PokemonFamilyId family, int amount) {
63+
if (candies.containsKey(family)) {
64+
if (candies.get(family) - amount < 0) {
65+
candies.put(family, 0);
66+
} else {
67+
candies.put(family, candies.get(family) - amount);
68+
}
69+
} else {
70+
candies.put(family, 0);
71+
}
72+
}
73+
74+
/**
75+
* Get number of candies from the candyjar.
76+
* @param family Pokemon family id
77+
* @return number of candies in jar
78+
*/
3879
public int getCandies(PokemonFamilyId family) {
3980
return this.candies.get(family);
4081
}

0 commit comments

Comments
 (0)