Merge pull request #4639 from Abextm/item-prices

runelite-client: Always use the mapped price for items
This commit is contained in:
Tomas Slusny
2018-08-06 22:57:04 +02:00
committed by GitHub
9 changed files with 42 additions and 76 deletions

View File

@@ -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;
}
/**

View File

@@ -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;
}
}
}

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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))

View File

@@ -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());

View File

@@ -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())
{

View File

@@ -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(),