From 8a1d5170ac6f1ae04cbc60a105d3e8f42426c60e Mon Sep 17 00:00:00 2001 From: Tyler Bochard Date: Wed, 4 Sep 2019 10:27:14 -0400 Subject: [PATCH] grounditems: highlight herblore / prayer ground items (#1534) grounditems: highlight herblore / prayer ground items Disabled by default --- .../grounditems/GroundItemsConfig.java | 61 ++++ .../grounditems/GroundItemsOverlay.java | 42 ++- .../grounditems/GroundItemsPlugin.java | 282 +++++++++++++++++- 3 files changed, 373 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index 7ef9dab70f..e266f4626e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -639,4 +639,65 @@ public interface GroundItemsConfig extends Config { return new Color(0, 0, 0, 150); } + + @ConfigItem( + keyName = "xpStub", + name = "XP", + description = "Highlights various items that give xp", + position = 50 + ) + default Stub xpStub() + { + return new Stub(); + } + + @ConfigItem( + keyName = "highlightHerblore", + name = "Highlight Herblore xp", + description = "Highlight Herblore xp related items.", + position = 51, + parent = "xpStub" + ) + default boolean highlightHerblore() + { + return false; + } + + @ConfigItem( + keyName = "herbloreColor", + name = "Herblore Color", + description = "Color of Herblore xp items.", + position = 52, + parent = "xpStub" + ) + @Alpha + default Color herbloreColor() + { + return Color.GREEN.darker(); + } + + @ConfigItem( + keyName = "highlightPrayer", + name = "Highlight Prayer xp", + description = "Highlight Prayer xp related items.", + position = 53, + parent = "xpStub" + ) + default boolean highlightPrayer() + { + return false; + } + + @ConfigItem( + keyName = "prayerColor", + name = "Prayer Color", + description = "Color of Prayer xp items.", + position = 54, + parent = "xpStub" + ) + @Alpha + default Color prayerColor() + { + return Color.YELLOW; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 1b4f9646e7..5506379fd4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -36,10 +36,10 @@ import java.time.Instant; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.List; import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; @@ -195,7 +195,37 @@ public class GroundItemsOverlay extends Overlay continue; } - final Color highlighted = plugin.getHighlighted(item.getName(), item.getGePrice(), item.getHaPrice()); + Color highlighted = null; + + //Process skill items + if (!plugin.hiddenItems.getUnchecked(item.getName())) + { + highlighted = plugin.getDefaultColor(); + if (plugin.highlightHerblore) + { + if (GroundItemsPlugin.herbloreItems.contains(item.getId())) + { + highlighted = plugin.getHerbloreColor(); + } + } + if (plugin.highlightPrayer) + { + if (GroundItemsPlugin.prayerItems.contains(item.getId())) + { + highlighted = plugin.getPrayerColor(); + } + } + } + + // Value overrides skill + if (plugin.getHighlighted(item.getName(), item.getGePrice(), item.getHaPrice()) != null) + { + if (plugin.getHighlighted(item.getName(), item.getGePrice(), item.getHaPrice()).getRGB() != highlighted.getRGB()) + { + highlighted = plugin.getHighlighted(item.getName(), item.getGePrice(), item.getHaPrice()); + } + } + final Color hidden = plugin.getHidden(item.getName(), item.getGePrice(), item.getHaPrice(), item.isTradeable()); if (highlighted == null && !plugin.isHotKeyPressed()) @@ -280,8 +310,8 @@ public class GroundItemsOverlay extends Overlay if (item.getTicks() > 0 && plugin.isShowTimer()) { itemStringBuilder - .append(" - ") - .append(item.getTicks()); + .append(" - ") + .append(item.getTicks()); } final String itemString = itemStringBuilder.toString(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 962ae9453a..f81a205640 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -28,6 +28,7 @@ package net.runelite.client.plugins.grounditems; import com.google.common.cache.CacheBuilder; import com.google.common.cache.LoadingCache; import com.google.common.collect.EvictingQueue; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.awt.Color; import java.awt.Rectangle; @@ -56,14 +57,15 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.ItemDefinition; import net.runelite.api.ItemID; -import net.runelite.api.MenuOpcode; -import net.runelite.api.TileItemPile; +import static net.runelite.api.ItemID.*; import net.runelite.api.MenuEntry; +import net.runelite.api.MenuOpcode; import net.runelite.api.Node; import net.runelite.api.Player; import net.runelite.api.Scene; import net.runelite.api.Tile; import net.runelite.api.TileItem; +import net.runelite.api.TileItemPile; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ClientTick; import net.runelite.api.events.ConfigChanged; @@ -75,6 +77,7 @@ import net.runelite.api.events.ItemQuantityChanged; import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; +import net.runelite.api.util.Text; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; @@ -98,7 +101,6 @@ import net.runelite.client.plugins.grounditems.config.ValueCalculationMode; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.StackFormatter; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Ground Items", @@ -134,6 +136,256 @@ public class GroundItemsPlugin extends Plugin private static final int CAST_ON_ITEM = MenuOpcode.SPELL_CAST_ON_GROUND_ITEM.getId(); private static final String TELEGRAB_TEXT = ColorUtil.wrapWithColorTag("Telekinetic Grab", Color.GREEN) + ColorUtil.prependColorTag(" -> ", Color.WHITE); private final Map priceChecks = new LinkedHashMap<>(); + private final Queue droppedItemQueue = EvictingQueue.create(16); // recently dropped items + boolean highlightHerblore; + boolean highlightPrayer; + LoadingCache hiddenItems; + static final ImmutableSet herbloreItems = ImmutableSet.of + ( + //Grimy Herbs + GRIMY_GUAM_LEAF, + GRIMY_GUAM_LEAF + 1, + GRIMY_MARRENTILL, + GRIMY_MARRENTILL + 1, + GRIMY_TARROMIN, + GRIMY_TARROMIN + 1, + GRIMY_HARRALANDER, + GRIMY_HARRALANDER + 1, + GRIMY_RANARR_WEED, + GRIMY_RANARR_WEED + 1, + GRIMY_TOADFLAX, + GRIMY_TOADFLAX + 1, + GRIMY_IRIT_LEAF, + GRIMY_IRIT_LEAF + 1, + GRIMY_AVANTOE, + GRIMY_AVANTOE + 1, + GRIMY_KWUARM, + GRIMY_KWUARM + 1, + GRIMY_SNAPDRAGON, + GRIMY_SNAPDRAGON + 1, + GRIMY_CADANTINE, + GRIMY_CADANTINE + 1, + GRIMY_LANTADYME, + GRIMY_LANTADYME + 1, + GRIMY_DWARF_WEED, + GRIMY_DWARF_WEED + 1, + GRIMY_TORSTOL, + GRIMY_TORSTOL + 1, + + //Clean Herbs + GUAM_LEAF, + GUAM_LEAF + 1, + MARRENTILL, + MARRENTILL + 1, + TARROMIN, + TARROMIN + 1, + HARRALANDER, + HARRALANDER + 1, + RANARR_WEED, + RANARR_WEED + 1, + TOADFLAX, + TOADFLAX + 1, + IRIT_LEAF, + IRIT_LEAF + 1, + AVANTOE, + AVANTOE + 1, + KWUARM, + KWUARM + 1, + SNAPDRAGON, + SNAPDRAGON + 1, + CADANTINE, + CADANTINE + 1, + LANTADYME, + LANTADYME + 1, + DWARF_WEED, + DWARF_WEED + 1, + TORSTOL, + TORSTOL + 1, + + //Secondary ingredients + EYE_OF_NEWT, + EYE_OF_NEWT + 1, + UNICORN_HORN, + UNICORN_HORN + 1, + UNICORN_HORN_DUST, + UNICORN_HORN_DUST + 1, + LIMPWURT_ROOT, + LIMPWURT_ROOT + 1, + RED_SPIDERS_EGGS, + RED_SPIDERS_EGGS + 1, + CHOCOLATE_BAR, + CHOCOLATE_BAR + 1, + CHOCOLATE_DUST, + CHOCOLATE_DUST + 1, + TOADS_LEGS, + TOADS_LEGS + 1, + GOAT_HORN_DUST, + GOAT_HORN_DUST + 1, + DESERT_GOAT_HORN, + DESERT_GOAT_HORN + 1, + SNAPE_GRASS, + SNAPE_GRASS + 1, + MORT_MYRE_FUNGUS, + MORT_MYRE_FUNGUS + 1, + WHITE_BERRIES, + WHITE_BERRIES + 1, + BLUE_DRAGON_SCALE, + BLUE_DRAGON_SCALE + 1, + DRAGON_SCALE_DUST, + DRAGON_SCALE_DUST + 1, + WINE_OF_ZAMORAK, + WINE_OF_ZAMORAK + 1, + POTATO_CACTUS, + POTATO_CACTUS + 1, + BIRD_NEST, + BIRD_NEST + 1, + BIRD_NEST_5071, + BIRD_NEST_5072, + BIRD_NEST_5073, + BIRD_NEST_5074, + BIRD_NEST_5075, + BIRD_NEST_7413, + BIRD_NEST_13653, + BIRD_NEST_22798, + BIRD_NEST_22800, + LAVA_SCALE, + LAVA_SCALE + 1, + LAVA_SCALE_SHARD, + LAVA_SCALE_SHARD + 1, + TORSTOL, + TORSTOL + 1, + SUPERIOR_DRAGON_BONES, + SUPERIOR_DRAGON_BONES + 1, + CRUSHED_SUPERIOR_DRAGON_BONES, + CRUSHED_SUPERIOR_DRAGON_BONES + 1, + AMYLASE_CRYSTAL, + GARLIC, + GARLIC + 1, + + //Jungle Potion herbs + GRIMY_ARDRIGAL, + GRIMY_ROGUES_PURSE, + GRIMY_SITO_FOIL, + GRIMY_SNAKE_WEED, + GRIMY_VOLENCIA_MOSS, + + //Herb seeds + GUAM_SEED, + MARRENTILL_SEED, + TARROMIN_SEED, + HARRALANDER_SEED, + GOUT_TUBER, + RANARR_SEED, + TOADFLAX_SEED, + IRIT_SEED, + AVANTOE_SEED, + KWUARM_SEED, + SNAPDRAGON_SEED, + CADANTINE_SEED, + LANTADYME_SEED, + DWARF_WEED_SEED, + TORSTOL_SEED, + + //Secondary seeds + LIMPWURT_SEED, + SNAPE_GRASS_SEED, + POTATO_CACTUS_SEED, + JANGERBERRY_SEED, + POISON_IVY_SEED, + BELLADONNA_SEED + ); + static final ImmutableSet prayerItems = ImmutableSet.of + ( + //Bones + BONES, + BONES + 1, + WOLF_BONES, + WOLF_BONES + 1, + BURNT_BONES, + BURNT_BONES + 1, + MONKEY_BONES, + MONKEY_BONES + 1, + BAT_BONES, + BAT_BONES + 1, + BIG_BONES, + BIG_BONES + 1, + JOGRE_BONES, + JOGRE_BONES + 1, + ZOGRE_BONES, + ZOGRE_BONES + 1, + SHAIKAHAN_BONES, + SHAIKAHAN_BONES + 1, + BABYDRAGON_BONES, + BABYDRAGON_BONES + 1, + WYRM_BONES, + WYRM_BONES + 1, + WYVERN_BONES, + WYVERN_BONES + 1, + DRAGON_BONES, + DRAGON_BONES + 1, + DRAKE_BONES, + DRAKE_BONES + 1, + FAYRG_BONES, + FAYRG_BONES + 1, + LAVA_DRAGON_BONES, + LAVA_DRAGON_BONES + 1, + RAURG_BONES, + RAURG_BONES + 1, + HYDRA_BONES, + HYDRA_BONES + 1, + DAGANNOTH_BONES, + DAGANNOTH_BONES + 1, + OURG_BONES, + OURG_BONES + 1, + SUPERIOR_DRAGON_BONES, + SUPERIOR_DRAGON_BONES + 1, + + //Ensouled heads + ENSOULED_ABYSSAL_HEAD_13508, + ENSOULED_ABYSSAL_HEAD_13508 + 1, + ENSOULED_AVIANSIE_HEAD_13505, + ENSOULED_AVIANSIE_HEAD_13505 + 1, + ENSOULED_BEAR_HEAD_13463, + ENSOULED_BEAR_HEAD_13463 + 1, + ENSOULED_BLOODVELD_HEAD_13496, + ENSOULED_BLOODVELD_HEAD_13496 + 1, + ENSOULED_CHAOS_DRUID_HEAD_13472, + ENSOULED_CHAOS_DRUID_HEAD_13472 + 1, + ENSOULED_DAGANNOTH_HEAD_13493, + ENSOULED_DAGANNOTH_HEAD_13493 + 1, + ENSOULED_DEMON_HEAD_13502, + ENSOULED_DEMON_HEAD_13502 + 1, + ENSOULED_DOG_HEAD_13469, + ENSOULED_DOG_HEAD_13469 + 1, + ENSOULED_DRAGON_HEAD_13511, + ENSOULED_DRAGON_HEAD_13511 + 1, + ENSOULED_ELF_HEAD_13481, + ENSOULED_ELF_HEAD_13481 + 1, + ENSOULED_GIANT_HEAD_13475, + ENSOULED_GIANT_HEAD_13475 + 1, + ENSOULED_GOBLIN_HEAD_13448, + ENSOULED_GOBLIN_HEAD_13448 + 1, + ENSOULED_HORROR_HEAD_13487, + ENSOULED_HORROR_HEAD_13487 + 1, + ENSOULED_IMP_HEAD_13454, + ENSOULED_IMP_HEAD_13454 + 1, + ENSOULED_KALPHITE_HEAD_13490, + ENSOULED_KALPHITE_HEAD_13490 + 1, + ENSOULED_MINOTAUR_HEAD_13457, + ENSOULED_MINOTAUR_HEAD_13457 + 1, + ENSOULED_MONKEY_HEAD_13451, + ENSOULED_MONKEY_HEAD_13451 + 1, + ENSOULED_OGRE_HEAD_13478, + ENSOULED_OGRE_HEAD_13478 + 1, + ENSOULED_SCORPION_HEAD_13460, + ENSOULED_SCORPION_HEAD_13460 + 1, + ENSOULED_TROLL_HEAD_13484, + ENSOULED_TROLL_HEAD_13484 + 1, + ENSOULED_TZHAAR_HEAD_13499, + ENSOULED_TZHAAR_HEAD_13499 + 1, + ENSOULED_UNICORN_HEAD_13466, + ENSOULED_UNICORN_HEAD_13466 + 1 + ); @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private Map.Entry textBoxBounds; @@ -172,9 +424,6 @@ public class GroundItemsPlugin extends Plugin @Inject private EventBus eventBus; private LoadingCache highlightedItems; - private LoadingCache hiddenItems; - private final Queue droppedItemQueue = EvictingQueue.create(16); // recently dropped items - private Color defaultColor; private Color highlightedColor; private Color hiddenColor; @@ -225,6 +474,8 @@ public class GroundItemsPlugin extends Plugin private boolean showTimer; @Getter(AccessLevel.PACKAGE) private Color bordercolor; + private Color herbloreColor; + private Color prayerColor; @Provides GroundItemsConfig provideConfig(ConfigManager configManager) @@ -821,6 +1072,21 @@ public class GroundItemsPlugin extends Plugin this.getHighlightItems = Text.toCSV(highlightedItemSet); } + Color getHerbloreColor() + { + return herbloreColor; + } + + Color getPrayerColor() + { + return prayerColor; + } + + Color getDefaultColor() + { + return config.defaultColor(); + } + Color getHighlighted(String item, int gePrice, int haPrice) { if (TRUE.equals(highlightedItems.getUnchecked(item))) @@ -1022,5 +1288,9 @@ public class GroundItemsPlugin extends Plugin this.toggleOutline = config.toggleOutline(); this.showTimer = config.showTimer(); this.bordercolor = config.bordercolor(); + this.herbloreColor = config.herbloreColor(); + this.prayerColor = config.prayerColor(); + this.highlightHerblore = config.highlightHerblore(); + this.highlightPrayer = config.highlightPrayer(); } }