Skip to content

Commit 21892d6

Browse files
committed
Merge branch 'feature/captureLures' into mjmfighter-catch_fix
2 parents cf857fe + c3cdfb0 commit 21892d6

8 files changed

Lines changed: 89 additions & 35 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/map/Map.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.google.protobuf.InvalidProtocolBufferException;
3838
import com.pokegoapi.api.PokemonGo;
3939
import com.pokegoapi.api.map.fort.FortDetails;
40+
import com.pokegoapi.api.map.fort.Pokestop;
4041
import com.pokegoapi.api.map.pokemon.CatchablePokemon;
4142
import com.pokegoapi.api.map.pokemon.NearbyPokemon;
4243
import com.pokegoapi.exceptions.LoginFailedException;
@@ -103,6 +104,12 @@ public List<CatchablePokemon> getCatchablePokemon() throws LoginFailedException,
103104
catchablePokemons.add(new CatchablePokemon(api, wildPokemon));
104105
}
105106

107+
for (Pokestop pokestop : objects.getPokestops()) {
108+
if (pokestop.inRange() && pokestop.hasLurePokemon()) {
109+
catchablePokemons.add(new CatchablePokemon(api, pokestop.getFortData()));
110+
}
111+
}
112+
106113
return catchablePokemons;
107114
}
108115

