diff --git a/src/main/java/com/pokegoapi/api/inventory/EggIncubator.java b/src/main/java/com/pokegoapi/api/inventory/EggIncubator.java
new file mode 100644
index 00000000..1521fa89
--- /dev/null
+++ b/src/main/java/com/pokegoapi/api/inventory/EggIncubator.java
@@ -0,0 +1,91 @@
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.pokegoapi.api.inventory;
+
+import POGOProtos.Inventory.EggIncubatorOuterClass;
+import POGOProtos.Networking.Requests.Messages.UseItemEggIncubatorMessageOuterClass.UseItemEggIncubatorMessage;
+import POGOProtos.Networking.Requests.RequestTypeOuterClass;
+import POGOProtos.Networking.Responses.UseItemEggIncubatorResponseOuterClass.UseItemEggIncubatorResponse;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.pokegoapi.api.PokemonGo;
+import com.pokegoapi.api.pokemon.EggPokemon;
+import com.pokegoapi.exceptions.LoginFailedException;
+import com.pokegoapi.exceptions.RemoteServerException;
+import com.pokegoapi.main.ServerRequest;
+import lombok.Getter;
+
+public class EggIncubator {
+ private final EggIncubatorOuterClass.EggIncubator proto;
+ private final PokemonGo pgo;
+ @Getter
+ private boolean inUse = false;
+
+ /**
+ * Create new EggIncubator with given proto.
+ *
+ * @param pgo the api
+ * @param proto the proto
+ */
+ public EggIncubator(PokemonGo pgo, EggIncubatorOuterClass.EggIncubator proto) {
+ this.pgo = pgo;
+ this.proto = proto;
+ this.inUse = proto.getPokemonId() != 0;
+ }
+
+ /**
+ * Returns the remaining uses.
+ *
+ * @return uses remaining
+ */
+ public int getUsesRemaining() {
+ return proto.getUsesRemaining();
+ }
+
+ /**
+ * Hatch an egg.
+ *
+ * @param egg the egg
+ * @return status of putting egg in incubator
+ * @throws RemoteServerException the remote server exception
+ * @throws LoginFailedException the login failed exception
+ */
+ public UseItemEggIncubatorResponse.Result hatchEgg(EggPokemon egg)
+ throws LoginFailedException, RemoteServerException {
+ if (!egg.getIsEgg()) {
+ return null;
+ }
+ UseItemEggIncubatorMessage reqMsg = UseItemEggIncubatorMessage.newBuilder()
+ .setItemId(proto.getId())
+ .setPokemonId(egg.getId())
+ .build();
+
+ ServerRequest serverRequest = new ServerRequest(RequestTypeOuterClass.RequestType.USE_ITEM_EGG_INCUBATOR, reqMsg);
+ pgo.getRequestHandler().sendServerRequests(serverRequest);
+
+ UseItemEggIncubatorResponse response;
+ try {
+ response = UseItemEggIncubatorResponse.parseFrom(serverRequest.getData());
+ } catch (InvalidProtocolBufferException e) {
+ throw new RemoteServerException(e);
+ }
+
+ pgo.getInventories().updateInventories(true);
+
+ this.inUse = true;
+
+ return response.getResult();
+ }
+}
diff --git a/src/main/java/com/pokegoapi/api/inventory/Inventories.java b/src/main/java/com/pokegoapi/api/inventory/Inventories.java
index 974d486e..ab41960f 100644
--- a/src/main/java/com/pokegoapi/api/inventory/Inventories.java
+++ b/src/main/java/com/pokegoapi/api/inventory/Inventories.java
@@ -16,8 +16,8 @@
package com.pokegoapi.api.inventory;
import POGOProtos.Enums.PokemonFamilyIdOuterClass;
-import POGOProtos.Enums.PokemonIdOuterClass;
import POGOProtos.Enums.PokemonIdOuterClass.PokemonId;
+import POGOProtos.Inventory.EggIncubatorOuterClass;
import POGOProtos.Inventory.InventoryItemDataOuterClass;
import POGOProtos.Inventory.InventoryItemOuterClass;
import POGOProtos.Inventory.Item.ItemDataOuterClass.ItemData;
@@ -34,6 +34,9 @@
import com.pokegoapi.main.ServerRequest;
import lombok.Getter;
+import java.util.ArrayList;
+import java.util.List;
+
public class Inventories {
@@ -47,6 +50,8 @@ public class Inventories {
@Getter
private Pokedex pokedex;
@Getter
+ private List incubators;
+ @Getter
private Hatchery hatchery;
private long lastInventoryUpdate = 0;
@@ -64,6 +69,7 @@ public Inventories(PokemonGo api) throws LoginFailedException, RemoteServerExcep
pokebank = new PokeBank(api);
candyjar = new CandyJar(api);
pokedex = new Pokedex(api);
+ incubators = new ArrayList<>();
hatchery = new Hatchery(api);
updateInventories();
}
@@ -92,6 +98,8 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
pokebank = new PokeBank(api);
candyjar = new CandyJar(api);
pokedex = new Pokedex(api);
+ incubators = new ArrayList<>();
+ hatchery = new Hatchery(api);
}
GetInventoryMessage invReqMsg = GetInventoryMessage.newBuilder()
.setLastTimestampMs(lastInventoryUpdate)
@@ -103,7 +111,7 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
try {
response = GetInventoryResponse.parseFrom(inventoryRequest.getData());
} catch (InvalidProtocolBufferException e) {
- e.printStackTrace();
+ throw new RemoteServerException(e);
}
for (InventoryItemOuterClass.InventoryItem inventoryItem
@@ -123,7 +131,7 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
// items
if (itemData.getItem().getItemId() != ItemId.UNRECOGNIZED
&& itemData.getItem().getItemId() != ItemId.ITEM_UNKNOWN) {
- ItemData item = inventoryItem.getInventoryItemData().getItem();
+ ItemData item = itemData.getItem();
itemBag.addItem(new Item(item));
}
@@ -131,13 +139,13 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
if (itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.UNRECOGNIZED
&& itemData.getPokemonFamily().getFamilyId() != PokemonFamilyIdOuterClass.PokemonFamilyId.FAMILY_UNSET) {
candyjar.setCandy(
- inventoryItem.getInventoryItemData().getPokemonFamily().getFamilyId(),
- inventoryItem.getInventoryItemData().getPokemonFamily().getCandy()
+ itemData.getPokemonFamily().getFamilyId(),
+ itemData.getPokemonFamily().getCandy()
);
}
// player stats
if (itemData.hasPlayerStats()) {
- api.getPlayerProfile().setStats(inventoryItem.getInventoryItemData().getPlayerStats());
+ api.getPlayerProfile().setStats(itemData.getPlayerStats());
}
// pokedex
@@ -145,6 +153,12 @@ public void updateInventories(boolean forceUpdate) throws LoginFailedException,
pokedex.add(itemData.getPokedexEntry());
}
+ if (itemData.hasEggIncubators()) {
+ for (EggIncubatorOuterClass.EggIncubator incubator : itemData.getEggIncubators().getEggIncubatorList()) {
+ incubators.add(new EggIncubator(api, incubator));
+ }
+ }
+
lastInventoryUpdate = System.currentTimeMillis();
}
}
diff --git a/src/main/java/com/pokegoapi/api/inventory/PokeBank.java b/src/main/java/com/pokegoapi/api/inventory/PokeBank.java
index f3d1de05..fe40c054 100644
--- a/src/main/java/com/pokegoapi/api/inventory/PokeBank.java
+++ b/src/main/java/com/pokegoapi/api/inventory/PokeBank.java
@@ -54,8 +54,6 @@ public boolean test(Pokemon testPokemon) {
}
}
-
-
/**
* Gets pokemon by pokemon id.
*
diff --git a/src/main/java/com/pokegoapi/api/pokemon/EggPokemon.java b/src/main/java/com/pokegoapi/api/pokemon/EggPokemon.java
index 82c8e044..120744b6 100644
--- a/src/main/java/com/pokegoapi/api/pokemon/EggPokemon.java
+++ b/src/main/java/com/pokegoapi/api/pokemon/EggPokemon.java
@@ -13,49 +13,16 @@
* along with this program. If not, see .
*/
-/*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
package com.pokegoapi.api.pokemon;
import POGOProtos.Data.PokemonDataOuterClass.PokemonData;
-import POGOProtos.Enums.PokemonFamilyIdOuterClass.PokemonFamilyId;
-import POGOProtos.Enums.PokemonIdOuterClass;
-import POGOProtos.Enums.PokemonMoveOuterClass;
-import POGOProtos.Inventory.Item.ItemIdOuterClass.ItemId;
-import POGOProtos.Networking.Requests.Messages.EvolvePokemonMessageOuterClass.EvolvePokemonMessage;
-import POGOProtos.Networking.Requests.Messages.NicknamePokemonMessageOuterClass.NicknamePokemonMessage;
-import POGOProtos.Networking.Requests.Messages.ReleasePokemonMessageOuterClass.ReleasePokemonMessage;
-import POGOProtos.Networking.Requests.RequestTypeOuterClass.RequestType;
-import POGOProtos.Networking.Responses.EvolvePokemonResponseOuterClass.EvolvePokemonResponse;
-import POGOProtos.Networking.Responses.NicknamePokemonResponseOuterClass.NicknamePokemonResponse;
-import POGOProtos.Networking.Responses.ReleasePokemonResponseOuterClass.ReleasePokemonResponse;
-import POGOProtos.Networking.Responses.ReleasePokemonResponseOuterClass.ReleasePokemonResponse.Result;
-import com.google.protobuf.InvalidProtocolBufferException;
import com.pokegoapi.api.PokemonGo;
-import com.pokegoapi.api.map.pokemon.EvolutionResult;
-import com.pokegoapi.exceptions.LoginFailedException;
-import com.pokegoapi.exceptions.RemoteServerException;
-import com.pokegoapi.main.ServerRequest;
-import com.pokegoapi.util.Log;
import lombok.Setter;
/**
* The egg pokemon.
*/
-public class EggPokemon {
+public class EggPokemon {
private static final String TAG = EggPokemon.class.getSimpleName();
@Setter
@@ -93,6 +60,9 @@ public long getCreationTimeMs() {
return proto.getCreationTimeMs();
}
+ public String getEggIncubatorId() {
+ return proto.getEggIncubatorId();
+ }
@Override
public int hashCode() {