ge plugin: add OSB actively traded price

This commit is contained in:
AeonLucid
2018-06-15 23:33:30 +02:00
committed by Adam
parent b85fb80fe8
commit abcc733c9e
11 changed files with 551 additions and 1 deletions

View File

@@ -56,4 +56,15 @@ public interface GrandExchangeConfig extends Config
{
return true;
}
@ConfigItem(
position = 3,
keyName = "enableOsbPrices",
name = "Enable OSB actively traded prices",
description = "Shows the OSBuddy actively traded price at the GE"
)
default boolean enableOsbPrices()
{
return true;
}
}

View File

@@ -31,6 +31,7 @@ import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import javax.swing.SwingUtilities;
@@ -48,8 +49,11 @@ 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.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier;
@@ -61,7 +65,10 @@ import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.PluginToolbar;
import net.runelite.client.util.StackFormatter;
import net.runelite.client.util.Text;
import net.runelite.http.api.osbuddy.GrandExchangeClient;
import net.runelite.http.api.osbuddy.GrandExchangeResult;
@PluginDescriptor(
name = "Grand Exchange"
@@ -69,6 +76,10 @@ import net.runelite.client.util.Text;
@Slf4j
public class GrandExchangePlugin extends Plugin
{
private static final int OFFER_CONTAINER_ITEM = 21;
private static final int OFFER_DEFAULT_ITEM_ID = 6512;
private static final GrandExchangeClient CLIENT = new GrandExchangeClient();
@Getter(AccessLevel.PACKAGE)
private NavigationButton button;
@@ -103,6 +114,14 @@ public class GrandExchangePlugin extends Plugin
@Inject
private Notifier notifier;
@Inject
private ScheduledExecutorService executorService;
private Widget grandExchangeText;
private Widget grandExchangeItem;
private int lastItem = -1;
@Provides
GrandExchangeConfig provideConfig(ConfigManager configManager)
{
@@ -239,4 +258,72 @@ public class GrandExchangePlugin extends Plugin
setHotKeyPressed(false);
}
}
@Subscribe
public void onWidgetLoaded(WidgetLoaded event)
{
switch (event.getGroupId())
{
// Grand exchange was opened.
case WidgetID.GRAND_EXCHANGE_GROUP_ID:
if (!config.enableOsbPrices())
{
return;
}
Widget grandExchangeOffer = client.getWidget(WidgetInfo.GRAND_EXCHANGE_OFFER_CONTAINER);
grandExchangeText = client.getWidget(WidgetInfo.GRAND_EXCHANGE_OFFER_TEXT);
grandExchangeItem = grandExchangeOffer.getDynamicChildren()[OFFER_CONTAINER_ITEM];
lastItem = -1;
break;
// Grand exchange was closed (if it was open before).
case WidgetID.INVENTORY_GROUP_ID:
grandExchangeText = null;
grandExchangeItem = null;
lastItem = -1;
break;
}
}
@Subscribe
public void onGameTick(GameTick event)
{
if (grandExchangeText == null || grandExchangeItem == null)
{
return;
}
int itemId = grandExchangeItem.getItemId();
if (itemId == OFFER_DEFAULT_ITEM_ID
|| itemId == -1
|| lastItem == itemId)
{
return;
}
lastItem = itemId;
final Widget geText = grandExchangeText;
executorService.submit(() ->
{
try
{
final GrandExchangeResult result = CLIENT.lookupItem(itemId);
if (result.getItem_id() != lastItem)
{
// something else has since been looked up?
return;
}
final String text = geText.getText() + "<br>OSBuddy Actively traded price: " + StackFormatter.formatNumber(result.getOverall_average());
geText.setText(text);
}
catch (IOException e)
{
log.debug("Error getting price of item {}", itemId, e);
}
});
}
}