From d74fff1991f710dd2463b232afee49eefb2d5d13 Mon Sep 17 00:00:00 2001 From: bfmoatbio Date: Sat, 9 May 2020 11:48:55 -0700 Subject: [PATCH 1/5] Allow non-degraded barrows equipment for clue step One master clue step requires the player to wear "any full barrows set." Previously the emote clue logic for this step allowed only levels of degradation from 0-100, but not the non-degraded item (whose item ID is disjoint from the others). Wrap those item range checks with an 'any' clause which also allows the non-degraded item. Add tests for degraded and non-degraded barrows sets. --- .../plugins/cluescrolls/clues/EmoteClue.java | 2 +- .../cluescrolls/clues/EmoteClueTest.java | 46 ++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java index d0d58ff2e1..002cb49f6b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java @@ -72,7 +72,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu new EmoteClue("Dance on the Fishing Platform. Equip barrows gloves, an amulet of glory and a dragon med helm.", "Fishing Platform", SOUTHEAST_CORNER_OF_THE_FISHING_PLATFORM, new WorldPoint(2782, 3273, 0), DANCE, any("Any amulet of glory", item(AMULET_OF_GLORY), item(AMULET_OF_GLORY1), item(AMULET_OF_GLORY2), item(AMULET_OF_GLORY3), item(AMULET_OF_GLORY4), item(AMULET_OF_GLORY5), item(AMULET_OF_GLORY6)), item(BARROWS_GLOVES), item(DRAGON_MED_HELM)), new EmoteClue("Flap at the death altar. Beware of double agents! Equip a death tiara, a legend's cape and any ring of wealth.", "Death altar", DEATH_ALTAR, new WorldPoint(2205, 4838, 0), DOUBLE_AGENT_141, FLAP, any("Any ring of wealth", item(RING_OF_WEALTH), item(RING_OF_WEALTH_1), item(RING_OF_WEALTH_2), item(RING_OF_WEALTH_3), item(RING_OF_WEALTH_4), item(RING_OF_WEALTH_5), item(RING_OF_WEALTH_I), item(RING_OF_WEALTH_I1), item(RING_OF_WEALTH_I2), item(RING_OF_WEALTH_I3), item(RING_OF_WEALTH_I4), item(RING_OF_WEALTH_I5)), item(DEATH_TIARA), item(CAPE_OF_LEGENDS)), new EmoteClue("Headbang in the Fight Arena pub. Equip a pirate bandana, a dragonstone necklace and and a magic longbow.", "Fight Arena pub", OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA, new WorldPoint(2568, 3149, 0), HEADBANG, any("Any pirate bandana", item(PIRATE_BANDANA), item(PIRATE_BANDANA_7124), item(PIRATE_BANDANA_7130), item(PIRATE_BANDANA_7136)), item(DRAGON_NECKLACE), item(MAGIC_LONGBOW)), - new EmoteClue("Do a jig at the barrows chest. Beware of double agents! Equip any full barrows set.", "Barrows chest", BARROWS_CHEST, new WorldPoint(3551, 9694, 0), DOUBLE_AGENT_141, JIG, any("Any full barrows set", all(range(AHRIMS_HOOD_100, AHRIMS_HOOD_0), range(AHRIMS_STAFF_100, AHRIMS_STAFF_0), range(AHRIMS_ROBETOP_100, AHRIMS_ROBETOP_0), range(AHRIMS_ROBESKIRT_100, AHRIMS_ROBESKIRT_0)), all(range(DHAROKS_HELM_100, DHAROKS_HELM_0), range(DHAROKS_GREATAXE_100, DHAROKS_GREATAXE_0), range(DHAROKS_PLATEBODY_100, DHAROKS_PLATEBODY_0), range(DHAROKS_PLATELEGS_100, DHAROKS_PLATELEGS_0)), all(range(GUTHANS_HELM_100, GUTHANS_HELM_0), range(GUTHANS_WARSPEAR_100, GUTHANS_WARSPEAR_0), range(GUTHANS_PLATEBODY_100, GUTHANS_PLATEBODY_0), range(GUTHANS_CHAINSKIRT_100, GUTHANS_CHAINSKIRT_0)), all(range(KARILS_COIF_100, KARILS_COIF_0), range(KARILS_CROSSBOW_100, KARILS_CROSSBOW_0), range(KARILS_LEATHERTOP_100, KARILS_LEATHERTOP_0), range(KARILS_LEATHERSKIRT_100, KARILS_LEATHERSKIRT_0)), all(range(TORAGS_HELM_100, TORAGS_HELM_0), range(TORAGS_HAMMERS_100, TORAGS_HAMMERS_0), range(TORAGS_PLATEBODY_100, TORAGS_PLATEBODY_0), range(TORAGS_PLATELEGS_100, TORAGS_PLATELEGS_0)), all(range(VERACS_HELM_100, VERACS_HELM_0), range(VERACS_FLAIL_100, VERACS_FLAIL_0), range(VERACS_BRASSARD_100, VERACS_BRASSARD_0), range(VERACS_PLATESKIRT_100, VERACS_PLATESKIRT_0)))), + new EmoteClue("Do a jig at the barrows chest. Beware of double agents! Equip any full barrows set.", "Barrows chest", BARROWS_CHEST, new WorldPoint(3551, 9694, 0), DOUBLE_AGENT_141, JIG, any("Any full barrows set", all(any("Ahrim's hood", item(AHRIMS_HOOD), range(AHRIMS_HOOD_100, AHRIMS_HOOD_0)), any("Ahrim's staff", item(AHRIMS_STAFF), range(AHRIMS_STAFF_100, AHRIMS_STAFF_0)), any("Ahrim's robetop", item(AHRIMS_ROBETOP), range(AHRIMS_ROBETOP_100, AHRIMS_ROBETOP_0)), any("Ahrim's robeskirt", item(AHRIMS_ROBESKIRT), range(AHRIMS_ROBESKIRT_100, AHRIMS_ROBESKIRT_0))), all(any("Dharok's helm", item(DHAROKS_HELM), range(DHAROKS_HELM_100, DHAROKS_HELM_0)), any("Dharok's greataxe", item(DHAROKS_GREATAXE), range(DHAROKS_GREATAXE_100, DHAROKS_GREATAXE_0)), any("Dharok's platebody", item(DHAROKS_PLATEBODY), range(DHAROKS_PLATEBODY_100, DHAROKS_PLATEBODY_0)), any("Dharok's platelegs", item(DHAROKS_PLATELEGS), range(DHAROKS_PLATELEGS_100, DHAROKS_PLATELEGS_0))), all(any("Guthan's helm", item(GUTHANS_HELM), range(GUTHANS_HELM_100, GUTHANS_HELM_0)), any("Guthan's warspear", item(GUTHANS_WARSPEAR), range(GUTHANS_WARSPEAR_100, GUTHANS_WARSPEAR_0)), any("Guthan's platebody", item(GUTHANS_PLATEBODY), range(GUTHANS_PLATEBODY_100, GUTHANS_PLATEBODY_0)), any("Guthan's chainskirt", item(GUTHANS_CHAINSKIRT), range(GUTHANS_CHAINSKIRT_100, GUTHANS_CHAINSKIRT_0))), all(any("Karil's coif", item(KARILS_COIF), range(KARILS_COIF_100, KARILS_COIF_0)), any("Karil's crossbow", item(KARILS_CROSSBOW), range(KARILS_CROSSBOW_100, KARILS_CROSSBOW_0)), any("Karil's leathertop", item(KARILS_LEATHERTOP), range(KARILS_LEATHERTOP_100, KARILS_LEATHERTOP_0)), any("Karil's leatherskirt", item(KARILS_LEATHERSKIRT), range(KARILS_LEATHERSKIRT_100, KARILS_LEATHERSKIRT_0))), all(any("Torag's helm", item(TORAGS_HELM), range(TORAGS_HELM_100, TORAGS_HELM_0)), any("Torag's hammers", item(TORAGS_HAMMERS), range(TORAGS_HAMMERS_100, TORAGS_HAMMERS_0)), any("Torag's platebody", item(TORAGS_PLATEBODY), range(TORAGS_PLATEBODY_100, TORAGS_PLATEBODY_0)), any("Torag's platelegs", item(TORAGS_PLATELEGS), range(TORAGS_PLATELEGS_100, TORAGS_PLATELEGS_0))), all(any("Verac's helm", item(VERACS_HELM), range(VERACS_HELM_100, VERACS_HELM_0)), any("Verac's flail", item(VERACS_FLAIL), range(VERACS_FLAIL_100, VERACS_FLAIL_0)), any("Verac's brassard", item(VERACS_BRASSARD), range(VERACS_BRASSARD_100, VERACS_BRASSARD_0)), any("Verac's plateskirt", item(VERACS_PLATESKIRT), range(VERACS_PLATESKIRT_100, VERACS_PLATESKIRT_0))))), new EmoteClue("Jig at Jiggig. Beware of double agents! Equip a Rune spear, rune platelegs and any rune heraldic helm.", "Jiggig", IN_THE_MIDDLE_OF_JIGGIG, new WorldPoint(2477, 3047, 0), DOUBLE_AGENT_108, JIG, range("Any rune heraldic helm", RUNE_HELM_H1, RUNE_HELM_H5), item(RUNE_SPEAR), item(RUNE_PLATELEGS)), new EmoteClue("Cheer at the games room. Have nothing equipped at all when you do.", "Games room", null, new WorldPoint(2207, 4952, 0), CHEER, emptySlot("Nothing at all", HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, LEGS, GLOVES, BOOTS, RING, AMMO)), new EmoteClue("Panic on the pier where you catch the Fishing trawler. Have nothing equipped at all when you do.", "Fishing trawler", null, new WorldPoint(2676, 3169, 0), PANIC, emptySlot("Nothing at all", HEAD, CAPE, AMULET, WEAPON, BODY, SHIELD, LEGS, GLOVES, BOOTS, RING, AMMO)), diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClueTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClueTest.java index cc82f9fca2..b0a2baaba1 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClueTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClueTest.java @@ -24,14 +24,58 @@ */ package net.runelite.client.plugins.cluescrolls.clues; -import static org.junit.Assert.assertNull; +import net.runelite.api.Item; +import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; +import static net.runelite.api.ItemID.*; +import static org.junit.Assert.*; import org.junit.Test; public class EmoteClueTest { + private Item item(final int id) + { + return new Item(id, 1); + } + @Test public void forTextEmptyString() { assertNull(EmoteClue.forText("")); } + + @Test + public void itemRequirementsFullBarrowsSetNonDegraged() + { + EmoteClue barrowsClue = EmoteClue.forText("Do a jig at the barrows chest. Beware of double agents! Equip any full barrows set."); + ItemRequirement[] requirements = barrowsClue.getItemRequirements(); + + assertEquals(1, requirements.length); + + ItemRequirement fullBarrowsSetRequirement = requirements[0]; + + assertTrue("Full Ahrim set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(AHRIMS_STAFF), item(AHRIMS_HOOD), item(AHRIMS_ROBETOP), item(AHRIMS_ROBESKIRT) })); + assertTrue("Full Dharok set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(DHAROKS_GREATAXE), item(DHAROKS_HELM), item(DHAROKS_PLATEBODY), item(DHAROKS_PLATELEGS) })); + assertTrue("Full Guthan set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(GUTHANS_WARSPEAR), item(GUTHANS_HELM), item(GUTHANS_PLATEBODY), item(GUTHANS_CHAINSKIRT) })); + assertTrue("Full Karil set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(KARILS_CROSSBOW), item(KARILS_COIF), item(KARILS_LEATHERTOP), item(KARILS_LEATHERSKIRT) })); + assertTrue("Full Torag set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(TORAGS_HAMMERS), item(TORAGS_HELM), item(TORAGS_PLATEBODY), item(TORAGS_PLATELEGS) })); + assertTrue("Full Verac set, nondegraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(VERACS_FLAIL), item(VERACS_HELM), item(VERACS_BRASSARD), item(VERACS_PLATESKIRT) })); + } + + @Test + public void itemRequirementsFullBarrowsSetDegraded() + { + EmoteClue barrowsClue = EmoteClue.forText("Do a jig at the barrows chest. Beware of double agents! Equip any full barrows set."); + ItemRequirement[] requirements = barrowsClue.getItemRequirements(); + + assertEquals(1, requirements.length); + + ItemRequirement fullBarrowsSetRequirement = requirements[0]; + + assertTrue("Full Ahrim set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(AHRIMS_STAFF_50), item(AHRIMS_HOOD_50), item(AHRIMS_ROBETOP_50), item(AHRIMS_ROBESKIRT_50) })); + assertTrue("Full Dharok set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(DHAROKS_GREATAXE_50), item(DHAROKS_HELM_50), item(DHAROKS_PLATEBODY_50), item(DHAROKS_PLATELEGS_50) })); + assertTrue("Full Guthan set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(GUTHANS_WARSPEAR_50), item(GUTHANS_HELM_50), item(GUTHANS_PLATEBODY_50), item(GUTHANS_CHAINSKIRT_50) })); + assertTrue("Full Karil set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(KARILS_CROSSBOW_50), item(KARILS_COIF_50), item(KARILS_LEATHERTOP_50), item(KARILS_LEATHERSKIRT_50) })); + assertTrue("Full Torag set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(TORAGS_HAMMERS_50), item(TORAGS_HELM_50), item(TORAGS_PLATEBODY_50), item(TORAGS_PLATELEGS_50) })); + assertTrue("Full Verac set, degraded", fullBarrowsSetRequirement.fulfilledBy(new Item[]{ item(VERACS_FLAIL_50), item(VERACS_HELM_50), item(VERACS_BRASSARD_50), item(VERACS_PLATESKIRT_50) })); + } } From 7595fad42cd10ba0275432bc6e4f08614224994d Mon Sep 17 00:00:00 2001 From: Austin Lee Date: Thu, 28 Nov 2019 10:13:43 -0800 Subject: [PATCH 2/5] Add gnome bench to construction skill calculator --- .../client/plugins/skillcalculator/skill_construction.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json index c53546241e..495881c66e 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json @@ -948,6 +948,12 @@ "name": "Armillary Globe", "xp": 960 }, + { + "level": 77, + "icon": 20650, + "name": "Gnome Bench", + "xp": 840 + }, { "level": 80, "icon": 8330, From 4a378817fd9462708e8a954ec2ed63fa11a25c65 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Sat, 14 Mar 2020 15:07:26 +0000 Subject: [PATCH 3/5] ground items: move repeated notify code into notifyHighlightedItem --- .../grounditems/GroundItemsPlugin.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) 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 2ee7db3816..df4baeb09b 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 @@ -242,12 +242,7 @@ public class GroundItemsPlugin extends Plugin // The spawn time remains set at the oldest spawn } - boolean shouldNotify = !config.onlyShowLoot() && config.highlightedColor().equals(getHighlighted( - new NamedQuantity(groundItem), - groundItem.getGePrice(), - groundItem.getHaPrice())); - - if (config.notifyHighlightedDrops() && shouldNotify) + if (!config.onlyShowLoot()) { notifyHighlightedItem(groundItem); } @@ -370,12 +365,7 @@ public class GroundItemsPlugin extends Plugin { groundItem.setLootType(lootType); - boolean shouldNotify = config.onlyShowLoot() && config.highlightedColor().equals(getHighlighted( - new NamedQuantity(groundItem), - groundItem.getGePrice(), - groundItem.getHaPrice())); - - if (config.notifyHighlightedDrops() && shouldNotify) + if (config.onlyShowLoot()) { notifyHighlightedItem(groundItem); } @@ -645,6 +635,16 @@ public class GroundItemsPlugin extends Plugin private void notifyHighlightedItem(GroundItem item) { + boolean shouldNotifyHighlighted = config.highlightedColor().equals(getHighlighted( + new NamedQuantity(item), + item.getGePrice(), + item.getHaPrice())); + + if (!config.notifyHighlightedDrops() || !shouldNotifyHighlighted) + { + return; + } + final Player local = client.getLocalPlayer(); final StringBuilder notificationStringBuilder = new StringBuilder() .append("[") From b95b30f60646f797153c6ae31b874fc03e38455f Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Sat, 14 Mar 2020 16:36:22 +0000 Subject: [PATCH 4/5] ground items: remove Highlight > Value --- .../client/plugins/grounditems/GroundItemsConfig.java | 11 ----------- .../client/plugins/grounditems/GroundItemsPlugin.java | 4 ---- 2 files changed, 15 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 2e1a00ce04..58a6d14d90 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 @@ -184,17 +184,6 @@ public interface GroundItemsConfig extends Config return ValueCalculationMode.HIGHEST; } - @ConfigItem( - keyName = "highlightOverValue2", - name = "Highlight > Value", - description = "Configures highlighted ground items over either GE or HA value", - position = 12 - ) - default int getHighlightOverValue() - { - return 0; - } - @ConfigItem( keyName = "hideUnderValue", name = "Hide < Value", 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 df4baeb09b..7fa827445a 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 @@ -431,10 +431,6 @@ public class GroundItemsPlugin extends Plugin // Cache colors ImmutableList.Builder priceCheckBuilder = ImmutableList.builder(); - if (config.getHighlightOverValue() > 0) - { - priceCheckBuilder.add(new PriceHighlight(config.getHighlightOverValue(), config.highlightedColor())); - } if (config.insaneValuePrice() > 0) { From 9f26bb67c19f92af15a2ad60273b4f45b77a76aa Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Wed, 6 May 2020 11:36:45 +0100 Subject: [PATCH 5/5] ground items: add Notify >= Tier --- .../grounditems/GroundItemsConfig.java | 20 ++++-- .../grounditems/GroundItemsPlugin.java | 67 +++++++++++-------- .../grounditems/config/HighlightTier.java | 53 +++++++++++++++ 3 files changed, 109 insertions(+), 31 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/HighlightTier.java 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 58a6d14d90..555da9cd4a 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 @@ -30,6 +30,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; import net.runelite.client.config.Units; +import net.runelite.client.plugins.grounditems.config.HighlightTier; import net.runelite.client.plugins.grounditems.config.ItemHighlightMode; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; @@ -140,11 +141,22 @@ public interface GroundItemsConfig extends Config return false; } + @ConfigItem( + keyName = "notifyTier", + name = "Notify >= Tier", + description = "Configures what tier of highlight will cause a drop", + position = 8 + ) + default HighlightTier notifyTier() + { + return HighlightTier.OFF; + } + @ConfigItem( keyName = "priceDisplayMode", name = "Price Display Mode", description = "Configures what price types are shown alongside of ground item name", - position = 8 + position = 9 ) default PriceDisplayMode priceDisplayMode() { @@ -155,7 +167,7 @@ public interface GroundItemsConfig extends Config keyName = "itemHighlightMode", name = "Item Highlight Mode", description = "Configures how ground items will be highlighted", - position = 9 + position = 10 ) default ItemHighlightMode itemHighlightMode() { @@ -166,7 +178,7 @@ public interface GroundItemsConfig extends Config keyName = "menuHighlightMode", name = "Menu Highlight Mode", description = "Configures what to highlight in right-click menu", - position = 10 + position = 11 ) default MenuHighlightMode menuHighlightMode() { @@ -177,7 +189,7 @@ public interface GroundItemsConfig extends Config keyName = "highlightValueCalculation", name = "Highlight Value Calculation", description = "Configures which coin value is used to determine highlight color", - position = 11 + position = 12 ) default ValueCalculationMode valueCalculationMode() { 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 7fa827445a..2f258d152d 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 @@ -32,6 +32,7 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Provides; import java.awt.Color; import java.awt.Rectangle; +import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import java.time.Instant; import java.util.ArrayList; @@ -80,12 +81,12 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.grounditems.config.HighlightTier; import static net.runelite.client.plugins.grounditems.config.ItemHighlightMode.OVERLAY; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.BOTH; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.NAME; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.OPTION; -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.QuantityFormatter; @@ -562,29 +563,12 @@ public class GroundItemsPlugin extends Plugin return null; } - ValueCalculationMode mode = config.valueCalculationMode(); + final int price = getValueByMode(gePrice, haPrice); for (PriceHighlight highlight : priceChecks) { - switch (mode) + if (price > highlight.getPrice()) { - case GE: - if (gePrice > highlight.getPrice()) - { - return highlight.getColor(); - } - break; - case HA: - if (haPrice > highlight.getPrice()) - { - return highlight.getColor(); - } - break; - default: // case HIGHEST - if (gePrice > highlight.getPrice() || haPrice > highlight.getPrice()) - { - return highlight.getColor(); - } - break; + return highlight.getColor(); } } @@ -631,12 +615,26 @@ public class GroundItemsPlugin extends Plugin private void notifyHighlightedItem(GroundItem item) { - boolean shouldNotifyHighlighted = config.highlightedColor().equals(getHighlighted( - new NamedQuantity(item), - item.getGePrice(), - item.getHaPrice())); + final boolean shouldNotifyHighlighted = config.notifyHighlightedDrops() && + config.highlightedColor().equals(getHighlighted( + new NamedQuantity(item), + item.getGePrice(), + item.getHaPrice())); - if (!config.notifyHighlightedDrops() || !shouldNotifyHighlighted) + final boolean shouldNotifyTier = config.notifyTier() != HighlightTier.OFF && + getValueByMode(item.getGePrice(), item.getHaPrice()) > config.notifyTier().getValueFromTier(config) && + FALSE.equals(hiddenItems.getUnchecked(new NamedQuantity(item))); + + final String dropType; + if (shouldNotifyHighlighted) + { + dropType = "highlighted"; + } + else if (shouldNotifyTier) + { + dropType = "valuable"; + } + else { return; } @@ -645,7 +643,9 @@ public class GroundItemsPlugin extends Plugin final StringBuilder notificationStringBuilder = new StringBuilder() .append("[") .append(local.getName()) - .append("] received a highlighted drop: ") + .append("] received a ") + .append(dropType) + .append(" drop: ") .append(item.getName()); if (item.getQuantity() > 1) @@ -669,6 +669,19 @@ public class GroundItemsPlugin extends Plugin notifier.notify(notificationStringBuilder.toString()); } + private int getValueByMode(int gePrice, int haPrice) + { + switch (config.valueCalculationMode()) + { + case GE: + return gePrice; + case HA: + return haPrice; + default: // Highest + return Math.max(gePrice, haPrice); + } + } + @Subscribe public void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/HighlightTier.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/HighlightTier.java new file mode 100644 index 0000000000..1764acf42c --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/HighlightTier.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2020, Hydrox6 + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.grounditems.config; + +import net.runelite.client.plugins.grounditems.GroundItemsConfig; + +public enum HighlightTier +{ + OFF, + LOW, + MEDIUM, + HIGH, + INSANE; + + public int getValueFromTier(GroundItemsConfig config) + { + switch (this) + { + case LOW: + return config.lowValuePrice(); + case MEDIUM: + return config.mediumValuePrice(); + case HIGH: + return config.highValuePrice(); + case INSANE: + return config.insaneValuePrice(); + default: + throw new UnsupportedOperationException(); + } + } +}