From b4780dd762a45fcd5bfbc52db6147ebcd906bb96 Mon Sep 17 00:00:00 2001 From: Ron Young Date: Mon, 7 Oct 2019 09:20:22 -0500 Subject: [PATCH] ItemVariations: add reverse mapping of variations --- .../client/game/ItemVariationMapping.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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..a26f844a91 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,11 +26,14 @@ package net.runelite.client.game; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.Map; @@ -40,6 +43,7 @@ import java.util.Map; public class ItemVariationMapping { private static final Map MAPPINGS; + private static final Multimap INVERTED_MAPPINGS; static { @@ -52,6 +56,7 @@ public class ItemVariationMapping final Map> itemVariations = gson.fromJson(new InputStreamReader(geLimitData), typeToken.getType()); ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + ImmutableMultimap.Builder invertedBuilder = new ImmutableMultimap.Builder<>(); for (Collection value : itemVariations.values()) { final Iterator iterator = value.iterator(); @@ -59,9 +64,15 @@ public class ItemVariationMapping while (iterator.hasNext()) { - builder.put(iterator.next(), base); + final int id = iterator.next(); + builder.put(id, base); + invertedBuilder.put(base, id); } + + invertedBuilder.put(base, base); } + + INVERTED_MAPPINGS = invertedBuilder.build(); MAPPINGS = builder.build(); } @@ -75,4 +86,15 @@ public class ItemVariationMapping { return MAPPINGS.getOrDefault(itemId, itemId); } + + /** + * Get item ids for provided variation item id. + * + * @param itemId the item id + * @return the item ids + */ + public static Collection getVariations(int itemId) + { + return INVERTED_MAPPINGS.asMap().getOrDefault(itemId, Collections.singletonList(itemId)); + } }