diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java index a5ad68443c..e4ee2c22b9 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java @@ -47,17 +47,8 @@ public class XteaClient private static final Logger logger = LoggerFactory.getLogger(XteaClient.class); - public void submit(int revision, int region, int[] keys) + public void submit(XteaRequest xteaRequest) { - XteaRequest xteaRequest = new XteaRequest(); - xteaRequest.setRevision(revision); - - XteaKey xteaKey = new XteaKey(); - xteaKey.setRegion(region); - xteaKey.setKeys(keys); - - xteaRequest.addKey(xteaKey); - String json = RuneLiteAPI.GSON.toJson(xteaRequest); HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java index 8c629c6397..22d081ad1d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java @@ -30,10 +30,13 @@ import java.util.Set; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; -import net.runelite.api.events.MapRegionChanged; +import net.runelite.api.GameState; +import net.runelite.api.events.GameStateChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.http.api.xtea.XteaClient; +import net.runelite.http.api.xtea.XteaKey; +import net.runelite.http.api.xtea.XteaRequest; @PluginDescriptor( name = "Xtea", @@ -50,32 +53,45 @@ public class XteaPlugin extends Plugin private Client client; @Subscribe - public void onMapRegionChanged(MapRegionChanged event) + public void onGameStateChanged(GameStateChanged gameStateChanged) { - int idx = event.getIndex(); - - if (idx == -1) + if (gameStateChanged.getGameState() != GameState.LOGGED_IN) { - return; // this is the new array being assigned to the field + return; } int revision = client.getRevision(); int[] regions = client.getMapRegions(); int[][] xteaKeys = client.getXteaKeys(); - int region = regions[idx]; - int[] keys = xteaKeys[idx]; + XteaRequest xteaRequest = new XteaRequest(); + xteaRequest.setRevision(revision); - log.debug("Region {} keys {}, {}, {}, {}", region, keys[0], keys[1], keys[2], keys[3]); + for (int idx = 0; idx < regions.length; ++idx) + { + int region = regions[idx]; + int[] keys = xteaKeys[idx]; - // No need to ever send more than once - if (sentRegions.contains(region)) + if (sentRegions.contains(region)) + { + continue; + } + + sentRegions.add(region); + + log.debug("Region {} keys {}, {}, {}, {}", region, keys[0], keys[1], keys[2], keys[3]); + + XteaKey xteaKey = new XteaKey(); + xteaKey.setRegion(region); + xteaKey.setKeys(keys); + xteaRequest.addKey(xteaKey); + } + + if (xteaRequest.getKeys().isEmpty()) { return; } - sentRegions.add(region); - - xteaClient.submit(revision, region, keys); + xteaClient.submit(xteaRequest); } }