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 0afcf162db..ff22e90cf9 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 @@ -28,6 +28,7 @@ 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 io.reactivex.Completable; import io.reactivex.schedulers.Schedulers; import java.awt.Color; import java.awt.image.BufferedImage; @@ -192,6 +193,13 @@ public class ItemManager eventbus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); eventbus.subscribe(PostItemDefinition.class, this, this::onPostItemDefinition); + + Completable.fromAction(ItemVariationMapping::load) + .subscribeOn(Schedulers.computation()) + .subscribe( + () -> log.debug("Loaded {} item variations", ItemVariationMapping.getSize()), + ex -> log.warn("Error loading item variations", ex) + ); } private void loadPrices() diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java index 9629bd99ac..7ebc2818dd 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java @@ -26,44 +26,20 @@ package net.runelite.client.game; import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import java.io.InputStream; +import com.google.gson.stream.JsonReader; +import java.io.IOException; import java.io.InputStreamReader; -import java.util.Collection; -import java.util.Iterator; +import java.nio.charset.StandardCharsets; import java.util.Map; +import lombok.extern.slf4j.Slf4j; /** * Converts variation items to it's base item counterparts */ +@Slf4j public class ItemVariationMapping { - private static final Map MAPPINGS; - - static - { - final Gson gson = new Gson(); - final TypeToken>> typeToken = new TypeToken>>() - { - }; - - final InputStream geLimitData = ItemVariationMapping.class.getResourceAsStream("/item_variations.json"); - final Map> itemVariations = gson.fromJson(new InputStreamReader(geLimitData), typeToken.getType()); - - ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - for (Collection value : itemVariations.values()) - { - final Iterator iterator = value.iterator(); - final int base = iterator.next(); - - while (iterator.hasNext()) - { - builder.put(iterator.next(), base); - } - } - MAPPINGS = builder.build(); - } + private static Map MAPPINGS; /** * Get base item id for provided variation item id. @@ -75,4 +51,39 @@ public class ItemVariationMapping { return MAPPINGS.getOrDefault(itemId, itemId); } + + static void load() throws IOException + { + try (JsonReader reader = new JsonReader(new InputStreamReader(ItemVariationMapping.class.getResourceAsStream("/item_variations.json"), StandardCharsets.UTF_8))) + { + ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(5039); + reader.beginObject(); + + while (reader.hasNext()) + { + // Names are useless + reader.skipValue(); + reader.beginArray(); + + int base = reader.nextInt(); + while (reader.hasNext()) + { + builder.put( + reader.nextInt(), + base + ); + } + + reader.endArray(); + } + + reader.endObject(); + MAPPINGS = builder.build(); + } + } + + static int getSize() + { + return MAPPINGS.size(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyOverlay.java index d4de57b30e..92e24a96fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyOverlay.java @@ -56,9 +56,9 @@ public class HighAlchemyOverlay extends WidgetItemOverlay this.itemManager = itemManager; this.plugin = plugin; - int natPrice = itemManager.getItemPrice(ItemID.NATURE_RUNE); + int natPrice = itemManager.getItemPrice(ItemID.NATURE_RUNE, true); this.alchPrice = natPrice; - this.alchPriceNoStaff = natPrice + 5 * itemManager.getItemPrice(ItemID.FIRE_RUNE); + this.alchPriceNoStaff = natPrice + 5 * itemManager.getItemPrice(ItemID.FIRE_RUNE, true); showOnBank(); showOnInventory(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java index 0a2523f6d1..56fceb8de3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java @@ -77,10 +77,13 @@ public class StonedTrackerPlugin extends Plugin @Inject private ClientToolbar clientToolbar; + @Inject public StonedTrackerConfig config; + @Inject private Client client; + @Inject private ItemManager itemManager;