From f1618fc1c64ce7341e181f4f9e0c1a4822b53490 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 14 Feb 2018 12:20:52 -0500 Subject: [PATCH] item manager: also allow specifying stackable --- .../net/runelite/client/game/ItemManager.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 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 6d1cf68a34..4053356cb2 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 @@ -35,6 +35,7 @@ import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.Value; import net.runelite.api.Client; import net.runelite.api.ItemComposition; import net.runelite.api.SpritePixels; @@ -45,6 +46,14 @@ import net.runelite.http.api.item.SearchResult; @Singleton public class ItemManager { + @Value + private static class ImageKey + { + private final int itemId; + private final int itemQuantity; + private final boolean stackable; + } + /** * not yet looked up */ @@ -59,7 +68,7 @@ public class ItemManager private final ItemClient itemClient = new ItemClient(); private final LoadingCache itemSearches; private final LoadingCache itemPrices; - private final LoadingCache itemImages; + private final LoadingCache itemImages; private final LoadingCache itemCompositions; @Inject @@ -86,12 +95,12 @@ public class ItemManager itemImages = CacheBuilder.newBuilder() .maximumSize(128L) .expireAfterAccess(1, TimeUnit.HOURS) - .build(new CacheLoader() + .build(new CacheLoader() { @Override - public BufferedImage load(Integer itemId) throws Exception + public BufferedImage load(ImageKey key) throws Exception { - return loadImage(itemId & 0xffff, itemId >>> 16); + return loadImage(key.itemId, key.itemQuantity, key.stackable); } }); @@ -203,9 +212,9 @@ public class ItemManager * @param itemId * @return */ - private BufferedImage loadImage(int itemId, int quantity) + private BufferedImage loadImage(int itemId, int quantity, boolean stackable) { - SpritePixels sprite = client.createItemSprite(itemId, quantity, 1, SpritePixels.DEFAULT_SHADOW_COLOR, 0, false); + SpritePixels sprite = client.createItemSprite(itemId, quantity, 1, SpritePixels.DEFAULT_SHADOW_COLOR, stackable ? 1 : 0, false); return sprite.toBufferedImage(); } @@ -217,7 +226,7 @@ public class ItemManager */ public BufferedImage getImage(int itemId) { - return getImage(itemId, 1); + return getImage(itemId, 1, false); } /** @@ -227,11 +236,11 @@ public class ItemManager * @param quantity * @return */ - public BufferedImage getImage(int itemId, int quantity) + public BufferedImage getImage(int itemId, int quantity, boolean stackable) { try { - return itemImages.get(itemId | (quantity << 16)); + return itemImages.get(new ImageKey(itemId, quantity, stackable)); } catch (ExecutionException ex) {