From abde0e248ce6af92f6a452413004dde1f7e31c70 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 24 Sep 2019 17:32:55 +0100 Subject: [PATCH 01/13] agility: add plant door obstacle --- .../src/main/java/net/runelite/client/game/AgilityShortcut.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index 1185280e0f..ff7288e5e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -55,7 +55,7 @@ public enum AgilityShortcut // McGrubor's Wood LOOSE_RAILING, // Underwater Area Fossil Island - TUNNEL_30959, HOLE_30966, OBSTACLE, OBSTACLE_30767, OBSTACLE_30964, OBSTACLE_30962, + TUNNEL_30959, HOLE_30966, OBSTACLE, OBSTACLE_30767, OBSTACLE_30964, OBSTACLE_30962, PLANT_DOOR_30961, // Tree Gnome Village LOOSE_RAILING_2186, // Burgh de Rott From 03216e59542fadbea7f35d5eee0f8dd369008409 Mon Sep 17 00:00:00 2001 From: dekvall Date: Sat, 28 Sep 2019 03:39:30 +0200 Subject: [PATCH 02/13] Inventorygrid: Draw image for replaced item --- .../inventorygrid/InventoryGridOverlay.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java index a8848a3dd1..ad1e01ceed 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java @@ -82,6 +82,7 @@ class InventoryGridOverlay extends Overlay final int if1DraggedItemIndex = client.getIf1DraggedItemIndex(); final WidgetItem draggedItem = inventoryWidget.getWidgetItem(if1DraggedItemIndex); final int itemId = draggedItem.getId(); + final Rectangle initialBounds = draggedItem.getCanvasBounds(); if (itemId == -1) { @@ -91,19 +92,15 @@ class InventoryGridOverlay extends Overlay for (int i = 0; i < INVENTORY_SIZE; ++i) { WidgetItem widgetItem = inventoryWidget.getWidgetItem(i); + final int targetItemId = widgetItem.getId(); final Rectangle bounds = widgetItem.getCanvasBounds(); boolean inBounds = bounds.contains(mousePoint); if (config.showItem() && inBounds) { - final BufferedImage draggedItemImage = itemManager.getImage(itemId); - final int x = (int) bounds.getX(); - final int y = (int) bounds.getY(); - - graphics.setComposite(AlphaComposite.SrcOver.derive(0.3f)); - graphics.drawImage(draggedItemImage, x, y, null); - graphics.setComposite(AlphaComposite.SrcOver); + drawItem(graphics, bounds, itemId); + drawItem(graphics, initialBounds, targetItemId); } if (config.showHighlight() && inBounds) @@ -120,4 +117,20 @@ class InventoryGridOverlay extends Overlay return null; } + + private void drawItem(Graphics2D graphics, Rectangle bounds, int itemId) + { + if (itemId == -1) + { + return; + } + + final BufferedImage draggedItemImage = itemManager.getImage(itemId); + final int x = (int) bounds.getX(); + final int y = (int) bounds.getY(); + + graphics.setComposite(AlphaComposite.SrcOver.derive(0.3f)); + graphics.drawImage(draggedItemImage, x, y, null); + graphics.setComposite(AlphaComposite.SrcOver); + } } From a23411f7f2a12b8bce0899ebed095087c6e41551 Mon Sep 17 00:00:00 2001 From: dekvall Date: Fri, 4 Oct 2019 23:51:45 +0200 Subject: [PATCH 03/13] xptracker: fix goals set from level 1 Since the base xp for level 1 is 0 the startLevelXp was initialized from the current level which made the progress bar calculations wrong as they were based on the xp earned from the current level base xp and not level 1. --- .../net/runelite/client/plugins/xptracker/XpStateSingle.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java index af37a7ec3c..608accc239 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java @@ -220,7 +220,7 @@ class XpStateSingle // Determine XP goals, overall has no goals if (skill != Skill.OVERALL) { - if (goalStartXp <= 0 || currentXp > goalEndXp) + if (goalStartXp < 0 || currentXp > goalEndXp) { startLevelExp = Experience.getXpForLevel(Experience.getLevelForXp((int) currentXp)); } From a8cbc7a1f22717d7540568091799fbd37b8e4698 Mon Sep 17 00:00:00 2001 From: Eric Weaver Date: Mon, 7 Oct 2019 05:53:04 -0400 Subject: [PATCH 04/13] Update Anglerfish master challenge clue text (#9988) --- .../client/plugins/cluescrolls/clues/SkillChallengeClue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java index 2c75d1a49e..11efc632d4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java @@ -173,7 +173,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll new SkillChallengeClue("Cremate a set of fiyr remains.", any("Magic or Redwood Pyre Logs", item(ItemID.MAGIC_PYRE_LOGS), item(ItemID.REDWOOD_PYRE_LOGS)), item(ItemID.TINDERBOX), item(ItemID.FIYR_REMAINS)), new SkillChallengeClue("Dissect a sacred eel.", item(ItemID.KNIFE), any("Fishing rod", item(ItemID.FISHING_ROD), item(ItemID.PEARL_FISHING_ROD)), item(ItemID.FISHING_BAIT)), new SkillChallengeClue("Kill a lizardman shaman."), - new SkillChallengeClue("Catch an Anglerfish.", "angle for an anglerfish in your finest fishing gear.", true, any("Fishing rod", item(ItemID.FISHING_ROD), item(ItemID.PEARL_FISHING_ROD)), item(ItemID.SANDWORMS), all("Angler's outfit", item(ItemID.ANGLER_HAT), item(ItemID.ANGLER_TOP), item(ItemID.ANGLER_WADERS), item(ItemID.ANGLER_BOOTS))), + new SkillChallengeClue("Catch an Anglerfish.", "angle for an anglerfish whilst sporting the finest fishing gear.", true, any("Fishing rod", item(ItemID.FISHING_ROD), item(ItemID.PEARL_FISHING_ROD)), item(ItemID.SANDWORMS), all("Angler's outfit", item(ItemID.ANGLER_HAT), item(ItemID.ANGLER_TOP), item(ItemID.ANGLER_WADERS), item(ItemID.ANGLER_BOOTS))), new SkillChallengeClue("Chop a redwood log.", "chop a redwood log whilst sporting the finest lumberjack gear.", true, ANY_AXE, all("Lumberjack outfit", item(ItemID.LUMBERJACK_HAT), item(ItemID.LUMBERJACK_TOP), item(ItemID.LUMBERJACK_LEGS), item(ItemID.LUMBERJACK_BOOTS))), new SkillChallengeClue("Craft a light orb in the Dorgesh-Kaan bank.", item(ItemID.CAVE_GOBLIN_WIRE), item(ItemID.EMPTY_LIGHT_ORB)), new SkillChallengeClue("Kill a reanimated Abyssal Demon.", "kill a reanimated abyssal.", xOfItem(ItemID.SOUL_RUNE, 4), xOfItem(ItemID.BLOOD_RUNE, 1), any("Nature Rune x4", xOfItem(ItemID.NATURE_RUNE, 4), item(ItemID.BRYOPHYTAS_STAFF)), range("Ensouled abyssal head", ItemID.ENSOULED_ABYSSAL_HEAD, ItemID.ENSOULED_ABYSSAL_HEAD_13508)), From c5e3f8c98c5ff51d2b9c6c49d0e416051d5f0f9a Mon Sep 17 00:00:00 2001 From: Eric Weaver Date: Mon, 7 Oct 2019 05:54:21 -0400 Subject: [PATCH 05/13] Fix typo in Barrows chest emote clue (#9982) --- .../runelite/client/plugins/cluescrolls/clues/EmoteClue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b66c17e0da..f06bd268f1 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 @@ -70,7 +70,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), 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 barrow's chest. Beware of double agents! Equip any full barrows set.", "Barrows chest", BARROWS_CHEST, new WorldPoint(3551, 9694, 0), 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), 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("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), 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)), From b823af0a92e2a4ff7ca002025f0404be80d52cfd Mon Sep 17 00:00:00 2001 From: Gustavo Rodrigues Date: Mon, 7 Oct 2019 07:42:28 -0300 Subject: [PATCH 06/13] Add Drift Net to skill calc plugin (#9958) --- .../client/plugins/skillcalculator/skill_crafting.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json index 0d098baf3a..db9262a7d1 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json @@ -217,6 +217,12 @@ "name": "Jade Necklace", "xp": 54 }, + { + "level": 26, + "icon": 6209, + "name": "Drift Net", + "xp": 55 + }, { "level": 27, "icon": 1605, From 77deb0964e9d84f899550f8387c7634759e6b95a Mon Sep 17 00:00:00 2001 From: SebastiaanVanspauwen <43320258+SebastiaanVanspauwen@users.noreply.github.com> Date: Mon, 7 Oct 2019 12:44:09 +0200 Subject: [PATCH 07/13] worldmap: Add Wilderness crabs teleport (#9970) --- .../plugins/worldmap/TeleportLocationData.java | 1 + .../worldmap/wilderness_crabs_teleport_icon.png | Bin 0 -> 181 bytes 2 files changed, 1 insertion(+) create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java index 15c864893f..8e03a1d651 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java @@ -149,6 +149,7 @@ enum TeleportLocationData OBELISK_35(TeleportType.OTHER, "Obelisk", "35", new WorldPoint(3106, 3794, 0), "obelisk_icon.png"), OBELISK_44(TeleportType.OTHER, "Obelisk", "44", new WorldPoint(2980, 3866, 0), "obelisk_icon.png"), OBELISK_50(TeleportType.OTHER, "Obelisk", "50", new WorldPoint(3307, 3916, 0), "obelisk_icon.png"), + WILDERNESS_CRABS_TELEPORT(TeleportType.OTHER, "Wilderness crabs teleport", new WorldPoint(3348, 3783, 0), "wilderness_crabs_teleport_icon.png"), // Achievement Diary ARDOUGNE_CLOAK_MONASTERY(TeleportType.OTHER, "Ardougne Cloak", "Monastery", new WorldPoint(2606, 3222, 0), "ardougne_cloak_icon.png"), diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4491753acb37460724b583b03df24019888c78af GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^{2!lvI6;x#X;^) z4C~IxyaaMM1AIbU-3xs7@89nq;eI-I!3vOyk|4ie28U-i(tsRWPZ!4!j_b(@7orXv zIACJh)!1lkvZc|{G%Jg#`PHhaoIIDq)^;@r1c$F>*|f~fk@M=6D=Zw0*BGyH8?iD3 Xn~Awf9oYN_Xb^*^tDnm{r-UW|R0}uQ literal 0 HcmV?d00001 From 478df41331c11592a5de3698bdee04ffa60a5551 Mon Sep 17 00:00:00 2001 From: Taylor Date: Mon, 7 Oct 2019 05:55:03 -0500 Subject: [PATCH 08/13] Fix Monk's residence and Rommik cryptic crate locations (#9936) Change coordinates for "Monk's residence in the far west. See robe storage device.". Change coordinates for "Search the crate in Rommiks crafting shop in Rimmington.". --- .../client/plugins/cluescrolls/clues/CrypticClue.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 70d397a305..d0f950b9de 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -255,7 +255,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the chests upstairs in Al Kharid Palace.", CLOSED_CHEST_375, new WorldPoint(3301, 3169, 1), "The chest is located, in the northeast corner, on the first floor of the Al Kharid Palace"), new CrypticClue("Search the boxes just outside the Armour shop in East Ardougne.", BOXES_361, new WorldPoint(2654, 3299, 0), "Outside Zenesha's Plate Mail Body Shop"), new CrypticClue("Surrounded by white walls and gems.", "Herquin", new WorldPoint(2945, 3335, 0), "Talk to Herquin, the gem store owner in Falador."), - new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1742, 3490, 1), "Search the drawers in the south tent of the monk's camp on the southern coast of Hosidius, directly south of the player-owned house portal."), + new CrypticClue("Monk's residence in the far west. See robe storage device.", DRAWERS_350, new WorldPoint(1746, 3490, 0), "Search the drawers in the south tent of the monk's camp on the southern coast of Hosidius, directly south of the player-owned house portal."), new CrypticClue("Search the drawers in Catherby's Archery shop.", DRAWERS_350, new WorldPoint(2825, 3442, 0), "Hickton's Archery Emporium in Catherby."), new CrypticClue("The hand ain't listening.", "The Face", new WorldPoint(3019, 3232, 0), "Talk to The Face located by the manhole just north of the Port Sarim fishing shop."), new CrypticClue("Search the chest in the left-hand tower of Camelot Castle.", CLOSED_CHEST_25592, new WorldPoint(2748, 3495, 2), "Located on the second floor of the western tower of Camelot."), @@ -311,7 +311,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the eastern bookcase in Father Urhney's house.", BOOKCASE_9523, new WorldPoint(3149, 3177, 0), "Father Urhney's house is found in the western end of the Lumbridge Swamp."), new CrypticClue("Talk to Morgan in his house at Draynor Village.", "Morgan", new WorldPoint(3098, 3268, 0), "Morgan can be found in the house with the quest start map icon."), new CrypticClue("Talk to Charles at Port Piscarilius.", "Charles", new WorldPoint(1821, 3690, 0), "Charles is found by Veos' ship in Port Piscarilius."), - new CrypticClue("Search the crate in Rommiks crafting shop in Rimmington.", CRATE_9534, new WorldPoint(2947, 3206, 0), "The crates in Rommik's Crafty Supplies in Rimmington."), + new CrypticClue("Search the crate in Rommiks crafting shop in Rimmington.", CRATE_9534, new WorldPoint(2947, 3208, 0), "The crates in Rommik's Crafty Supplies in Rimmington."), new CrypticClue("Talk to Ali the Leaflet Dropper north of the Al Kharid mine.", "Ali the Leaflet Dropper", new WorldPoint(3283, 3329, 0), "Ali the Leaflet Dropper can be found roaming north of the Al Kharid mine."), new CrypticClue("Talk to the cook in the Blue Moon Inn in Varrock.", "Cook", new WorldPoint(3230, 3401, 0), "The Blue Moon Inn can be found by the southern entrance to Varrock."), new CrypticClue("Search the single crate in Horvik's smithy in Varrock.", CRATE_5106, new WorldPoint(3228, 3433, 0), "Horvik's Smithy is found north-east of of Varrock Square."), From a46e1c133d2d40747ece5b7159ee56fd890c2bbd Mon Sep 17 00:00:00 2001 From: Ignas Maslinskas <5737899+Hoffs@users.noreply.github.com> Date: Tue, 8 Oct 2019 10:59:34 +0300 Subject: [PATCH 09/13] xptracker: fix out-of-sync add to canvas menu (#9983) Changes so that `XpInfoBox` uses same method of determining whether to show `Add to canvas` or `Remove from canvas` button by calling `hasOverlay`. Previously `XpInfoBox` would rely solely on its own state which meant that if canvas is added from anywhere else (e.g. skill context menu) this action is not known by the `XpInfoBox`. Fixes #9788 --- .../client/plugins/xptracker/XpInfoBox.java | 22 +++++++++++++++++-- .../plugins/xptracker/XpTrackerPlugin.java | 16 +++++++++----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index 60dc5059af..7d9dbe7723 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -41,6 +41,8 @@ import javax.swing.JPopupMenu; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Client; @@ -139,18 +141,34 @@ class XpInfoBox extends JPanel popupMenu.add(resetOthers); popupMenu.add(pauseSkill); popupMenu.add(canvasItem); + popupMenu.addPopupMenuListener(new PopupMenuListener() + { + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) + { + canvasItem.setText(xpTrackerPlugin.hasOverlay(skill) ? REMOVE_STATE : ADD_STATE); + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) + { + } + + @Override + public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) + { + } + }); canvasItem.addActionListener(e -> { if (canvasItem.getText().equals(REMOVE_STATE)) { xpTrackerPlugin.removeOverlay(skill); - canvasItem.setText(ADD_STATE); } else { xpTrackerPlugin.addOverlay(skill); - canvasItem.setText(REMOVE_STATE); } }); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 56ca040a8a..a4a2f15be7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -262,6 +262,17 @@ public class XpTrackerPlugin extends Plugin overlayManager.removeIf(e -> e instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) e).getSkill() == skill); } + /** + * Check if there is an overlay on the canvas for the skill. + * + * @param skill the skill which should have an overlay. + * @return true if the skill has an overlay. + */ + boolean hasOverlay(final Skill skill) + { + return overlayManager.anyMatch(o -> o instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) o).getSkill() == skill); + } + /** * Reset internal state and re-initialize all skills with XP currently cached by the RS client * This is called by the user manually clicking resetSkillState in the UI. @@ -708,9 +719,4 @@ public class XpTrackerPlugin extends Plugin pauseSkill(skill, pause); } } - - private boolean hasOverlay(final Skill skill) - { - return overlayManager.anyMatch(o -> o instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) o).getSkill() == skill); - } } From 121f6cfa004ca16e1016bd4eb265d46e6cca9c95 Mon Sep 17 00:00:00 2001 From: RensB Date: Tue, 8 Oct 2019 11:05:37 +0200 Subject: [PATCH 10/13] item charges: add charges to guthix rest tea (#10002) --- .../plugins/itemcharges/ItemChargeType.java | 1 + .../plugins/itemcharges/ItemWithCharge.java | 16 ++++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java index 3a4c411eaf..030b5ab22c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java @@ -39,4 +39,5 @@ enum ItemChargeType FRUIT_BASKET, SACK, RING_OF_FORGING, + GUTHIX_REST, } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index 986ed9d2ea..cfcf5635ae 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -30,15 +30,7 @@ import javax.annotation.Nullable; import lombok.AllArgsConstructor; import lombok.Getter; import static net.runelite.api.ItemID.*; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.ABYSSAL_BRACELET; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.BELLOWS; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.FUNGICIDE_SPRAY; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.IMPBOX; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.TELEPORT; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERCAN; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERSKIN; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.FRUIT_BASKET; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.SACK; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.*; @AllArgsConstructor @Getter @@ -225,7 +217,11 @@ enum ItemWithCharge WSKIN1(WATERSKIN, WATERSKIN1, 1), WSKIN2(WATERSKIN, WATERSKIN2, 2), WSKIN3(WATERSKIN, WATERSKIN3, 3), - WSKIN4(WATERSKIN, WATERSKIN4, 4); + WSKIN4(WATERSKIN, WATERSKIN4, 4), + GREST1(GUTHIX_REST, GUTHIX_REST1, 1), + GREST2(GUTHIX_REST, GUTHIX_REST2, 2), + GREST3(GUTHIX_REST, GUTHIX_REST3, 3), + GREST4(GUTHIX_REST, GUTHIX_REST4, 4); private final ItemChargeType type; private final int id; From 1959b7ea728adf78ffcb5ae95500a64a6b76b692 Mon Sep 17 00:00:00 2001 From: wwchak <52029281+wwchak@users.noreply.github.com> Date: Tue, 8 Oct 2019 20:26:29 +1100 Subject: [PATCH 11/13] fishing: Add missing fishing platform highlight (#9989) --- .../runelite/client/plugins/fishing/FishingSpot.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java index 0a5242178c..ed91ff29a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java @@ -32,6 +32,7 @@ import static net.runelite.api.NpcID.FISHING_SPOT_1497; import static net.runelite.api.NpcID.FISHING_SPOT_1498; import static net.runelite.api.NpcID.FISHING_SPOT_1510; import static net.runelite.api.NpcID.FISHING_SPOT_1511; +import static net.runelite.api.NpcID.FISHING_SPOT_1514; import static net.runelite.api.NpcID.FISHING_SPOT_1518; import static net.runelite.api.NpcID.FISHING_SPOT_1519; import static net.runelite.api.NpcID.FISHING_SPOT_1520; @@ -107,11 +108,12 @@ import static net.runelite.api.NpcID.FISHING_SPOT_6784; enum FishingSpot { SHRIMP("Shrimp, Anchovies", ItemID.RAW_SHRIMPS, - FISHING_SPOT_1518, FISHING_SPOT_1521, FISHING_SPOT_1523, - FISHING_SPOT_1524, FISHING_SPOT_1525, FISHING_SPOT_1528, - FISHING_SPOT_1530, FISHING_SPOT_1544, FISHING_SPOT_3913, - FISHING_SPOT_7155, FISHING_SPOT_7459, FISHING_SPOT_7462, - FISHING_SPOT_7467, FISHING_SPOT_7469, FISHING_SPOT_7947 + FISHING_SPOT_1514, FISHING_SPOT_1518, FISHING_SPOT_1521, + FISHING_SPOT_1523, FISHING_SPOT_1524, FISHING_SPOT_1525, + FISHING_SPOT_1528, FISHING_SPOT_1530, FISHING_SPOT_1544, + FISHING_SPOT_3913, FISHING_SPOT_7155, FISHING_SPOT_7459, + FISHING_SPOT_7462, FISHING_SPOT_7467, FISHING_SPOT_7469, + FISHING_SPOT_7947 ), LOBSTER("Lobster, Swordfish, Tuna", ItemID.RAW_LOBSTER, FISHING_SPOT_1510, FISHING_SPOT_1519, FISHING_SPOT_1522, From e9a805c73568183a5d2f0e184334862e4e3a04c5 Mon Sep 17 00:00:00 2001 From: dekvall Date: Mon, 26 Aug 2019 01:31:13 +0200 Subject: [PATCH 12/13] fishing: Set status to NOT fishing when the flying fish is active Since you are not getting fish while the flying fish is active, you are not actually fishing any minnows. Closes #8584 --- .../net/runelite/client/plugins/fishing/FishingOverlay.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingOverlay.java index b9e66992e8..38715b8217 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingOverlay.java @@ -29,6 +29,7 @@ import java.awt.Dimension; import java.awt.Graphics2D; import javax.inject.Inject; import net.runelite.api.Client; +import net.runelite.api.GraphicID; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Skill; import net.runelite.client.plugins.xptracker.XpTrackerService; @@ -72,8 +73,9 @@ class FishingOverlay extends Overlay } panelComponent.getChildren().clear(); - if (client.getLocalPlayer().getInteracting() != null && client.getLocalPlayer().getInteracting().getName() - .contains(FISHING_SPOT)) + if (client.getLocalPlayer().getInteracting() != null + && client.getLocalPlayer().getInteracting().getName().contains(FISHING_SPOT) + && client.getLocalPlayer().getInteracting().getGraphic() != GraphicID.FLYING_FISH) { panelComponent.getChildren().add(TitleComponent.builder() .text("Fishing") From 7ea68d7e72724b929c8803281f1c0a52e9c01847 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 8 Oct 2019 09:08:57 -0400 Subject: [PATCH 13/13] screenmarkers: optimize panel rebuilding This fixes panel rebuilding adding multiple mouse input listeners --- .../screenmarkers/ScreenMarkerPlugin.java | 2 +- .../ui/ScreenMarkerPluginPanel.java | 56 +++++++++++-------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java index 1f2786f198..e472f2ba76 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java @@ -108,7 +108,7 @@ public class ScreenMarkerPlugin extends Plugin loadConfig(configManager.getConfiguration(CONFIG_GROUP, CONFIG_KEY)).forEach(screenMarkers::add); screenMarkers.forEach(overlayManager::add); - pluginPanel = injector.getInstance(ScreenMarkerPluginPanel.class); + pluginPanel = new ScreenMarkerPluginPanel(this); pluginPanel.rebuild(); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), ICON_FILE); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPluginPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPluginPanel.java index 3e43abaa4d..b0813cc8ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPluginPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPluginPanel.java @@ -25,8 +25,6 @@ */ package net.runelite.client.plugins.screenmarkers.ui; -import com.google.inject.Inject; -import com.google.inject.Singleton; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; @@ -48,7 +46,6 @@ import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.PluginErrorPanel; import net.runelite.client.util.ImageUtil; -@Singleton public class ScreenMarkerPluginPanel extends PluginPanel { private static final ImageIcon ADD_ICON; @@ -62,9 +59,9 @@ public class ScreenMarkerPluginPanel extends PluginPanel private final JLabel addMarker = new JLabel(ADD_ICON); private final JLabel title = new JLabel(); private final PluginErrorPanel noMarkersPanel = new PluginErrorPanel(); + private final JPanel markerView = new JPanel(new GridBagLayout()); - @Inject - private ScreenMarkerPlugin plugin; + private final ScreenMarkerPlugin plugin; @Getter private Color selectedColor = DEFAULT_BORDER_COLOR; @@ -85,8 +82,10 @@ public class ScreenMarkerPluginPanel extends PluginPanel ADD_HOVER_ICON = new ImageIcon(ImageUtil.alphaOffset(addIcon, 0.53f)); } - public void init() + public ScreenMarkerPluginPanel(ScreenMarkerPlugin screenMarkerPlugin) { + this.plugin = screenMarkerPlugin; + setLayout(new BorderLayout()); setBorder(new EmptyBorder(10, 10, 10, 10)); @@ -102,7 +101,6 @@ public class ScreenMarkerPluginPanel extends PluginPanel JPanel centerPanel = new JPanel(new BorderLayout()); centerPanel.setBackground(ColorScheme.DARK_GRAY_COLOR); - JPanel markerView = new JPanel(new GridBagLayout()); markerView.setBackground(ColorScheme.DARK_GRAY_COLOR); GridBagConstraints constraints = new GridBagConstraints(); @@ -111,24 +109,9 @@ public class ScreenMarkerPluginPanel extends PluginPanel constraints.gridx = 0; constraints.gridy = 0; - for (final ScreenMarkerOverlay marker : plugin.getScreenMarkers()) - { - markerView.add(new ScreenMarkerPanel(plugin, marker), constraints); - constraints.gridy++; - - markerView.add(Box.createRigidArea(new Dimension(0, 10)), constraints); - constraints.gridy++; - } - noMarkersPanel.setContent("Screen Markers", "Highlight a region on your screen."); noMarkersPanel.setVisible(false); - if (plugin.getScreenMarkers().isEmpty()) - { - noMarkersPanel.setVisible(true); - title.setVisible(false); - } - markerView.add(noMarkersPanel, constraints); constraints.gridy++; @@ -168,10 +151,35 @@ public class ScreenMarkerPluginPanel extends PluginPanel public void rebuild() { - removeAll(); + GridBagConstraints constraints = new GridBagConstraints(); + constraints.fill = GridBagConstraints.HORIZONTAL; + constraints.weightx = 1; + constraints.gridx = 0; + constraints.gridy = 0; + + markerView.removeAll(); + + for (final ScreenMarkerOverlay marker : plugin.getScreenMarkers()) + { + markerView.add(new ScreenMarkerPanel(plugin, marker), constraints); + constraints.gridy++; + + markerView.add(Box.createRigidArea(new Dimension(0, 10)), constraints); + constraints.gridy++; + } + + boolean empty = constraints.gridy == 0; + noMarkersPanel.setVisible(empty); + title.setVisible(!empty); + + markerView.add(noMarkersPanel, constraints); + constraints.gridy++; + + markerView.add(creationPanel, constraints); + constraints.gridy++; + repaint(); revalidate(); - init(); } /* Enables/Disables new marker creation mode */