Search in sources :

Example 1 with BankItemQuery

use of net.runelite.api.queries.BankItemQuery in project runelite by runelite.

the class BankCalculation method calculate.

/**
 * Calculate the bank based on the cache, price can be 0 if bank not active, or cache not set
 */
void calculate() {
    Widget widgetBankTitleBar = client.getWidget(WidgetInfo.BANK_TITLE_BAR);
    // Don't update on a search because rs seems to constantly update the title
    if (widgetBankTitleBar == null || widgetBankTitleBar.isHidden() || widgetBankTitleBar.getText().contains("Showing")) {
        return;
    }
    WidgetItem[] widgetItems = new BankItemQuery().result(client);
    if (widgetItems.length == 0 || !isBankDifferent(widgetItems)) {
        return;
    }
    log.debug("Calculating new bank value...");
    gePrice = haPrice = 0;
    finished = false;
    List<ItemComposition> itemCompositions = new ArrayList<>();
    Map<Integer, WidgetItem> itemMap = new HashMap<>();
    List<Integer> itemIds = new ArrayList<>();
    // Generate our lists (and do some quick price additions)
    for (WidgetItem widgetItem : widgetItems) {
        if (widgetItem.getId() <= 0 || widgetItem.getQuantity() == 0) {
            continue;
        }
        if (widgetItem.getId() == COINS_995) {
            gePrice += widgetItem.getQuantity();
            haPrice += widgetItem.getQuantity();
            continue;
        }
        if (widgetItem.getId() == PLATINUM_TOKEN) {
            gePrice += widgetItem.getQuantity() * 1000;
            haPrice += widgetItem.getQuantity() * 1000;
            continue;
        }
        ItemComposition itemComposition = itemManager.getItemComposition(widgetItem.getId());
        itemCompositions.add(itemComposition);
        itemMap.put(widgetItem.getId(), widgetItem);
        if (config.showGE()) {
            itemIds.add(widgetItem.getId());
        }
    }
    // Now do the calculations
    if (config.showGE() && !itemIds.isEmpty()) {
        CompletableFuture<ItemPrice[]> future = itemManager.getItemPriceBatch(itemIds);
        future.whenComplete((ItemPrice[] itemPrices, Throwable ex) -> {
            if (ex != null) {
                log.debug("Error looking up item prices", ex);
                return;
            }
            if (itemPrices == null) {
                log.debug("Error looking up item prices");
                return;
            }
            log.debug("Price lookup is complete. {} prices.", itemPrices.length);
            try {
                for (ItemPrice itemPrice : itemPrices) {
                    if (itemPrice.getItem() == null) {
                        // cached no price
                        continue;
                    }
                    gePrice += itemPrice.getPrice() * itemMap.get(itemPrice.getItem().getId()).getQuantity();
                }
            } catch (Exception ex2) {
                log.warn("error calculating price", ex2);
            } finally {
                finished = true;
            }
        });
    } else {
        finished = true;
    }
    if (config.showHA()) {
        for (ItemComposition itemComposition : itemCompositions) {
            int price = itemComposition.getPrice();
            if (price > 0) {
                haPrice += Math.round(price * HIGH_ALCHEMY_CONSTANT) * itemMap.get(itemComposition.getId()).getQuantity();
            }
        }
    }
}
Also used : BankItemQuery(net.runelite.api.queries.BankItemQuery) HashMap(java.util.HashMap) Widget(net.runelite.api.widgets.Widget) ArrayList(java.util.ArrayList) ItemPrice(net.runelite.http.api.item.ItemPrice) WidgetItem(net.runelite.api.widgets.WidgetItem) ItemComposition(net.runelite.api.ItemComposition)

Aggregations

ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 ItemComposition (net.runelite.api.ItemComposition)1 BankItemQuery (net.runelite.api.queries.BankItemQuery)1 Widget (net.runelite.api.widgets.Widget)1 WidgetItem (net.runelite.api.widgets.WidgetItem)1 ItemPrice (net.runelite.http.api.item.ItemPrice)1