Merge pull request #4639 from Abextm/item-prices
runelite-client: Always use the mapped price for items
This commit is contained in:
@@ -27,12 +27,13 @@ package net.runelite.client.game;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
import java.awt.Color;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -44,6 +45,7 @@ import net.runelite.api.Client;
|
||||
import static net.runelite.api.Constants.CLIENT_DEFAULT_ZOOM;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.api.ItemID;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.client.callback.ClientThread;
|
||||
@@ -77,7 +79,7 @@ public class ItemManager
|
||||
|
||||
private final ItemClient itemClient = new ItemClient();
|
||||
private final LoadingCache<String, SearchResult> itemSearches;
|
||||
private final ConcurrentMap<Integer, ItemPrice> itemPrices = new ConcurrentHashMap<>();
|
||||
private Map<Integer, ItemPrice> itemPrices = Collections.emptyMap();
|
||||
private final LoadingCache<ImageKey, AsyncBufferedImage> itemImages;
|
||||
private final LoadingCache<Integer, ItemComposition> itemCompositions;
|
||||
private final LoadingCache<OutlineKey, BufferedImage> itemOutlines;
|
||||
@@ -147,11 +149,12 @@ public class ItemManager
|
||||
ItemPrice[] prices = itemClient.getPrices();
|
||||
if (prices != null)
|
||||
{
|
||||
itemPrices.clear();
|
||||
ImmutableMap.Builder<Integer, ItemPrice> map = ImmutableMap.builderWithExpectedSize(prices.length);
|
||||
for (ItemPrice price : prices)
|
||||
{
|
||||
itemPrices.put(price.getItem().getId(), price);
|
||||
map.put(price.getItem().getId(), price);
|
||||
}
|
||||
itemPrices = map.build();
|
||||
}
|
||||
|
||||
log.debug("Loaded {} prices", itemPrices.size());
|
||||
@@ -174,13 +177,31 @@ public class ItemManager
|
||||
/**
|
||||
* Look up an item's price
|
||||
*
|
||||
* @param itemId item id
|
||||
* @param itemID item id
|
||||
* @return item price
|
||||
*/
|
||||
public ItemPrice getItemPrice(int itemId)
|
||||
public int getItemPrice(int itemID)
|
||||
{
|
||||
itemId = ItemMapping.mapFirst(itemId);
|
||||
return itemPrices.get(itemId);
|
||||
if (itemID == ItemID.COINS_995)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (itemID == ItemID.PLATINUM_TOKEN)
|
||||
{
|
||||
return 1000;
|
||||
}
|
||||
|
||||
int price = 0;
|
||||
for (int mappedID : ItemMapping.map(itemID))
|
||||
{
|
||||
ItemPrice ip = itemPrices.get(mappedID);
|
||||
if (ip != null)
|
||||
{
|
||||
price += ip.getPrice();
|
||||
}
|
||||
}
|
||||
|
||||
return price;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -38,9 +38,7 @@ 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;
|
||||
|
||||
@Slf4j
|
||||
class BankCalculation
|
||||
@@ -143,20 +141,7 @@ class BankCalculation
|
||||
continue;
|
||||
}
|
||||
|
||||
long price = 0;
|
||||
for (int mappedItemId : ItemMapping.map(itemId))
|
||||
{
|
||||
ItemPrice cachedItemPrice = itemManager.getItemPrice(mappedItemId);
|
||||
if (cachedItemPrice == null)
|
||||
{
|
||||
// this happens to items which have no ge price
|
||||
continue;
|
||||
}
|
||||
|
||||
price += cachedItemPrice.getPrice();
|
||||
}
|
||||
|
||||
gePrice += price * quantity;
|
||||
gePrice += (long) itemManager.getItemPrice(itemId) * quantity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,6 @@ import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import net.runelite.client.util.StackFormatter;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Barrows Brothers",
|
||||
@@ -222,13 +221,7 @@ public class BarrowsPlugin extends Plugin
|
||||
|
||||
for (Item item : items)
|
||||
{
|
||||
ItemPrice cachedItemPrice = itemManager.getItemPrice(item.getId());
|
||||
if (cachedItemPrice == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
long itemStack = (long) cachedItemPrice.getPrice() * (long) item.getQuantity();
|
||||
long itemStack = (long) itemManager.getItemPrice(item.getId()) * (long) item.getQuantity();
|
||||
chestPrice += itemStack;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,6 @@ import net.runelite.http.api.hiscore.HiscoreSkill;
|
||||
import net.runelite.http.api.hiscore.SingleHiscoreSkillResult;
|
||||
import net.runelite.http.api.hiscore.Skill;
|
||||
import net.runelite.http.api.item.Item;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
import net.runelite.http.api.item.SearchResult;
|
||||
import net.runelite.http.api.kc.KillCountClient;
|
||||
|
||||
@@ -480,7 +479,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
||||
}
|
||||
|
||||
int itemId = item.getId();
|
||||
ItemPrice itemPrice = itemManager.getItemPrice(itemId);
|
||||
int itemPrice = itemManager.getItemPrice(itemId);
|
||||
|
||||
final ChatMessageBuilder builder = new ChatMessageBuilder()
|
||||
.append(ChatColorType.NORMAL)
|
||||
@@ -490,7 +489,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
||||
.append(ChatColorType.NORMAL)
|
||||
.append(": GE average ")
|
||||
.append(ChatColorType.HIGHLIGHT)
|
||||
.append(StackFormatter.formatNumber(itemPrice.getPrice()));
|
||||
.append(StackFormatter.formatNumber(itemPrice));
|
||||
|
||||
ItemComposition itemComposition = itemManager.getItemComposition(itemId);
|
||||
if (itemComposition != null)
|
||||
|
||||
@@ -53,7 +53,6 @@ import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.util.StackFormatter;
|
||||
import net.runelite.http.api.examine.ExamineClient;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
|
||||
/**
|
||||
* Submits exammine info to the api
|
||||
@@ -272,14 +271,9 @@ public class ExaminePlugin extends Plugin
|
||||
final boolean note = itemComposition.getNote() != -1;
|
||||
final int id = note ? itemComposition.getLinkedNoteId() : itemComposition.getId();
|
||||
|
||||
ItemPrice itemPrice = itemManager.getItemPrice(id);
|
||||
if (itemPrice == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int itemCompositionPrice = itemComposition.getPrice();
|
||||
final int gePrice = itemPrice == null ? 0 : itemPrice.getPrice();
|
||||
final int gePrice = itemManager.getItemPrice(id);
|
||||
final int alchPrice = itemCompositionPrice <= 0 ? 0 : Math.round(itemCompositionPrice * HIGH_ALCHEMY_CONSTANT);
|
||||
|
||||
if (gePrice > 0 || alchPrice > 0)
|
||||
|
||||
@@ -50,7 +50,6 @@ import net.runelite.client.ui.components.PluginErrorPanel;
|
||||
import net.runelite.client.util.ImageUtil;
|
||||
import net.runelite.client.util.RunnableExceptionLogger;
|
||||
import net.runelite.http.api.item.Item;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
import net.runelite.http.api.item.SearchResult;
|
||||
|
||||
/**
|
||||
@@ -222,10 +221,10 @@ class GrandExchangeSearchPanel extends JPanel
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemPrice itemPrice = itemManager.getItemPrice(itemId);
|
||||
int itemPrice = itemManager.getItemPrice(itemId);
|
||||
AsyncBufferedImage itemImage = itemManager.getImage(itemId);
|
||||
|
||||
itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice != null ? itemPrice.getPrice() : 0, itemComp.getPrice() * 0.6));
|
||||
itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice, itemComp.getPrice() * 0.6));
|
||||
|
||||
// If using hotkey to lookup item, stop after finding match.
|
||||
if (exactMatch && item.getName().equalsIgnoreCase(lookup))
|
||||
|
||||
@@ -76,7 +76,6 @@ import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.N
|
||||
import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.OPTION;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Ground Items",
|
||||
@@ -277,11 +276,7 @@ public class GroundItemsPlugin extends Plugin
|
||||
}
|
||||
else
|
||||
{
|
||||
final ItemPrice itemPrice = itemManager.getItemPrice(realItemId);
|
||||
if (itemPrice != null)
|
||||
{
|
||||
groundItem.setGePrice(itemPrice.getPrice());
|
||||
}
|
||||
groundItem.setGePrice(itemManager.getItemPrice(realItemId));
|
||||
}
|
||||
|
||||
return groundItem;
|
||||
@@ -369,8 +364,8 @@ public class GroundItemsPlugin extends Plugin
|
||||
|
||||
final ItemComposition itemComposition = itemManager.getItemComposition(itemId);
|
||||
final int realItemId = itemComposition.getNote() != -1 ? itemComposition.getLinkedNoteId() : itemComposition.getId();
|
||||
final ItemPrice itemPrice = itemManager.getItemPrice(realItemId);
|
||||
final int price = itemPrice == null ? itemComposition.getPrice() : itemPrice.getPrice();
|
||||
final int itemPrice = itemManager.getItemPrice(realItemId);
|
||||
final int price = itemPrice <= 0 ? itemComposition.getPrice() : itemPrice;
|
||||
final int haPrice = Math.round(itemComposition.getPrice() * HIGH_ALCHEMY_CONSTANT) * quantity;
|
||||
final int gePrice = quantity * price;
|
||||
final Color hidden = getHidden(itemComposition.getName(), gePrice, haPrice, itemComposition.isTradeable());
|
||||
|
||||
@@ -45,7 +45,6 @@ import net.runelite.client.ui.overlay.tooltip.Tooltip;
|
||||
import net.runelite.client.ui.overlay.tooltip.TooltipManager;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
import net.runelite.client.util.StackFormatter;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
|
||||
class ItemPricesOverlay extends Overlay
|
||||
{
|
||||
@@ -200,11 +199,7 @@ class ItemPricesOverlay extends Overlay
|
||||
|
||||
if (config.showGEPrice())
|
||||
{
|
||||
final ItemPrice price = itemManager.getItemPrice(id);
|
||||
if (price != null)
|
||||
{
|
||||
gePrice = price.getPrice();
|
||||
}
|
||||
gePrice = itemManager.getItemPrice(id);
|
||||
}
|
||||
if (config.showHAValue())
|
||||
{
|
||||
|
||||
@@ -42,7 +42,6 @@ import net.runelite.api.Client;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.api.ItemContainer;
|
||||
import net.runelite.api.ItemID;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.SpriteID;
|
||||
@@ -60,7 +59,6 @@ import net.runelite.client.ui.ClientToolbar;
|
||||
import net.runelite.client.ui.NavigationButton;
|
||||
import net.runelite.client.util.ImageUtil;
|
||||
import net.runelite.client.util.Text;
|
||||
import net.runelite.http.api.item.ItemPrice;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Loot Tracker",
|
||||
@@ -253,20 +251,7 @@ public class LootTrackerPlugin extends Plugin
|
||||
{
|
||||
final ItemComposition itemComposition = itemManager.getItemComposition(itemStack.getId());
|
||||
final int realItemId = itemComposition.getNote() != -1 ? itemComposition.getLinkedNoteId() : itemStack.getId();
|
||||
final ItemPrice itemPrice = itemManager.getItemPrice(realItemId);
|
||||
final long price;
|
||||
if (itemPrice != null)
|
||||
{
|
||||
price = (long) itemPrice.getPrice() * itemStack.getQuantity();
|
||||
}
|
||||
else if (realItemId == ItemID.COINS_995)
|
||||
{
|
||||
price = itemStack.getQuantity();
|
||||
}
|
||||
else
|
||||
{
|
||||
price = 0;
|
||||
}
|
||||
final long price = (long)itemManager.getItemPrice(realItemId) * (long)itemStack.getQuantity();
|
||||
|
||||
return new LootTrackerItemEntry(
|
||||
itemStack.getId(),
|
||||
|
||||
Reference in New Issue
Block a user