Skip to content

Commit 4f5b715

Browse files
committed
Merge pull requests #135, #131 and #130
Update protobufs
2 parents 7d9d2ab + 21892d6 commit 4f5b715

15 files changed

Lines changed: 210 additions & 107 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ sourceSets {
3131
main {
3232
proto {
3333
// Need to use custom dir cause Gradle doesn't like us otherwise :(
34-
srcDir 'src/resources/protobuf/pogo'
34+
srcDir 'src/resources/protobuf/src'
3535
include '**/*.proto'
3636
}
3737
}

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

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@
1515

1616
package com.pokegoapi.api.inventory;
1717

18-
import POGOProtos.Data.Player.PlayerStatsOuterClass;
1918
import POGOProtos.Enums.PokemonFamilyIdOuterClass;
2019
import POGOProtos.Enums.PokemonIdOuterClass;
2120
import POGOProtos.Inventory.InventoryItemDataOuterClass;
2221
import POGOProtos.Inventory.InventoryItemOuterClass;
23-
import POGOProtos.Inventory.ItemIdOuterClass;
24-
import POGOProtos.Inventory.ItemOuterClass;
22+
import POGOProtos.Inventory.Item.ItemDataOuterClass.ItemData;
23+
import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
2524
import POGOProtos.Networking.Requests.Messages.GetInventoryMessageOuterClass.GetInventoryMessage;
2625
import POGOProtos.Networking.Requests.RequestTypeOuterClass;
2726
import POGOProtos.Networking.Responses.GetInventoryResponseOuterClass.GetInventoryResponse;
@@ -44,27 +43,30 @@ public class Inventories {
4443
@Getter
4544
private CandyJar candyjar;
4645
@Getter
47-
private PlayerStatsOuterClass.PlayerStats stats;
46+
private Pokedex pokedex;
4847

4948
private long lastInventoryUpdate = 0;
5049

5150
/**
5251
* Creates Inventories and initializes content.
52+
*
5353
* @param api PokemonGo api
54-
* @throws LoginFailedException the login failed exception
54+
* @throws LoginFailedException the login failed exception
5555
* @throws RemoteServerException the remote server exception
5656
*/
5757
public Inventories(PokemonGo api) throws LoginFailedException, RemoteServerException {
5858
this.api = api;
5959
itemBag = new ItemBag(api);
6060
pokebank = new PokeBank(api);
6161
candyjar = new CandyJar(api);
62+
pokedex = new Pokedex(api);
6263
updateInventories();
6364
}
6465

6566
/**
6667
* Updates the inventories with latest data.
67-
* @throws LoginFailedException the login failed exception
68+
*
69+
* @throws LoginFailedException the login failed exception
6870
* @throws RemoteServerException the remote server exception
6971
*/
7072
public void updateInventories() throws LoginFailedException, RemoteServerException {
@@ -73,8 +75,9 @@ public void updateInventories() throws LoginFailedException, RemoteServerExcepti
7375

7476
/**
7577
* Updates the inventories with the latest data.
78+
*
7679
* @param forceUpdate For a full update if true
77-
* @throws LoginFailedException the login failed exception
80+
* @throws LoginFailedException the login failed exception
7881
* @throws RemoteServerException the remote server exception
7982
*/
8083
public void updateInventories(boolean forceUpdate) throws LoginFailedException, RemoteServerException {
@@ -83,13 +86,13 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
8386
itemBag = new ItemBag(api);
8487
pokebank = new PokeBank(api);
8588
candyjar = new CandyJar(api);
89+
pokedex = new Pokedex(api);
8690
}
8791
GetInventoryMessage invReqMsg = GetInventoryMessage.newBuilder()
8892
.setLastTimestampMs(lastInventoryUpdate)
8993
.build();
9094
ServerRequest inventoryRequest = new ServerRequest(RequestTypeOuterClass.RequestType.GET_INVENTORY, invReqMsg);
91-
api.getRequestHandler().request(inventoryRequest);
92-
api.getRequestHandler().sendServerRequests();
95+
api.getRequestHandler().sendServerRequests(inventoryRequest);
9396

9497
GetInventoryResponse response = null;
9598
try {
@@ -101,37 +104,28 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
101104
for (InventoryItemOuterClass.InventoryItem inventoryItem
102105
: response.getInventoryDelta().getInventoryItemsList()) {
103106
InventoryItemDataOuterClass.InventoryItemData itemData = inventoryItem.getInventoryItemData();
104-
if (inventoryItem.getDeletedItemKey() > 0) {
105-
if (itemData.getPokemonData().getPokemonId() != PokemonIdOuterClass.PokemonId.MISSINGNO) {
106-
pokebank.removePokemon(new Pokemon(inventoryItem.getInventoryItemData().getPokemonData()));
107-
}
108-
if (itemData.getItem().getItemId() != ItemIdOuterClass.ItemId.UNRECOGNIZED) {
109-
ItemOuterClass.Item item = inventoryItem.getInventoryItemData().getItem();
110-
itemBag.removeItem(inventoryItem.getInventoryItemData().getItem().getItemId(), item.getCount());
111-
}
112-
if (itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.UNRECOGNIZED) {
113-
candyjar.removeCandy(
114-
inventoryItem.getInventoryItemData().getPokemonFamily().getFamilyId(),
115-
inventoryItem.getInventoryItemData().getPokemonFamily().getCandy()
116-
);
117-
}
118-
} else {
119-
if (itemData.getPokemonData().getPokemonId() != PokemonIdOuterClass.PokemonId.MISSINGNO) {
120-
pokebank.addPokemon(new Pokemon(inventoryItem.getInventoryItemData().getPokemonData()));
121-
}
122-
if (itemData.getItem().getItemId() != ItemIdOuterClass.ItemId.UNRECOGNIZED) {
123-
ItemOuterClass.Item item = inventoryItem.getInventoryItemData().getItem();
124-
itemBag.addItem(new Item(item));
125-
}
126-
if (itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.UNRECOGNIZED) {
127-
candyjar.addCandy(
128-
inventoryItem.getInventoryItemData().getPokemonFamily().getFamilyId(),
129-
inventoryItem.getInventoryItemData().getPokemonFamily().getCandy()
130-
);
131-
}
132-
if (itemData.hasPlayerStats()) {
133-
stats = inventoryItem.getInventoryItemData().getPlayerStats();
134-
}
107+
108+
if (itemData.getPokemonData().getPokemonId() != PokemonIdOuterClass.PokemonId.MISSINGNO) {
109+
pokebank.addPokemon(new Pokemon(inventoryItem.getInventoryItemData().getPokemonData()));
110+
}
111+
if (itemData.getItem().getItemId() != ItemId.UNRECOGNIZED
112+
&& itemData.getItem().getItemId() != ItemId.ITEM_UNKNOWN) {
113+
ItemData item = inventoryItem.getInventoryItemData().getItem();
114+
itemBag.addItem(new Item(item));
115+
}
116+
if (itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.UNRECOGNIZED
117+
&& itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.FAMILY_UNSET) {
118+
candyjar.setCandy(
119+
inventoryItem.getInventoryItemData().getPokemonFamily().getFamilyId(),
120+
inventoryItem.getInventoryItemData().getPokemonFamily().getCandy()
121+
);
122+
}
123+
if (itemData.hasPlayerStats()) {
124+
api.getPlayerProfile().setStats(inventoryItem.getInventoryItemData().getPlayerStats());
125+
}
126+
127+
if (itemData.hasPokedexEntry()) {
128+
pokedex.add(itemData.getPokedexEntry());
135129
}
136130

137131
lastInventoryUpdate = System.currentTimeMillis();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515

1616
package com.pokegoapi.api.inventory;
1717

18-
import POGOProtos.Inventory.ItemIdOuterClass.ItemId;
19-
18+
import POGOProtos.Inventory.Item.ItemDataOuterClass;
19+
import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
2020

2121
public class Item {
22-
private POGOProtos.Inventory.ItemOuterClass.Item proto;
22+
private ItemDataOuterClass.ItemData proto;
2323
private int count;
2424

25-
public Item(POGOProtos.Inventory.ItemOuterClass.Item proto) {
25+
public Item(ItemDataOuterClass.ItemData proto) {
2626
this.proto = proto;
2727
this.count = proto.getCount();
2828
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616

1717
package com.pokegoapi.api.inventory;
1818

19-
import POGOProtos.Inventory.ItemIdOuterClass.ItemId;
20-
import POGOProtos.Inventory.ItemOuterClass;
19+
import POGOProtos.Inventory.Item.ItemDataOuterClass;
20+
import POGOProtos.Inventory.Item.ItemDataOuterClass.ItemData;
21+
import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
2122
import POGOProtos.Networking.Requests.Messages.RecycleInventoryItemMessageOuterClass.RecycleInventoryItemMessage;
2223
import POGOProtos.Networking.Requests.RequestTypeOuterClass;
2324
import POGOProtos.Networking.Responses.RecycleInventoryItemResponseOuterClass;
@@ -96,7 +97,7 @@ public Item getItem(ItemId type) {
9697

9798
// prevent returning null
9899
if (!items.containsKey(type)) {
99-
return new Item(ItemOuterClass.Item.newBuilder().setCount(0).setItemId(type).build());
100+
return new Item(ItemData.newBuilder().setCount(0).setItemId(type).build());
100101
}
101102

102103
return items.get(type);

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,19 @@
1515

1616
package com.pokegoapi.api.inventory;
1717

18+
import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
1819
import lombok.Getter;
1920

2021
public enum Pokeball {
21-
POKEBALL(1),
22-
GREATBALL(2),
23-
ULTRABALL(3),
24-
MASTERBALL(4);
22+
POKEBALL(ItemId.ITEM_POKE_BALL),
23+
GREATBALL(ItemId.ITEM_GREAT_BALL),
24+
ULTRABALL(ItemId.ITEM_ULTRA_BALL),
25+
MASTERBALL(ItemId.ITEM_MASTER_BALL);
2526

2627
@Getter
27-
private final int balltype;
28+
private final ItemId ballType;
2829

29-
Pokeball(int type) {
30-
balltype = type;
30+
Pokeball(ItemId type) {
31+
ballType = type;
3132
}
3233
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,37 @@
1515

1616
package com.pokegoapi.api.inventory;
1717

18+
import POGOProtos.Data.PokedexEntryOuterClass.PokedexEntry;
19+
import POGOProtos.Enums.PokemonIdOuterClass.PokemonId;
20+
import com.pokegoapi.api.PokemonGo;
21+
22+
import java.util.HashMap;
23+
import java.util.Map;
24+
1825
public class Pokedex {
1926

27+
private final PokemonGo api;
28+
private Map<PokemonId, PokedexEntry> pokedexMap = new HashMap();
29+
30+
public Pokedex(PokemonGo api) {
31+
this.api = api;
32+
}
33+
34+
/**
35+
* Add/Update a PokdexEntry.
36+
* @param entry The entry to add or update
37+
*/
38+
public void add(PokedexEntry entry) {
39+
PokemonId id = PokemonId.forNumber(entry.getPokemonId().getNumber());
40+
pokedexMap.put(id, entry);
41+
}
42+
43+
/**
44+
* Get a pokedex entry value.
45+
* @param pokemonId the ID of the pokemon to get
46+
* @return Entry if in pokedex or null if it doesn't
47+
*/
48+
public PokedexEntry getPokedexEntry(PokemonId pokemonId) {
49+
return pokedexMap.get(pokemonId);
50+
}
2051
}

src/main/java/com/pokegoapi/api/map/Map.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package com.pokegoapi.api.map;
1717

18+
import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
1819
import POGOProtos.Map.Fort.FortDataOuterClass.FortData;
1920
import POGOProtos.Map.Fort.FortTypeOuterClass.FortType;
2021
import POGOProtos.Map.MapCellOuterClass;
@@ -103,6 +104,13 @@ public List<CatchablePokemon> getCatchablePokemon() throws LoginFailedException,
103104
catchablePokemons.add(new CatchablePokemon(api, wildPokemon));
104105
}
105106

107+
// TODO: Check if this code is correct; merged because this contains many other fixes
108+
/*for (Pokestop pokestop : objects.getPokestops()) {
109+
if (pokestop.inRange() && pokestop.hasLurePokemon()) {
110+
catchablePokemons.add(new CatchablePokemon(api, pokestop.getFortData()));
111+
}
112+
}*/
113+
106114
return catchablePokemons;
107115
}
108116

@@ -408,7 +416,7 @@ public EncounterResponse encounterPokemon(MapPokemon catchablePokemon)
408416
.setEncounterId(catchablePokemon.getEncounterId())
409417
.setPlayerLatitude(api.getLatitude())
410418
.setPlayerLongitude(api.getLongitude())
411-
.setSpawnpointId(catchablePokemon.getSpawnpointId())
419+
.setSpawnPointId(catchablePokemon.getSpawnPointId())
412420
.build();
413421
ServerRequest serverRequest = new ServerRequest(RequestTypeOuterClass.RequestType.ENCOUNTER, reqMsg);
414422
api.getRequestHandler().sendServerRequests(serverRequest);
@@ -440,15 +448,15 @@ public CatchPokemonResponse catchPokemon(
440448
double normalizedHitPosition,
441449
double normalizedReticleSize,
442450
double spinModifier,
443-
int pokeball)
451+
ItemId pokeball)
444452
throws LoginFailedException, RemoteServerException {
445453

446454
CatchPokemonMessage reqMsg = CatchPokemonMessage.newBuilder()
447455
.setEncounterId(catchablePokemon.getEncounterId())
448456
.setHitPokemon(true)
449457
.setNormalizedHitPosition(normalizedHitPosition)
450458
.setNormalizedReticleSize(normalizedReticleSize)
451-
.setSpawnPointGuid(catchablePokemon.getSpawnpointId())
459+
.setSpawnPointGuid(catchablePokemon.getSpawnPointId())
452460
.setSpinModifier(spinModifier)
453461
.setPokeball(pokeball)
454462
.build();

src/main/java/com/pokegoapi/api/map/fort/Pokestop.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
public class Pokestop {
3636

3737
private final PokemonGo api;
38+
@Getter
3839
private final FortDataOuterClass.FortData fortData;
3940
@Getter
4041
private long cooldownCompleteTimestampMs;
@@ -52,6 +53,21 @@ public Pokestop(PokemonGo api, FortDataOuterClass.FortData fortData) {
5253
this.cooldownCompleteTimestampMs = fortData.getCooldownCompleteTimestampMs();
5354
}
5455

56+
/**
57+
* Returns whether or not a pokestop is in range.
58+
* @return true when in range of player
59+
*/
60+
public boolean inRange() {
61+
S2LatLng pokestop = S2LatLng.fromDegrees(getLatitude(), getLongitude());
62+
S2LatLng player = S2LatLng.fromDegrees(api.getLatitude(), api.getLongitude());
63+
double distance = pokestop.getEarthDistance(player);
64+
return distance < 30;
65+
}
66+
67+
/**
68+
* can user loot this from current position.
69+
* @return true when lootable
70+
*/
5571
public boolean canLoot() {
5672
return canLoot(false);
5773
}
@@ -63,10 +79,11 @@ public boolean canLoot() {
6379
* @return the boolean
6480
*/
6581
public boolean canLoot(boolean ignoreDistance) {
66-
S2LatLng pokestop = S2LatLng.fromDegrees(getLatitude(), getLongitude());
67-
S2LatLng player = S2LatLng.fromDegrees(api.getLatitude(), api.getLongitude());
68-
double distance = pokestop.getEarthDistance(player);
69-
return (ignoreDistance || distance < 30) && cooldownCompleteTimestampMs < System.currentTimeMillis();
82+
boolean active = cooldownCompleteTimestampMs < System.currentTimeMillis();
83+
if (!ignoreDistance) {
84+
return active && inRange();
85+
}
86+
return active;
7087
}
7188

7289
public String getId() {
@@ -134,5 +151,11 @@ public FortDetails getDetails() throws LoginFailedException, RemoteServerExcepti
134151
return new FortDetails(response);
135152
}
136153

137-
154+
/**
155+
* Returns whether this pokestop has an active lure.
156+
* @return lure status
157+
*/
158+
public boolean hasLurePokemon() {
159+
return fortData.hasLureInfo() && fortData.getLureInfo().getLureExpiresTimestampMs() < System.currentTimeMillis();
160+
}
138161
}

src/main/java/com/pokegoapi/api/map/fort/PokestopLootResult.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
package com.pokegoapi.api.map.fort;
1717

18-
import POGOProtos.Inventory.ItemAwardOuterClass;
18+
import POGOProtos.Inventory.Item.ItemAwardOuterClass.ItemAward;
1919
import POGOProtos.Networking.Responses.FortSearchResponseOuterClass;
2020
import POGOProtos.Networking.Responses.FortSearchResponseOuterClass.FortSearchResponse.Result;
2121

@@ -40,7 +40,7 @@ public Result getResult() {
4040
return response.getResult();
4141
}
4242

43-
public List<ItemAwardOuterClass.ItemAward> getItemsAwarded() {
43+
public List<ItemAward> getItemsAwarded() {
4444
return response.getItemsAwardedList();
4545
}
4646

0 commit comments

Comments
 (0)