From 5f4268211ca27657fa516b4633a827dccdc24f8e Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 28 May 2018 11:11:11 -0400 Subject: [PATCH] runelite-client: update bank calculation and barrows calculation to use item mapping --- .../net/runelite/client/game/ItemManager.java | 19 ++++++ .../plugins/bankvalue/BankCalculation.java | 68 +++++++++++-------- .../client/plugins/barrows/BarrowsPlugin.java | 28 ++++---- 3 files changed, 72 insertions(+), 43 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index 06924e49d5..9777b24696 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -163,6 +163,25 @@ public class ItemManager return null; } + /** + * Look up an item's price from the price cache + * + * @param itemId + * @return + */ + public ItemPrice getCachedItemPrice(int itemId) + { + itemId = ItemMapping.mapFirst(itemId); + + ItemPrice itemPrice = itemPriceCache.getIfPresent(itemId); + if (itemPrice != null && itemPrice != EMPTY && itemPrice != NONE) + { + return itemPrice; + } + + return null; + } + /** * Look up bulk item prices asynchronously * diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankCalculation.java b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankCalculation.java index e5132cf53a..6b514ac883 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankCalculation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankCalculation.java @@ -33,11 +33,13 @@ import javax.inject.Inject; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemComposition; +import net.runelite.api.ItemID; import static net.runelite.api.ItemID.COINS_995; import static net.runelite.api.ItemID.PLATINUM_TOKEN; import net.runelite.api.queries.BankItemQuery; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.game.ItemManager; +import net.runelite.client.game.ItemMapping; import net.runelite.client.util.QueryRunner; import net.runelite.http.api.item.ItemPrice; @@ -87,40 +89,49 @@ class BankCalculation gePrice = haPrice = 0; finished = false; - List itemCompositions = new ArrayList<>(); - Map itemMap = new HashMap<>(); List itemIds = new ArrayList<>(); // Generate our lists (and do some quick price additions) for (WidgetItem widgetItem : widgetItems) { - if (widgetItem.getId() <= 0 || widgetItem.getQuantity() == 0) + int quantity = widgetItem.getQuantity(); + + if (widgetItem.getId() <= 0 || quantity == 0) { continue; } if (widgetItem.getId() == COINS_995) { - gePrice += widgetItem.getQuantity(); - haPrice += widgetItem.getQuantity(); + gePrice += quantity; + haPrice += quantity; continue; } if (widgetItem.getId() == PLATINUM_TOKEN) { - gePrice += widgetItem.getQuantity() * 1000L; - haPrice += widgetItem.getQuantity() * 1000L; + gePrice += quantity * 1000L; + haPrice += quantity * 1000L; continue; } final ItemComposition itemComposition = itemManager.getItemComposition(widgetItem.getId()); - itemCompositions.add(itemComposition); - itemMap.put(widgetItem.getId(), widgetItem); if (config.showGE()) { itemIds.add(widgetItem.getId()); } + + if (config.showHA()) + { + int price = itemComposition.getPrice(); + + if (price > 0) + { + haPrice += (long) Math.round(price * HIGH_ALCHEMY_CONSTANT) * + (long) quantity; + } + } } // Now do the calculations @@ -145,14 +156,31 @@ class BankCalculation try { - for (ItemPrice itemPrice : itemPrices) + for (WidgetItem widgetItem : widgetItems) { - if (itemPrice.getItem() == null) + int itemId = widgetItem.getId(); + int quantity = widgetItem.getQuantity(); + + if (itemId <= 0 || quantity == 0 + || itemId == ItemID.COINS_995 || itemId == ItemID.PLATINUM_TOKEN) { - continue; // cached no price + continue; } - gePrice += (long) itemPrice.getPrice() * (long) itemMap.get(itemPrice.getItem().getId()).getQuantity(); + long price = 0; + for (int mappedItemId : ItemMapping.map(itemId)) + { + ItemPrice cachedItemPrice = itemManager.getCachedItemPrice(mappedItemId); + if (cachedItemPrice == null) + { + // this happens to items which have no ge price + continue; + } + + price += cachedItemPrice.getPrice(); + } + + gePrice += price * quantity; } } catch (Exception ex2) @@ -169,20 +197,6 @@ class BankCalculation { finished = true; } - - if (config.showHA()) - { - for (ItemComposition itemComposition : itemCompositions) - { - int price = itemComposition.getPrice(); - - if (price > 0) - { - haPrice += (long) Math.round(price * HIGH_ALCHEMY_CONSTANT) * - (long) itemMap.get(itemComposition.getId()).getQuantity(); - } - } - } } private boolean isBankDifferent(WidgetItem[] widgetItems) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java index 5316d4dc9c..c2e640770d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java @@ -29,11 +29,10 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; @@ -207,23 +206,19 @@ public class BarrowsPlugin extends Plugin if (event.getGroupId() == WidgetID.BARROWS_REWARD_GROUP_ID && config.showChestValue()) { ItemContainer barrowsRewardContainer = client.getItemContainer(InventoryID.BARROWS_REWARD); - Map itemMap = new HashMap<>(); + Item[] items = barrowsRewardContainer.getItems(); chestPrice = 0; - for (Item item : barrowsRewardContainer.getItems()) + for (Item item : items) { - if (item.getId() != -1) + if (item.getId() == COINS_995) { - if (item.getId() == COINS_995) - { - chestPrice += item.getQuantity(); - continue; - } - itemMap.put(item.getId(), item.getQuantity()); + chestPrice += item.getQuantity(); } } - CompletableFuture future = itemManager.getItemPriceBatch(itemMap.keySet()); + CompletableFuture future = itemManager.getItemPriceBatch( + Arrays.stream(items).map(Item::getId).collect(Collectors.toList())); future.whenComplete((ItemPrice[] itemPrices, Throwable ex) -> { if (ex != null) @@ -242,14 +237,15 @@ public class BarrowsPlugin extends Plugin try { - for (ItemPrice itemPrice : itemPrices) + for (Item item : items) { - if (itemPrice.getItem() == null) + ItemPrice cachedItemPrice = itemManager.getCachedItemPrice(item.getId()); + if (cachedItemPrice == null) { - continue; // cached no price + continue; } - long itemStack = (long) itemPrice.getPrice() * (long) itemMap.get(itemPrice.getItem().getId()); + long itemStack = (long) cachedItemPrice.getPrice() * (long) item.getQuantity(); chestPrice += itemStack; }