diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/templeosrs/templeOSRS.java b/runelite-client/src/main/java/net/runelite/client/plugins/templeosrs/templeOSRS.java deleted file mode 100644 index 21f065eca3..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/templeosrs/templeOSRS.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2020, Elias - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.templeosrs; - -import java.io.IOException; -import java.util.Objects; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Client; -import net.runelite.api.GameState; -import net.runelite.api.Player; -import net.runelite.api.events.GameStateChanged; -import net.runelite.api.events.GameTick; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.http.api.RuneLiteAPI; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import org.jetbrains.annotations.NotNull; - -@PluginDescriptor( - name = "TempleOSRS", - description = "Automatically updates your stats on TempleOSRS when you log out", - tags = {"external", "integration"}, - enabledByDefault = false, - type = PluginType.MISCELLANEOUS -) -@Slf4j -@Singleton -public class templeOSRS extends Plugin -{ - /** - * Amount of EXP that must be gained for an update to be submitted. - */ - private static final int XP_THRESHOLD = 10000; - - @Inject - private Client client; - - @Inject - private EventBus eventBus; - - private String lastUsername; - private boolean fetchXp; - private long lastXp; - - @Override - protected void startUp() - { - fetchXp = true; - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - - @Override - protected void shutDown() - { - eventBus.unregister(this); - } - - - private void onGameStateChanged(GameStateChanged gameStateChanged) - { - GameState state = gameStateChanged.getGameState(); - if (state == GameState.LOGGED_IN) - { - if (!Objects.equals(client.getUsername(), lastUsername)) - { - lastUsername = client.getUsername(); - fetchXp = true; - } - } - else if (state == GameState.LOGIN_SCREEN) - { - Player local = client.getLocalPlayer(); - if (local == null) - { - return; - } - - long totalXp = client.getOverallExperience(); - // 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()); - lastXp = totalXp; - } - } - } - - private void onGameTick(GameTick gameTick) - { - if (fetchXp) - { - lastXp = client.getOverallExperience(); - fetchXp = false; - } - } - - private void sendUpdateRequest(String username) - { - String reformedUsername = username.replace(" ", "_"); - OkHttpClient httpClient = RuneLiteAPI.CLIENT; - HttpUrl httpUrl = new HttpUrl.Builder() - .scheme("https") - .host("templeosrs.com") - .addPathSegment("php") - .addPathSegment("add_datapoint.php") - .addQueryParameter("player", reformedUsername) - .build(); - - Request request = new Request.Builder() - .header("User-Agent", "OpenOSRS") - .url(httpUrl) - .build(); - - httpClient.newCall(request).enqueue(new Callback() - { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) - { - log.warn("Error submitting TempleOSRS update, caused by {}.", e.getMessage()); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) - { - response.close(); - } - }); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterConfig.java new file mode 100644 index 0000000000..722a2ce44f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterConfig.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020, Alexsuperfly + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.xpupdater; + +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigItem; + +@ConfigGroup("xpupdater") +public interface XpUpdaterConfig +{ + @ConfigItem( + position = 1, + keyName = "cml", + name = "Crystal Math Labs", + description = "Automatically updates your stats on crystalmathlabs.com when you log out" + ) + default boolean cml() + { + return false; + } + + @ConfigItem( + position = 2, + keyName = "templeosrs", + name = "TempleOSRS", + description = "Automatically updates your stats on templeosrs.com when you log out" + ) + default boolean templeosrs() + { + return false; + } +} 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/xpupdater/XpUpdaterPlugin.java similarity index 62% rename from runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java rename to runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java index 248d45c2e8..aeee121202 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, Adam + * Copyright (c) 2020, Alexsuperfly * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,18 +23,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.crystalmathlabs; +package net.runelite.client.plugins.xpupdater; import java.io.IOException; import java.util.Objects; import javax.inject.Inject; -import javax.inject.Singleton; +import com.google.inject.Provides; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; +import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -48,15 +50,14 @@ import okhttp3.Response; import org.jetbrains.annotations.NotNull; @PluginDescriptor( - name = "Crystal Math Labs", - description = "Automatically updates your stats on Crystal Math Labs when you log out", - tags = {"cml", "external", "integration"}, + name = "XP Updater", + description = "Automatically updates your stats on external xptrackers when you log out", + tags = {"cml", "templeosrs", "temple", "external", "integration"}, enabledByDefault = false, type = PluginType.MISCELLANEOUS ) @Slf4j -@Singleton -public class CrystalMathLabs extends Plugin +public class XpUpdaterPlugin extends Plugin { /** * Amount of EXP that must be gained for an update to be submitted. @@ -65,7 +66,7 @@ public class CrystalMathLabs extends Plugin @Inject private Client client; - + @Inject private EventBus eventBus; @@ -73,22 +74,31 @@ public class CrystalMathLabs extends Plugin private boolean fetchXp; private long lastXp; + @Inject + private XpUpdaterConfig config; + + @Provides + XpUpdaterConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(XpUpdaterConfig.class); + } + @Override protected void startUp() { fetchXp = true; - + eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); eventBus.subscribe(GameTick.class, this, this::onGameTick); } - + @Override protected void shutDown() { eventBus.unregister(this); } - private void onGameStateChanged(GameStateChanged gameStateChanged) + public void onGameStateChanged(GameStateChanged gameStateChanged) { GameState state = gameStateChanged.getGameState(); if (state == GameState.LOGGED_IN) @@ -118,7 +128,7 @@ public class CrystalMathLabs extends Plugin } } - private void onGameTick(GameTick gameTick) + public void onGameTick(GameTick gameTick) { if (fetchXp) { @@ -132,33 +142,67 @@ public class CrystalMathLabs extends Plugin String reformedUsername = username.replace(" ", "_"); OkHttpClient httpClient = RuneLiteAPI.CLIENT; - HttpUrl httpUrl = new HttpUrl.Builder() - .scheme("https") - .host("crystalmathlabs.com") - .addPathSegment("tracker") - .addPathSegment("api.php") - .addQueryParameter("type", "update") - .addQueryParameter("player", reformedUsername) - .build(); - - Request request = new Request.Builder() - .header("User-Agent", "RuneLite") - .url(httpUrl) - .build(); - - httpClient.newCall(request).enqueue(new Callback() + if (config.cml()) { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) - { - log.warn("Error submitting CML update, caused by {}.", e.getMessage()); - } + HttpUrl url = new HttpUrl.Builder() + .scheme("https") + .host("crystalmathlabs.com") + .addPathSegment("tracker") + .addPathSegment("api.php") + .addQueryParameter("type", "update") + .addQueryParameter("player", reformedUsername) + .build(); - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) + Request request = new Request.Builder() + .header("User-Agent", "OpenOSRS") + .url(url) + .build(); + + httpClient.newCall(request).enqueue(new Callback() { - response.close(); - } - }); + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) + { + log.warn("Error submitting CML update, caused by {}.", e.getMessage()); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) + { + response.close(); + } + }); + } + + if (config.templeosrs()) + { + HttpUrl url = new HttpUrl.Builder() + .scheme("https") + .host("templeosrs.com") + .addPathSegment("php") + .addPathSegment("add_datapoint.php") + .addQueryParameter("player", reformedUsername) + .build(); + + Request request = new Request.Builder() + .header("User-Agent", "OpenOSRS") + .url(url) + .build(); + + httpClient.newCall(request).enqueue(new Callback() + { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) + { + log.warn("Error submitting TempleOSRS update, caused by {}.", e.getMessage()); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) + { + response.close(); + } + }); + } } } \ No newline at end of file