From a103da9118ecc929e0037ff97e66182d24b8b38a Mon Sep 17 00:00:00 2001 From: Ron Young Date: Thu, 31 Oct 2019 12:21:05 -0500 Subject: [PATCH] grandexchange: rebuild GE item text on rebuild script event Co-authored-by: Adam --- .../grandexchange/GrandExchangePlugin.java | 61 +++++++++++++------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index b7936c243e..5aa10b539e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -54,13 +54,10 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; -import net.runelite.api.events.GameTick; import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.MenuEntryAdded; -import net.runelite.client.events.SessionClose; -import net.runelite.client.events.SessionOpen; -import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; @@ -69,6 +66,8 @@ import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.SessionClose; +import net.runelite.client.events.SessionOpen; import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; @@ -152,6 +151,9 @@ public class GrandExchangePlugin extends Plugin private Widget grandExchangeItem; private Map itemGELimits; + private int osbItem; + private OSBGrandExchangeResult osbGrandExchangeResult; + private GrandExchangeClient grandExchangeClient; private SavedOffer getOffer(int slot) @@ -209,6 +211,9 @@ public class GrandExchangePlugin extends Plugin { grandExchangeClient = new GrandExchangeClient(accountSession.getUuid()); } + + osbItem = -1; + osbGrandExchangeResult = null; } @Override @@ -432,6 +437,11 @@ public class GrandExchangePlugin extends Plugin @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent event) { + if (event.getEventName().equals("geBuilt")) + { + rebuildGeText(); + } + if (!event.getEventName().equals("setGETitle") || !config.showTotal()) { return; @@ -472,8 +482,7 @@ public class GrandExchangePlugin extends Plugin stringStack[stringStackSize - 1] += titleBuilder.toString(); } - @Subscribe - public void onGameTick(GameTick event) + private void rebuildGeText() { if (grandExchangeText == null || grandExchangeItem == null || grandExchangeItem.isHidden()) { @@ -481,7 +490,6 @@ public class GrandExchangePlugin extends Plugin } final Widget geText = grandExchangeText; - final String geTextString = geText.getText(); final int itemId = grandExchangeItem.getItemId(); if (itemId == OFFER_DEFAULT_ITEM_ID || itemId == -1) @@ -490,39 +498,52 @@ public class GrandExchangePlugin extends Plugin return; } - if (config.enableGELimits() && itemGELimits != null && !geTextString.contains(BUY_LIMIT_GE_TEXT)) + String[] lines = geText.getText().split("
"); + String text = lines[0]; // remove any limit or OSB ge values + + if (config.enableGELimits() && itemGELimits != null) { final Integer itemLimit = itemGELimits.get(itemId); // If we have item buy limit, append it if (itemLimit != null) { - final String text = geText.getText() + BUY_LIMIT_GE_TEXT + QuantityFormatter.formatNumber(itemLimit); - geText.setText(text); + text += BUY_LIMIT_GE_TEXT + QuantityFormatter.formatNumber(itemLimit); } } - if (!config.enableOsbPrices() || geTextString.contains(OSB_GE_TEXT)) + geText.setText(text); + + if (!config.enableOsbPrices()) { - // OSB prices are disabled or price was already looked up, so no need to set it again return; } + // If we already have the result, use it + if (osbGrandExchangeResult != null && osbGrandExchangeResult.getItem_id() == itemId && osbGrandExchangeResult.getOverall_average() > 0) + { + geText.setText(text + OSB_GE_TEXT + QuantityFormatter.formatNumber(osbGrandExchangeResult.getOverall_average())); + } + + if (osbItem == itemId) + { + // avoid starting duplicate lookups + return; + } + + osbItem = itemId; + log.debug("Looking up OSB item price {}", itemId); + final String start = text; executorService.submit(() -> { - if (geText.getText().contains(OSB_GE_TEXT)) - { - // If there are multiple tasks queued and one of them have already added the price - return; - } - try { final OSBGrandExchangeResult result = CLIENT.lookupItem(itemId); - final String text = geText.getText() + OSB_GE_TEXT + QuantityFormatter.formatNumber(result.getOverall_average()); - geText.setText(text); + osbGrandExchangeResult = result; + // Update the text on the widget too + geText.setText(start + OSB_GE_TEXT + QuantityFormatter.formatNumber(result.getOverall_average())); } catch (IOException e) {