@@ -408,7 +415,7 @@ public EncounterResponse encounterPokemon(MapPokemon catchablePokemon)
408415
.setEncounterId(catchablePokemon.getEncounterId())
409416
.setPlayerLatitude(api.getLatitude())
410417
.setPlayerLongitude(api.getLongitude())
411-
.setSpawnpointId(catchablePokemon.getSpawnpointId())
418+
.setSpawnPointId(catchablePokemon.getSpawnPointId())
412419
.build();
413420
ServerRequest serverRequest = new ServerRequest(RequestTypeOuterClass.RequestType.ENCOUNTER, reqMsg);
414421
api.getRequestHandler().sendServerRequests(serverRequest);
@@ -448,7 +455,7 @@ public CatchPokemonResponse catchPokemon(
448455
.setHitPokemon(true)
449456
.setNormalizedHitPosition(normalizedHitPosition)
450457
.setNormalizedReticleSize(normalizedReticleSize)
451-
.setSpawnPointGuid(catchablePokemon.getSpawnpointId())
458+
.setSpawnPointGuid(catchablePokemon.getSpawnPointId())
452459
.setSpinModifier(spinModifier)
453460
.setPokeball(pokeball)
454461
.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/pokemon/CatchablePokemon.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717

1818
import POGOProtos.Enums.PokemonIdOuterClass;
1919
import POGOProtos.Inventory.ItemIdOuterClass;
20+
import POGOProtos.Map.Fort.FortDataOuterClass;
21+
import POGOProtos.Map.Fort.FortDataOuterClass.FortData;
22+
import POGOProtos.Map.Fort.FortLureInfoOuterClass;
23+
import POGOProtos.Map.Fort.FortLureInfoOuterClass.FortLureInfo;
2024
import POGOProtos.Map.Pokemon.MapPokemonOuterClass.MapPokemon;
2125
import POGOProtos.Map.Pokemon.WildPokemonOuterClass.WildPokemon;
2226
import POGOProtos.Networking.Requests.Messages.CatchPokemonMessageOuterClass.CatchPokemonMessage;
@@ -29,9 +33,11 @@
2933
import com.pokegoapi.api.PokemonGo;
3034
import com.pokegoapi.api.inventory.ItemBag;
3135
import com.pokegoapi.api.inventory.Pokeball;
36+
import com.pokegoapi.api.map.fort.Pokestop;
3237
import com.pokegoapi.exceptions.LoginFailedException;
3338
import com.pokegoapi.exceptions.RemoteServerException;
3439
import com.pokegoapi.main.ServerRequest;
40+
import com.pokegoapi.util.Log;
3541
import lombok.Getter;
3642
import lombok.ToString;
3743

@@ -44,7 +50,7 @@ public class CatchablePokemon {
4450
private final PokemonGo api;
4551

4652
@Getter
47-
private final String spawnpointId;
53+
private final String spawnPointId;
4854
@Getter
4955
private final long encounterId;
5056
@Getter
@@ -68,7 +74,7 @@ public class CatchablePokemon {
6874
public CatchablePokemon(PokemonGo api, MapPokemon proto) {
6975
this.api = api;
7076

71-
this.spawnpointId = proto.getSpawnpointId();
77+
this.spawnPointId = proto.getSpawnPointId();
7278
this.encounterId = proto.getEncounterId();
7379
this.pokemonId = proto.getPokemonId();
7480
this.expirationTimestampMs = proto.getExpirationTimestampMs();
@@ -85,14 +91,33 @@ public CatchablePokemon(PokemonGo api, MapPokemon proto) {
8591
*/
8692
public CatchablePokemon(PokemonGo api, WildPokemon proto) {
8793
this.api = api;
88-
this.spawnpointId = proto.getSpawnpointId();
94+
this.spawnPointId = proto.getSpawnPointId();
8995
this.encounterId = proto.getEncounterId();
9096
this.pokemonId = proto.getPokemonData().getPokemonId();
9197
this.expirationTimestampMs = proto.getTimeTillHiddenMs();
9298
this.latitude = proto.getLatitude();
9399
this.longitude = proto.getLongitude();
94100
}
95101

102+
/**
103+
* Instantiates a new Catchable pokemon.
104+
*
105+
* @param api the api
106+
* @param proto the proto
107+
*/
108+
public CatchablePokemon(PokemonGo api, FortData proto) {
109+
if (!proto.hasLureInfo()) {
110+
throw new IllegalArgumentException("Fort does not have lure");
111+
}
112+
this.api = api;
113+
// TODO: does this work?
114+
this.spawnPointId = null;
115+
this.encounterId = proto.getLureInfo().getEncounterId();
116+
this.pokemonId = proto.getLureInfo().getActivePokemonId();
117+
this.expirationTimestampMs = proto.getLureInfo().getLureExpiresTimestampMs();
118+
this.latitude = proto.getLatitude();
119+
this.longitude = proto.getLongitude();
120+
}
96121

97122
/**
98123
* Encounter pokemon encounter result.
@@ -106,7 +131,7 @@ public EncounterResult encounterPokemon() throws LoginFailedException, RemoteSer
106131
.setEncounterId(getEncounterId())
107132
.setPlayerLatitude(api.getLatitude())
108133
.setPlayerLongitude(api.getLongitude())
109-
.setSpawnpointId(getSpawnpointId())
134+
.setSpawnPointId(getSpawnPointId())
110135
.build();
111136
ServerRequest serverRequest = new ServerRequest(RequestTypeOuterClass.RequestType.ENCOUNTER, reqMsg);
112137
api.getRequestHandler().sendServerRequests(serverRequest);
@@ -197,7 +222,7 @@ public CatchResult catchPokemon(
197222
.setHitPokemon(true)
198223
.setNormalizedHitPosition(normalizedHitPosition)
199224
.setNormalizedReticleSize(normalizedReticleSize)
200-
.setSpawnPointGuid(getSpawnpointId())
225+
.setSpawnPointGuid(getSpawnPointId())
201226
.setSpinModifier(spinModifier)
202227
.setPokeball(type.getBalltype())
203228
.build();
@@ -223,5 +248,4 @@ public CatchResult catchPokemon(
223248
return new CatchResult(response);
224249
}
225250

226-
227251
}

src/main/java/com/pokegoapi/api/pokemon/Pokemon.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public int getBattlesDefended() {
248248
return proto.getBattlesDefended();
249249
}
250250

251-
public int getEggIncubatorId() {
251+
public String getEggIncubatorId() {
252252
return proto.getEggIncubatorId();
253253
}
254254

src/main/java/com/pokegoapi/api/pokemon/PokemonFamilyMap.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class PokemonFamilyMap {
3030
familys.put(PokemonId.IVYSAUR, PokemonFamilyId.FAMILY_BULBASAUR);
3131
familys.put(PokemonId.VENUSAUR, PokemonFamilyId.FAMILY_BULBASAUR);
3232
highestForFamily.put(PokemonFamilyId.FAMILY_BULBASAUR, PokemonId.VENUSAUR);
33-
familys.put(PokemonId.CHARMENDER, PokemonFamilyId.FAMILY_CHARMANDER);
33+
familys.put(PokemonId.CHARMANDER, PokemonFamilyId.FAMILY_CHARMANDER);
3434
familys.put(PokemonId.CHARMELEON, PokemonFamilyId.FAMILY_CHARMANDER);
3535
familys.put(PokemonId.CHARIZARD, PokemonFamilyId.FAMILY_CHARMANDER);
3636
highestForFamily.put(PokemonFamilyId.FAMILY_CHARMANDER, PokemonId.CHARIZARD);
@@ -63,17 +63,17 @@ public class PokemonFamilyMap {
6363
familys.put(PokemonId.RAICHU, PokemonFamilyId.FAMILY_PIKACHU);
6464
highestForFamily.put(PokemonFamilyId.FAMILY_PIKACHU, PokemonId.RAICHU);
6565
familys.put(PokemonId.SANDSHREW, PokemonFamilyId.FAMILY_SANDSHREW);
66-
familys.put(PokemonId.SANDLASH, PokemonFamilyId.FAMILY_SANDSHREW);
67-
highestForFamily.put(PokemonFamilyId.FAMILY_SANDSHREW, PokemonId.SANDLASH);
68-
familys.put(PokemonId.NIDORAN_FEMALE, PokemonFamilyId.FAMILY_NIDORAN);
69-
familys.put(PokemonId.NIDORINA, PokemonFamilyId.FAMILY_NIDORAN);
70-
familys.put(PokemonId.NIDOQUEEN, PokemonFamilyId.FAMILY_NIDORAN);
71-
highestForFamily.put(PokemonFamilyId.FAMILY_NIDORAN, PokemonId.NIDOQUEEN);
72-
familys.put(PokemonId.NIDORAN_MALE, PokemonFamilyId.FAMILY_NIDORAN2);
73-
familys.put(PokemonId.NIDORINO, PokemonFamilyId.FAMILY_NIDORAN2);
74-
familys.put(PokemonId.NIDOKING, PokemonFamilyId.FAMILY_NIDORAN2);
75-
highestForFamily.put(PokemonFamilyId.FAMILY_NIDORAN2, PokemonId.NIDOKING);
76-
familys.put(PokemonId.CLEFARY, PokemonFamilyId.FAMILY_CLEFAIRY);
66+
familys.put(PokemonId.SANDSLASH, PokemonFamilyId.FAMILY_SANDSHREW);
67+
highestForFamily.put(PokemonFamilyId.FAMILY_SANDSHREW, PokemonId.SANDSLASH);
68+
familys.put(PokemonId.NIDORAN_FEMALE, PokemonFamilyId.FAMILY_NIDORAN_FEMALE);
69+
familys.put(PokemonId.NIDORINA, PokemonFamilyId.FAMILY_NIDORAN_FEMALE);
70+
familys.put(PokemonId.NIDOQUEEN, PokemonFamilyId.FAMILY_NIDORAN_FEMALE);
71+
highestForFamily.put(PokemonFamilyId.FAMILY_NIDORAN_FEMALE, PokemonId.NIDOQUEEN);
72+
familys.put(PokemonId.NIDORAN_MALE, PokemonFamilyId.FAMILY_NIDORAN_MALE);
73+
familys.put(PokemonId.NIDORINO, PokemonFamilyId.FAMILY_NIDORAN_MALE);
74+
familys.put(PokemonId.NIDOKING, PokemonFamilyId.FAMILY_NIDORAN_MALE);
75+
highestForFamily.put(PokemonFamilyId.FAMILY_NIDORAN_MALE, PokemonId.NIDOKING);
76+
familys.put(PokemonId.CLEFAIRY, PokemonFamilyId.FAMILY_CLEFAIRY);
7777
familys.put(PokemonId.CLEFABLE, PokemonFamilyId.FAMILY_CLEFAIRY);
7878
highestForFamily.put(PokemonFamilyId.FAMILY_CLEFAIRY, PokemonId.CLEFABLE);
7979
familys.put(PokemonId.VULPIX, PokemonFamilyId.FAMILY_VULPIX);
@@ -116,20 +116,20 @@ public class PokemonFamilyMap {
116116
highestForFamily.put(PokemonFamilyId.FAMILY_POLIWAG, PokemonId.POLIWRATH);
117117
familys.put(PokemonId.ABRA, PokemonFamilyId.FAMILY_ABRA);
118118
familys.put(PokemonId.KADABRA, PokemonFamilyId.FAMILY_ABRA);
119-
familys.put(PokemonId.ALAKHAZAM, PokemonFamilyId.FAMILY_ABRA);
120-
highestForFamily.put(PokemonFamilyId.FAMILY_ABRA, PokemonId.ALAKHAZAM);
119+
familys.put(PokemonId.ALAKAZAM, PokemonFamilyId.FAMILY_ABRA);
120+
highestForFamily.put(PokemonFamilyId.FAMILY_ABRA, PokemonId.ALAKAZAM);
121121
familys.put(PokemonId.MACHOP, PokemonFamilyId.FAMILY_MACHOP);
122122
familys.put(PokemonId.MACHOKE, PokemonFamilyId.FAMILY_MACHOP);
123123
familys.put(PokemonId.MACHAMP, PokemonFamilyId.FAMILY_MACHOP);
124124
highestForFamily.put(PokemonFamilyId.FAMILY_MACHOP, PokemonId.MACHAMP);
125125
familys.put(PokemonId.BELLSPROUT, PokemonFamilyId.FAMILY_BELLSPROUT);
126126
familys.put(PokemonId.WEEPINBELL, PokemonFamilyId.FAMILY_BELLSPROUT);
127-
familys.put(PokemonId.VICTREEBELL, PokemonFamilyId.FAMILY_BELLSPROUT);
128-
highestForFamily.put(PokemonFamilyId.FAMILY_BELLSPROUT, PokemonId.VICTREEBELL);
127+
familys.put(PokemonId.VICTREEBEL, PokemonFamilyId.FAMILY_BELLSPROUT);
128+
highestForFamily.put(PokemonFamilyId.FAMILY_BELLSPROUT, PokemonId.VICTREEBEL);
129129
familys.put(PokemonId.TENTACOOL, PokemonFamilyId.FAMILY_TENTACOOL);
130130
familys.put(PokemonId.TENTACRUEL, PokemonFamilyId.FAMILY_TENTACOOL);
131131
highestForFamily.put(PokemonFamilyId.FAMILY_TENTACOOL, PokemonId.TENTACRUEL);
132-
familys.put(PokemonId.GEODUGE, PokemonFamilyId.FAMILY_GEODUDE);
132+
familys.put(PokemonId.GEODUDE, PokemonFamilyId.FAMILY_GEODUDE);
133133
familys.put(PokemonId.GRAVELER, PokemonFamilyId.FAMILY_GEODUDE);
134134
familys.put(PokemonId.GOLEM, PokemonFamilyId.FAMILY_GEODUDE);
135135
highestForFamily.put(PokemonFamilyId.FAMILY_GEODUDE, PokemonId.GOLEM);

src/main/java/com/pokegoapi/main/RequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ private void resetBuilder() {
246246
private void resetBuilder(RequestEnvelopeOuterClass.RequestEnvelope.Builder builder) {
247247
builder.setStatusCode(2);
248248
builder.setRequestId(8145806132888207460L);
249-
if (lastAuth != null
250-
&& lastAuth.getExpireTimestampMs() > 0
249+
if (lastAuth != null
250+
&& lastAuth.getExpireTimestampMs() > 0
251251
&& lastAuth.getExpireTimestampMs() > System.currentTimeMillis()) {
252252
builder.setAuthTicket(lastAuth);
253253
} else {

src/resources/protobuf

Submodule protobuf updated 238 files

0 commit comments

Comments
 (0)