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