diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java index 528550827c..cd5cf417e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java @@ -25,11 +25,13 @@ package net.runelite.client.plugins.crystalmathlabs; import java.io.IOException; +import java.util.Objects; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; +import net.runelite.api.Skill; import net.runelite.api.events.GameStateChanged; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; @@ -51,17 +53,40 @@ import okhttp3.Response; @Slf4j public class CrystalMathLabs extends Plugin { + /** + * Amount of EXP that must be gained for an update to be submitted. + */ + private static final int XP_THRESHOLD = 1000; + @Inject private Client client; + private String lastUsername; + private long lastXp; + @Subscribe public void onGameStateChanged(GameStateChanged gameStateChanged) { GameState state = gameStateChanged.getGameState(); - if (state == GameState.LOGIN_SCREEN) + if (state == GameState.LOGGED_IN) + { + if (!Objects.equals(client.getUsername(), lastUsername)) + { + lastUsername = client.getUsername(); + lastXp = getTotalXp(); + } + } + else if (state == GameState.LOGIN_SCREEN) { Player local = client.getLocalPlayer(); - if (local != null) + if (local == null) + { + return; + } + + long totalXp = getTotalXp(); + // Don't submit update unless xp threshold is reached + if (Math.abs(totalXp - lastXp) > XP_THRESHOLD) { log.debug("Submitting update for {}", local.getName()); sendUpdateRequest(local.getName()); @@ -69,6 +94,16 @@ public class CrystalMathLabs extends Plugin } } + private long getTotalXp() + { + long total = 0; + for (Skill skill : Skill.values()) + { + total += client.getSkillExperience(skill); + } + return total; + } + private void sendUpdateRequest(String username) { String reformedUsername = username.replace(" ", "_");