From 7addd7931bc1fad915978140ccb52c43408b2d10 Mon Sep 17 00:00:00 2001 From: RuneLite updater Date: Wed, 31 Jan 2024 12:11:21 +0000 Subject: [PATCH 01/35] Bump for 1.10.22-SNAPSHOT [ci skip] --- cache/pom.xml | 2 +- pom.xml | 4 ++-- runelite-api/pom.xml | 2 +- runelite-client/pom.xml | 2 +- runelite-jshell/pom.xml | 2 +- runelite-maven-plugin/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cache/pom.xml b/cache/pom.xml index fee4c8b77..6f5074bd7 100644 --- a/cache/pom.xml +++ b/cache/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT cache diff --git a/pom.xml b/pom.xml index f101eeed3..b7369afd5 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT pom RuneLite @@ -63,7 +63,7 @@ https://github.com/runelite/runelite scm:git:git://github.com/runelite/runelite scm:git:git@github.com:runelite/runelite - runelite-parent-1.10.21 + HEAD diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml index e413be261..eb3abd1d1 100644 --- a/runelite-api/pom.xml +++ b/runelite-api/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT runelite-api diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index ecffe20b1..15cbb4d45 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT client diff --git a/runelite-jshell/pom.xml b/runelite-jshell/pom.xml index e03458881..ede76af18 100644 --- a/runelite-jshell/pom.xml +++ b/runelite-jshell/pom.xml @@ -30,7 +30,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT jshell diff --git a/runelite-maven-plugin/pom.xml b/runelite-maven-plugin/pom.xml index 1f2871e89..ffee39af7 100644 --- a/runelite-maven-plugin/pom.xml +++ b/runelite-maven-plugin/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21 + 1.10.22-SNAPSHOT runelite-maven-plugin From a8b8c3f2f6bec14bf1c383859013613e6526927f Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 1 Feb 2024 16:35:09 -0500 Subject: [PATCH 02/35] update flatlaf to 3.2.5-rl4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b7369afd5..a2406b5b5 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ 1.18.30 1.2.9 1.7.25 - 3.2.5-rl2 + 3.2.5-rl4 true true From 797be1fd846457c4f4e2603066a41c4ab9161a02 Mon Sep 17 00:00:00 2001 From: RuneLite updater Date: Thu, 1 Feb 2024 21:51:12 +0000 Subject: [PATCH 03/35] Bump for 1.10.21.2-SNAPSHOT [ci skip] --- cache/pom.xml | 2 +- pom.xml | 4 ++-- runelite-api/pom.xml | 2 +- runelite-client/pom.xml | 2 +- runelite-jshell/pom.xml | 2 +- runelite-maven-plugin/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cache/pom.xml b/cache/pom.xml index 636301143..cee5a15b4 100644 --- a/cache/pom.xml +++ b/cache/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT cache diff --git a/pom.xml b/pom.xml index d2952ea1c..188de9791 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT pom RuneLite @@ -63,7 +63,7 @@ https://github.com/runelite/runelite scm:git:git://github.com/runelite/runelite scm:git:git@github.com:runelite/runelite - runelite-parent-1.10.21.1 + HEAD diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml index 972d12f08..80ae96dfa 100644 --- a/runelite-api/pom.xml +++ b/runelite-api/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT runelite-api diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index b90eb5f61..dabbaa339 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT client diff --git a/runelite-jshell/pom.xml b/runelite-jshell/pom.xml index 4face5ab1..f9a9f8f92 100644 --- a/runelite-jshell/pom.xml +++ b/runelite-jshell/pom.xml @@ -30,7 +30,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT jshell diff --git a/runelite-maven-plugin/pom.xml b/runelite-maven-plugin/pom.xml index 32b7b40b9..d446ba9c0 100644 --- a/runelite-maven-plugin/pom.xml +++ b/runelite-maven-plugin/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.1 + 1.10.21.2-SNAPSHOT runelite-maven-plugin From e41020a97e12ff21edac55c50fbaadc6e5bfb472 Mon Sep 17 00:00:00 2001 From: JZomDev Date: Sat, 3 Feb 2024 21:39:44 -0500 Subject: [PATCH 04/35] ui: don't apply opacity in safe mode --- .../src/main/java/net/runelite/client/ui/ClientUI.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index cd913f39b..86e8e8f34 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -1156,7 +1156,8 @@ private void updateFrameConfig(boolean updateResizable) return; } - if (frame.getGraphicsConfiguration().getDevice().getFullScreenWindow() == null) + if (frame.getGraphicsConfiguration().getDevice().getFullScreenWindow() == null + && !safeMode) { frame.setOpacity(config.windowOpacity() / 100.0f); } From bf920c490407072ba9fca6dd1e2a65bbb2ae2e2d Mon Sep 17 00:00:00 2001 From: Felanbird <41973452+Felanbird@users.noreply.github.com> Date: Sat, 3 Feb 2024 21:57:41 -0500 Subject: [PATCH 05/35] worldmap: fix Kourend teleport level --- .../runelite/client/plugins/worldmap/TeleportLocationData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 556fadb6d..4212cbcc1 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 @@ -37,12 +37,12 @@ enum TeleportLocationData FALADOR(TeleportType.NORMAL_MAGIC, "Falador", 37, new WorldPoint(2965, 3381, 0), "falador_teleport_icon.png"), CAMELOT(TeleportType.NORMAL_MAGIC, "Camelot", 45, new WorldPoint(2757, 3477, 0), "camelot_teleport_icon.png"), CAMELOT_BANK(TeleportType.NORMAL_MAGIC, "Camelot Bank", 45, new WorldPoint(2726, 3485, 0), "camelot_teleport_icon.png"), + KOUREND(TeleportType.NORMAL_MAGIC, "Kourend", 48, new WorldPoint(1643, 3672, 0), "kourend_teleport_icon.png"), ARDOUGNE(TeleportType.NORMAL_MAGIC, "Ardougne", 51, new WorldPoint(2664, 3306, 0), "ardougne_teleport_icon.png"), WATCHTOWER(TeleportType.NORMAL_MAGIC, "Watchtower", 58, new WorldPoint(2547, 3114, 0), "watchtower_teleport_icon.png"), WATCHTOWER_YANILLE(TeleportType.NORMAL_MAGIC, "Watchtower Yanille", 58, new WorldPoint(2584, 3097, 0), "watchtower_teleport_icon.png"), TROLLHEIM(TeleportType.NORMAL_MAGIC, "Trollheim", 61, new WorldPoint(2891, 3678, 0), "trollheim_teleport_icon.png"), APE_ATOLL(TeleportType.NORMAL_MAGIC, "Ape Atoll", 64, new WorldPoint(2796, 2791, 0), "ape_atoll_teleport_icon.png"), - KOUREND(TeleportType.NORMAL_MAGIC, "Kourend", 69, new WorldPoint(1643, 3672, 0), "kourend_teleport_icon.png"), PADDEWWA(TeleportType.ANCIENT_MAGICKS, "Paddewwa", 54, new WorldPoint(3097, 9880, 0), "paddewwa_teleport_icon.png"), SENNTISTEN(TeleportType.ANCIENT_MAGICKS, "Senntisten", 60, new WorldPoint(3319, 3336, 0), "senntisten_teleport_icon.png"), KHARYRLL(TeleportType.ANCIENT_MAGICKS, "Kharyrll", 66, new WorldPoint(3494, 3473, 0), "kharyrll_teleport_icon.png"), From 28c163c432227db8710251e2151b0ab9ca62a28c Mon Sep 17 00:00:00 2001 From: iProdigy <8106344+iProdigy@users.noreply.github.com> Date: Sun, 4 Feb 2024 03:33:36 -0800 Subject: [PATCH 06/35] chat commands: fix off-by-one team size for out-of-order toa pb --- .../runelite/client/plugins/chatcommands/ChatCommandsPlugin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 8d039adc6..d97eca907 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -2588,6 +2588,7 @@ private int toaTeamSize() Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_2_HEALTH), 1) + Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_3_HEALTH), 1) + Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_4_HEALTH), 1) + + Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_5_HEALTH), 1) + Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_6_HEALTH), 1) + Math.min(client.getVarbitValue(Varbits.TOA_MEMBER_7_HEALTH), 1); } From dedf773e0191d3ec45597cf3d19db1e548b433e0 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 4 Feb 2024 20:05:46 -0500 Subject: [PATCH 07/35] api: add size x/y to ObjectComposition --- .../java/net/runelite/api/ObjectComposition.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java b/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java index 158702290..c055e3d98 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectComposition.java @@ -106,4 +106,16 @@ public interface ObjectComposition extends ParamHolder * @see #getImpostorIds() */ int getVarPlayerId(); + + /** + * Get the size of the object on the X-axis in tiles + * @return + */ + int getSizeX(); + + /** + * Get the size of the object on the Y-axis in tiles + * @return + */ + int getSizeY(); } From 3791f7387ddd4acd7c876f3cf3985ca03eac151e Mon Sep 17 00:00:00 2001 From: Geordan Neukum Date: Sun, 4 Feb 2024 15:13:15 -0500 Subject: [PATCH 08/35] clues: recognize (l)(t) variant of dragon defender Right now, the clue plugin does not recognize the locked (l) and trimmed (t) variant of the Dragon Defender as fulfilling the requirement for Falo the Bard's Dragon or Avernic Defender clue. This is incorrect, as the Dragon Defender (l)(t) is accepted by Falo. Let's update the requirement collection such that this is no longer the case. This fixes issue #17422. Signed-off-by: Geordan Neukum --- .../client/plugins/cluescrolls/clues/FaloTheBardClue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java index d7ea55fa7..0617365d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java @@ -58,7 +58,7 @@ public class FaloTheBardClue extends ClueScroll implements NpcClueScroll new FaloTheBardClue("A mark used to increase one's grace, found atop a seer's place.", item(MARK_OF_GRACE)), new FaloTheBardClue("A molten beast with fiery breath, you acquire these with its death.", item(LAVA_DRAGON_BONES)), new FaloTheBardClue("A shiny helmet of flight, to obtain this with melee, struggle you might.", item(ARMADYL_HELMET)), - new FaloTheBardClue("A sword held in the other hand, red its colour, Cyclops strength you must withstand.", any("Dragon or Avernic Defender", item(DRAGON_DEFENDER), item(DRAGON_DEFENDER_T), item(DRAGON_DEFENDER_L), item(AVERNIC_DEFENDER), item(AVERNIC_DEFENDER_L), item(GHOMMALS_AVERNIC_DEFENDER_5), item(GHOMMALS_AVERNIC_DEFENDER_5_L), item(GHOMMALS_AVERNIC_DEFENDER_6), item(GHOMMALS_AVERNIC_DEFENDER_6_L))), + new FaloTheBardClue("A sword held in the other hand, red its colour, Cyclops strength you must withstand.", any("Dragon or Avernic Defender", item(DRAGON_DEFENDER), item(DRAGON_DEFENDER_T), item(DRAGON_DEFENDER_L), item(DRAGON_DEFENDER_LT), item(AVERNIC_DEFENDER), item(AVERNIC_DEFENDER_L), item(GHOMMALS_AVERNIC_DEFENDER_5), item(GHOMMALS_AVERNIC_DEFENDER_5_L), item(GHOMMALS_AVERNIC_DEFENDER_6), item(GHOMMALS_AVERNIC_DEFENDER_6_L))), new FaloTheBardClue("A token used to kill mythical beasts, in hopes of a blade or just for an xp feast.", item(WARRIOR_GUILD_TOKEN)), new FaloTheBardClue("Green is my favourite, mature ale I do love, this takes your herblore above.", item(GREENMANS_ALEM)), new FaloTheBardClue("It can hold down a boat or crush a goat, this object, you see, is quite heavy.", any("Barrelchest anchor", item(BARRELCHEST_ANCHOR), item(BARRELCHEST_ANCHOR_BH))), From 113f5d68cf45157329f4e1da7750f44dfb640c2d Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 28 Jan 2024 22:38:24 -0500 Subject: [PATCH 09/35] overlay: use floating point overlay priority --- .../runelite/client/ui/overlay/Overlay.java | 39 ++++++++++++++++++- .../client/ui/overlay/OverlayManager.java | 4 +- .../client/ui/overlay/OverlayPriority.java | 4 ++ .../client/ui/overlay/WidgetItemOverlay.java | 6 +++ .../client/ui/overlay/WidgetOverlay.java | 4 +- .../client/ui/overlay/OverlayManagerTest.java | 16 ++++---- 6 files changed, 60 insertions(+), 13 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java index 7fb40723a..e1f2abce8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java @@ -47,6 +47,12 @@ @Setter public abstract class Overlay implements LayoutableRenderableEntity { + public static final float PRIORITY_LOW = 0f; + public static final float PRIORITY_DEFAULT = 0.25f; + public static final float PRIORITY_MED = 0.5f; + public static final float PRIORITY_HIGH = 0.75f; + public static final float PRIORITY_HIGHEST = 1f; + @Nullable private final Plugin plugin; private Point preferredLocation; @@ -54,7 +60,11 @@ public abstract class Overlay implements LayoutableRenderableEntity private OverlayPosition preferredPosition; private Rectangle bounds = new Rectangle(); private OverlayPosition position = OverlayPosition.TOP_LEFT; - private OverlayPriority priority = OverlayPriority.NONE; + /** + * The overlay priority, which determines the order the overlay renders in relative + * to other overlays. + */ + private float priority = PRIORITY_DEFAULT; private OverlayLayer layer = OverlayLayer.UNDER_WIDGETS; private final List drawHooks = new ArrayList<>(); private final List menuEntries = new ArrayList<>(); @@ -92,6 +102,33 @@ protected Overlay(@Nullable Plugin plugin) this.plugin = plugin; } + public void setPriority(float priority) + { + this.priority = priority; + } + + public void setPriority(OverlayPriority overlayPriority) + { + switch (overlayPriority) + { + case LOW: + priority = PRIORITY_LOW; + break; + case NONE: + priority = PRIORITY_DEFAULT; + break; + case MED: + priority = PRIORITY_MED; + break; + case HIGH: + priority = PRIORITY_HIGH; + break; + case HIGHEST: + priority = PRIORITY_HIGHEST; + break; + } + } + /** * Overlay name, used for saving the overlay, needs to be unique * diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index 3439b857a..e1a4b9e92 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -81,8 +81,8 @@ public class OverlayManager // draw *earlier* so that they are closer to their // defined position. return aPos == OverlayPosition.DYNAMIC || aPos == OverlayPosition.DETACHED - ? a.getPriority().compareTo(b.getPriority()) - : b.getPriority().compareTo(a.getPriority()); + ? Float.compare(a.getPriority(), b.getPriority()) + : Float.compare(b.getPriority(), a.getPriority()); }; /** diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayPriority.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayPriority.java index 95c7cb996..dd29049f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayPriority.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayPriority.java @@ -24,6 +24,10 @@ */ package net.runelite.client.ui.overlay; +/** + * @deprecated use floating point overlay priorities instead + */ +@Deprecated public enum OverlayPriority { LOW, diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java index 8109ea3f0..4da899daa 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java @@ -143,6 +143,12 @@ public void setPosition(OverlayPosition position) throw new IllegalStateException(); } + @Override + public void setPriority(float priority) + { + throw new IllegalStateException(); + } + @Override public void setPriority(OverlayPriority priority) { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 37cae7f85..6b4b6d0fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -118,10 +118,10 @@ public static Collection createOverlays(final OverlayManager over private WidgetOverlay(final Client client, @Component final int componentId, final String name, final OverlayPosition overlayPosition) { - this(client, componentId, name, overlayPosition, OverlayPriority.HIGHEST); + this(client, componentId, name, overlayPosition, Overlay.PRIORITY_HIGHEST); } - private WidgetOverlay(final Client client, @Component final int componentId, final String name, final OverlayPosition overlayPosition, final OverlayPriority overlayPriority) + private WidgetOverlay(final Client client, @Component final int componentId, final String name, final OverlayPosition overlayPosition, final float overlayPriority) { this.client = client; this.componentId = componentId; diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java index af1accea5..2afac6282 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java @@ -37,7 +37,7 @@ public class OverlayManagerTest { class TestOverlay extends Overlay { - TestOverlay(OverlayPosition position, OverlayPriority priority) + TestOverlay(OverlayPosition position, float priority) { setPosition(position); setPriority(priority); @@ -86,8 +86,8 @@ public void testEquality() public void testSort() { // High priorities overlays render first - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); - Overlay tll = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.LOW); + Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, Overlay.PRIORITY_HIGH); + Overlay tll = new TestOverlay(OverlayPosition.TOP_LEFT, Overlay.PRIORITY_LOW); List overlays = Arrays.asList(tlh, tll); overlays.sort(OverlayManager.OVERLAY_COMPARATOR); assertEquals(tlh, overlays.get(0)); @@ -98,8 +98,8 @@ public void testSort() public void testSortDynamic() { // Dynamic overlays render before static overlays - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); - Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, OverlayPriority.HIGH); + Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, Overlay.PRIORITY_HIGH); + Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, Overlay.PRIORITY_HIGH); List overlays = Arrays.asList(tlh, dyn); overlays.sort(OverlayManager.OVERLAY_COMPARATOR); assertEquals(dyn, overlays.get(0)); @@ -110,9 +110,9 @@ public void testSortDynamic() public void testTooltips() { // Tooltip overlay renders after everything - Overlay t = new TestOverlay(OverlayPosition.TOOLTIP, OverlayPriority.HIGH); - Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, OverlayPriority.HIGH); - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); + Overlay t = new TestOverlay(OverlayPosition.TOOLTIP, Overlay.PRIORITY_HIGH); + Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, Overlay.PRIORITY_HIGH); + Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, Overlay.PRIORITY_HIGH); List overlays = Arrays.asList(t, dyn, tlh); overlays.sort(OverlayManager.OVERLAY_COMPARATOR); assertEquals(dyn, overlays.get(0)); From fc742f68699d5a6c92109deef0501cbb7a8a76e0 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 29 Jan 2024 10:48:18 -0500 Subject: [PATCH 10/35] replace OverlayPriority use with corresponding constants --- .../runelite/client/plugins/agility/LapCounterOverlay.java | 3 +-- .../client/plugins/barrows/BarrowsBrotherSlainOverlay.java | 3 +-- .../net/runelite/client/plugins/boosts/BoostsOverlay.java | 3 +-- .../client/plugins/boosts/CompactBoostsOverlay.java | 3 +-- .../net/runelite/client/plugins/cannon/CannonOverlay.java | 5 ++--- .../client/plugins/cluescrolls/ClueScrollOverlay.java | 3 +-- .../runelite/client/plugins/corp/CorpDamageOverlay.java | 3 +-- .../runelite/client/plugins/devtools/DevToolsOverlay.java | 3 +-- .../client/plugins/devtools/WidgetInspectorOverlay.java | 3 +-- .../client/plugins/devtools/WorldMapLocationOverlay.java | 3 +-- .../client/plugins/devtools/WorldMapRegionOverlay.java | 3 +-- .../runelite/client/plugins/driftnet/DriftNetOverlay.java | 3 +-- .../java/net/runelite/client/plugins/fps/FpsOverlay.java | 3 +-- .../plugins/groundmarkers/GroundMarkerMinimapOverlay.java | 3 +-- .../client/plugins/groundmarkers/GroundMarkerOverlay.java | 3 +-- .../client/plugins/instancemap/InstanceMapOverlay.java | 3 +-- .../interacthighlight/InteractHighlightOverlay.java | 3 +-- .../kourendlibrary/KourendLibraryTutorialOverlay.java | 3 +-- .../client/plugins/nightmarezone/NightmareZoneOverlay.java | 3 +-- .../npcunaggroarea/NpcAggroAreaNotWorkingOverlay.java | 3 +-- .../client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java | 3 +-- .../plugins/objectindicators/ObjectIndicatorsOverlay.java | 3 +-- .../client/plugins/opponentinfo/OpponentInfoOverlay.java | 3 +-- .../runelite/client/plugins/party/PartyStatusOverlay.java | 3 +-- .../playerindicators/PlayerIndicatorsMinimapOverlay.java | 3 +-- .../plugins/playerindicators/PlayerIndicatorsOverlay.java | 3 +-- .../playerindicators/PlayerIndicatorsTileOverlay.java | 3 +-- .../runelite/client/plugins/prayer/PrayerBarOverlay.java | 3 +-- .../client/plugins/puzzlesolver/PuzzleSolverOverlay.java | 7 +++---- .../net/runelite/client/plugins/raids/RaidsOverlay.java | 3 +-- .../plugins/screenmarkers/ScreenMarkerCreationOverlay.java | 3 +-- .../client/plugins/screenmarkers/ScreenMarkerOverlay.java | 3 +-- .../screenmarkers/ScreenMarkerWidgetHighlightOverlay.java | 3 +-- .../client/plugins/screenshot/ScreenshotOverlay.java | 3 +-- .../plugins/specialcounter/PlayerInfoDropOverlay.java | 3 +-- .../net/runelite/client/plugins/team/TeamCapesOverlay.java | 3 +-- .../plugins/tileindicators/TileIndicatorsOverlay.java | 3 +-- .../client/plugins/worldhopper/WorldHopperPingOverlay.java | 3 +-- .../runelite/client/plugins/zalcano/ZalcanoOverlay.java | 3 +-- .../net/runelite/client/ui/overlay/WidgetItemOverlay.java | 2 +- .../runelite/client/ui/overlay/tooltip/TooltipOverlay.java | 3 +-- .../client/ui/overlay/worldmap/WorldMapOverlay.java | 3 +-- 42 files changed, 45 insertions(+), 86 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/LapCounterOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/LapCounterOverlay.java index c7f19b496..c775bfaeb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/LapCounterOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/LapCounterOverlay.java @@ -34,7 +34,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; class LapCounterOverlay extends OverlayPanel @@ -49,7 +48,7 @@ private LapCounterOverlay(AgilityPlugin plugin, AgilityConfig config) { super(plugin); setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.plugin = plugin; this.config = config; addMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Agility overlay"); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java index a2a21c7a7..e30383b64 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java @@ -38,7 +38,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; class BarrowsBrotherSlainOverlay extends OverlayPanel @@ -52,7 +51,7 @@ private BarrowsBrotherSlainOverlay(BarrowsPlugin plugin, Client client) { super(plugin); setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.client = client; addMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Barrows overlay"); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsOverlay.java index 197259194..763fb3746 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsOverlay.java @@ -33,7 +33,6 @@ import net.runelite.api.Skill; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.util.ColorUtil; @@ -51,7 +50,7 @@ private BoostsOverlay(Client client, BoostsConfig config, BoostsPlugin plugin) this.client = client; this.config = config; setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CompactBoostsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CompactBoostsOverlay.java index ca43aced3..a4a046bc3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CompactBoostsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CompactBoostsOverlay.java @@ -37,7 +37,6 @@ import net.runelite.client.game.SkillIconManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.TextComponent; import net.runelite.client.util.ImageUtil; @@ -66,7 +65,7 @@ private CompactBoostsOverlay(Client client, BoostsConfig config, BoostsPlugin pl this.plugin = plugin; this.skillIconManager = skillIconManager; setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonOverlay.java index 51e3165dd..573913ebc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonOverlay.java @@ -35,12 +35,11 @@ import net.runelite.api.Point; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; +import static net.runelite.client.plugins.cannon.CannonPlugin.MAX_OVERLAY_DISTANCE; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.TextComponent; -import static net.runelite.client.plugins.cannon.CannonPlugin.MAX_OVERLAY_DISTANCE; class CannonOverlay extends Overlay { @@ -53,7 +52,7 @@ class CannonOverlay extends Overlay CannonOverlay(Client client, CannonConfig config, CannonPlugin plugin) { setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); this.client = client; this.config = config; this.plugin = plugin; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java index 4a0b1f239..90048cf6e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java @@ -42,7 +42,6 @@ import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.item; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.LineComponent; @@ -97,7 +96,7 @@ private ClueScrollOverlay(ClueScrollPlugin plugin, Client client) super(plugin); this.plugin = plugin; this.client = client; - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); addMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Clue Scroll overlay"); addMenuEntry(RUNELITE_OVERLAY, "Reset", "Clue Scroll overlay", e -> plugin.resetClue(true)); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpDamageOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpDamageOverlay.java index 48d3becf7..12042814d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpDamageOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpDamageOverlay.java @@ -40,7 +40,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.LineComponent; @@ -56,7 +55,7 @@ private CorpDamageOverlay(Client client, CorpPlugin corpPlugin, CorpConfig confi super(corpPlugin); setPosition(OverlayPosition.TOP_LEFT); setLayer(OverlayLayer.UNDER_WIDGETS); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.client = client; this.corpPlugin = corpPlugin; this.config = config; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index 4da3834d4..16611b439 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -61,7 +61,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.tooltip.Tooltip; import net.runelite.client.ui.overlay.tooltip.TooltipManager; @@ -91,7 +90,7 @@ private DevToolsOverlay(Client client, DevToolsPlugin plugin, TooltipManager too { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGHEST); + setPriority(PRIORITY_HIGHEST); this.client = client; this.plugin = plugin; this.toolTipManager = toolTipManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspectorOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspectorOverlay.java index 72d1979e3..9720a356d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspectorOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspectorOverlay.java @@ -38,7 +38,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; @Singleton public class WidgetInspectorOverlay extends Overlay @@ -57,7 +56,7 @@ public WidgetInspectorOverlay( setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGHEST); + setPriority(PRIORITY_HIGHEST); drawAfterInterface(InterfaceID.FULLSCREEN_CONTAINER_TLI); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapLocationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapLocationOverlay.java index 55498f796..f73e1e12d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapLocationOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapLocationOverlay.java @@ -40,7 +40,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay; public class WorldMapLocationOverlay extends Overlay @@ -56,7 +55,7 @@ private WorldMapLocationOverlay(Client client, WorldMapOverlay worldMapOverlay, this.worldMapOverlay = worldMapOverlay; this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGHEST); + setPriority(PRIORITY_HIGHEST); setLayer(OverlayLayer.MANUAL); drawAfterInterface(InterfaceID.WORLD_MAP); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java index 0340c1f41..396cc6fd4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java @@ -40,7 +40,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class WorldMapRegionOverlay extends Overlay { @@ -56,7 +55,7 @@ class WorldMapRegionOverlay extends Overlay private WorldMapRegionOverlay(Client client, DevToolsPlugin plugin) { setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setLayer(OverlayLayer.MANUAL); drawAfterInterface(InterfaceID.WORLD_MAP); this.client = client; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java index 1ff9e117f..0a6e6bb6f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java @@ -34,7 +34,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; class DriftNetOverlay extends Overlay @@ -48,7 +47,7 @@ private DriftNetOverlay(DriftNetConfig config, DriftNetPlugin plugin) this.config = config; this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setLayer(OverlayLayer.ABOVE_SCENE); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java index 68d809870..6ac5666c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java @@ -36,7 +36,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; /** @@ -66,7 +65,7 @@ private FpsOverlay(FpsConfig config, Client client) this.config = config; this.client = client; setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setPosition(OverlayPosition.DYNAMIC); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerMinimapOverlay.java index 4f120dcb6..0a808fdd3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerMinimapOverlay.java @@ -40,7 +40,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class GroundMarkerMinimapOverlay extends Overlay { @@ -55,7 +54,7 @@ private GroundMarkerMinimapOverlay(Client client, GroundMarkerConfig config, Gro this.config = config; this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setLayer(OverlayLayer.ABOVE_WIDGETS); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerOverlay.java index 3a43bd859..b0243cf67 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerOverlay.java @@ -43,7 +43,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; public class GroundMarkerOverlay extends Overlay @@ -61,7 +60,7 @@ private GroundMarkerOverlay(Client client, GroundMarkerConfig config, GroundMark this.config = config; this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setLayer(OverlayLayer.ABOVE_SCENE); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java index d46edc17f..2391eb9b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java @@ -46,7 +46,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.BackgroundComponent; @Singleton @@ -100,7 +99,7 @@ class InstanceMapOverlay extends Overlay { this.client = client; this.spriteManager = spriteManager; - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setPosition(OverlayPosition.TOP_LEFT); setLayer(OverlayLayer.ABOVE_WIDGETS); backgroundComponent.setFill(false); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java index 50ab9d011..1a0210c21 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interacthighlight/InteractHighlightOverlay.java @@ -40,7 +40,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.outline.ModelOutlineRenderer; import net.runelite.client.util.ColorUtil; @@ -62,7 +61,7 @@ private InteractHighlightOverlay(Client client, InteractHighlightPlugin plugin, this.modelOutlineRenderer = modelOutlineRenderer; setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_SCENE); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java index 0ad6103c0..69090946d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java @@ -32,7 +32,6 @@ import net.runelite.api.coords.WorldPoint; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; class KourendLibraryTutorialOverlay extends OverlayPanel @@ -60,7 +59,7 @@ private KourendLibraryTutorialOverlay(Client client, KourendLibraryConfig config completeMessageComponent = LineComponent.builder().left("All books found.").build(); sidebarMessageComponent = LineComponent.builder().left("Locations are in the sidebar.").build(); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setPosition(OverlayPosition.TOP_LEFT); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java index 9a59f5f55..827a04162 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java @@ -38,7 +38,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.QuantityFormatter; @@ -63,7 +62,7 @@ class NightmareZoneOverlay extends OverlayPanel { super(plugin); setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.client = client; this.config = config; this.plugin = plugin; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaNotWorkingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaNotWorkingOverlay.java index 50b9cc8a3..5621e5732 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaNotWorkingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaNotWorkingOverlay.java @@ -29,7 +29,6 @@ import java.awt.Graphics2D; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LineComponent; class NpcAggroAreaNotWorkingOverlay extends OverlayPanel @@ -45,7 +44,7 @@ private NpcAggroAreaNotWorkingOverlay(NpcAggroAreaPlugin plugin) .left("Unaggressive NPC timers require calibration. Teleport far away or enter a dungeon, then run until this overlay disappears.") .build()); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setPosition(OverlayPosition.TOP_LEFT); setClearChildren(false); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java index 72691c4da..068206ef8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java @@ -41,7 +41,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class NpcAggroAreaOverlay extends Overlay { @@ -59,7 +58,7 @@ private NpcAggroAreaOverlay(Client client, NpcAggroAreaConfig config, NpcAggroAr this.plugin = plugin; setLayer(OverlayLayer.ABOVE_SCENE); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setPosition(OverlayPosition.DYNAMIC); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java index 8a41240b7..d97c0794a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java @@ -48,7 +48,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.outline.ModelOutlineRenderer; import net.runelite.client.util.ColorUtil; @@ -69,7 +68,7 @@ private ObjectIndicatorsOverlay(Client client, ObjectIndicatorsConfig config, Ob this.plugin = plugin; this.modelOutlineRenderer = modelOutlineRenderer; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); setLayer(OverlayLayer.ABOVE_SCENE); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index fdb6619e8..d4a57c01f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -49,7 +49,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.ProgressBarComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @@ -87,7 +86,7 @@ private OpponentInfoOverlay( this.npcManager = npcManager; setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); panelComponent.setBorder(new Rectangle(2, 2, 2, 2)); panelComponent.setGap(new Point(0, 2)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatusOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatusOverlay.java index 87d4ce047..41373918a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatusOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatusOverlay.java @@ -45,7 +45,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.util.ColorUtil; @@ -89,7 +88,7 @@ private PartyStatusOverlay( setLayer(OverlayLayer.UNDER_WIDGETS); setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java index 5184d539b..87d43ef16 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java @@ -32,7 +32,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; @Singleton @@ -48,7 +47,7 @@ private PlayerIndicatorsMinimapOverlay(PlayerIndicatorsConfig config, PlayerIndi this.playerIndicatorsService = playerIndicatorsService; setLayer(OverlayLayer.ABOVE_WIDGETS); setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java index e71e32e36..341d57ce1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java @@ -36,7 +36,6 @@ import net.runelite.client.game.ChatIconManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.util.Text; @@ -58,7 +57,7 @@ private PlayerIndicatorsOverlay(PlayerIndicatorsConfig config, PlayerIndicatorsS this.playerIndicatorsService = playerIndicatorsService; this.chatIconManager = chatIconManager; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsTileOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsTileOverlay.java index c9ea0507d..7405ecb4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsTileOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsTileOverlay.java @@ -32,7 +32,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; public class PlayerIndicatorsTileOverlay extends Overlay @@ -47,7 +46,7 @@ private PlayerIndicatorsTileOverlay(PlayerIndicatorsConfig config, PlayerIndicat this.playerIndicatorsService = playerIndicatorsService; setLayer(OverlayLayer.ABOVE_SCENE); setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java index a0d0f8d84..f6178e1b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java @@ -41,7 +41,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.util.ImageUtil; @Singleton @@ -68,7 +67,7 @@ private PrayerBarOverlay(final Client client, final PrayerConfig config, final P this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setLayer(OverlayLayer.ABOVE_SCENE); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java index 8ec6c7842..e8946f7a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java @@ -44,11 +44,11 @@ import net.runelite.api.ItemContainer; import static net.runelite.api.SpriteID.MINIMAP_DESTINATION_FLAG; import net.runelite.api.widgets.ComponentID; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.BLANK_TILE_VALUE; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.DIMENSION; import net.runelite.api.widgets.Widget; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver; +import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.BLANK_TILE_VALUE; +import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.DIMENSION; import net.runelite.client.plugins.puzzlesolver.solver.PuzzleState; import net.runelite.client.plugins.puzzlesolver.solver.heuristics.ManhattanDistance; import net.runelite.client.plugins.puzzlesolver.solver.pathfinding.IDAStar; @@ -56,7 +56,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.BackgroundComponent; import net.runelite.client.ui.overlay.components.TextComponent; @@ -89,7 +88,7 @@ public class PuzzleSolverOverlay extends Overlay public PuzzleSolverOverlay(Client client, PuzzleSolverConfig config, ScheduledExecutorService executorService, SpriteManager spriteManager) { setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setLayer(OverlayLayer.ABOVE_WIDGETS); this.client = client; this.config = config; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index 74cc3a102..a5fe27837 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -40,7 +40,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @@ -66,7 +65,7 @@ private RaidsOverlay(Client client, RaidsPlugin plugin, RaidsConfig config, Worl { super(plugin); setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.client = client; this.plugin = plugin; this.config = config; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerCreationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerCreationOverlay.java index 81e25192e..26e8dec35 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerCreationOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerCreationOverlay.java @@ -32,7 +32,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class ScreenMarkerCreationOverlay extends Overlay { @@ -44,7 +43,7 @@ private ScreenMarkerCreationOverlay(final ScreenMarkerPlugin plugin) this.plugin = plugin; setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setMovable(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerOverlay.java index 5341f75af..f5621c682 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerOverlay.java @@ -33,7 +33,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; public class ScreenMarkerOverlay extends Overlay { @@ -47,7 +46,7 @@ public class ScreenMarkerOverlay extends Overlay this.screenMarkerRenderable = new ScreenMarkerRenderable(); setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ALWAYS_ON_TOP); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setMovable(true); setResizable(true); setMinimumSize(16); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java index cd92af332..153420378 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java @@ -36,7 +36,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class ScreenMarkerWidgetHighlightOverlay extends Overlay { @@ -50,7 +49,7 @@ private ScreenMarkerWidgetHighlightOverlay(final ScreenMarkerPlugin plugin, fina this.client = client; setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setMovable(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java index 854f5ed53..284a7103c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java @@ -45,7 +45,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; class ScreenshotOverlay extends Overlay { @@ -62,7 +61,7 @@ class ScreenshotOverlay extends Overlay private ScreenshotOverlay(Client client, DrawManager drawManager, ScreenshotPlugin plugin) { setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setLayer(OverlayLayer.ABOVE_WIDGETS); this.client = client; this.drawManager = drawManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/PlayerInfoDropOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/PlayerInfoDropOverlay.java index 497eb0d3d..87d4ce73d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/PlayerInfoDropOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/PlayerInfoDropOverlay.java @@ -37,7 +37,6 @@ import net.runelite.api.Point; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; @@ -56,7 +55,7 @@ private PlayerInfoDropOverlay(SpecialCounterPlugin plugin, SpecialCounterConfig this.config = config; this.client = client; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamCapesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamCapesOverlay.java index 5f00db93e..270a5e3b3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamCapesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamCapesOverlay.java @@ -34,7 +34,6 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; @@ -49,7 +48,7 @@ private TeamCapesOverlay(TeamPlugin plugin, TeamConfig config, ItemManager manag { super(plugin); setPosition(OverlayPosition.TOP_LEFT); - setPriority(OverlayPriority.LOW); + setPriority(PRIORITY_LOW); this.plugin = plugin; this.config = config; this.manager = manager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsOverlay.java index 99f81a298..23b45e9c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsOverlay.java @@ -37,7 +37,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; public class TileIndicatorsOverlay extends Overlay @@ -52,7 +51,7 @@ private TileIndicatorsOverlay(Client client, TileIndicatorsConfig config) this.config = config; setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_SCENE); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java index 7c0b43836..cfbfad051 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java @@ -35,7 +35,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; class WorldHopperPingOverlay extends Overlay @@ -54,7 +53,7 @@ private WorldHopperPingOverlay(Client client, WorldHopperPlugin worldHopperPlugi this.worldHopperPlugin = worldHopperPlugin; this.worldHopperConfig = worldHopperConfig; setLayer(OverlayLayer.ABOVE_WIDGETS); - setPriority(OverlayPriority.HIGH); + setPriority(PRIORITY_HIGH); setPosition(OverlayPosition.DYNAMIC); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java index e9541d947..073b968cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java @@ -38,7 +38,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; class ZalcanoOverlay extends Overlay @@ -53,7 +52,7 @@ private ZalcanoOverlay(Client client, ZalcanoPlugin zalcanoPlugin) this.zalcanoPlugin = zalcanoPlugin; setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_SCENE); - setPriority(OverlayPriority.MED); + setPriority(PRIORITY_MED); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java index 4da899daa..b594a9ff5 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java @@ -44,7 +44,7 @@ public abstract class WidgetItemOverlay extends Overlay protected WidgetItemOverlay() { super.setPosition(OverlayPosition.DYNAMIC); - super.setPriority(OverlayPriority.LOW); + super.setPriority(PRIORITY_LOW); super.setLayer(OverlayLayer.MANUAL); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java index 904c00040..ebc897fe7 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java @@ -37,7 +37,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TooltipComponent; @@ -60,7 +59,7 @@ private TooltipOverlay(Client client, TooltipManager tooltipManager, final RuneL this.tooltipManager = tooltipManager; this.runeLiteConfig = runeLiteConfig; setPosition(OverlayPosition.TOOLTIP); - setPriority(OverlayPriority.HIGHEST); + setPriority(PRIORITY_HIGHEST); setLayer(OverlayLayer.ABOVE_WIDGETS); // additionally allow tooltips above the full screen world map and welcome screen drawAfterInterface(InterfaceID.FULLSCREEN_CONTAINER_TLI); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java index 23e0a6c8f..388cd37d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java @@ -51,7 +51,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.util.ColorUtil; @Singleton @@ -80,7 +79,7 @@ private WorldMapOverlay( this.client = client; this.worldMapPointManager = worldMapPointManager; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGHEST); + setPriority(PRIORITY_HIGHEST); setLayer(OverlayLayer.MANUAL); drawAfterInterface(InterfaceID.WORLD_MAP); } From 8271e5f66e761e2ab07eabe08d9b2ff16afd7d22 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 4 Feb 2024 20:06:43 -0500 Subject: [PATCH 11/35] woodcutting: use add_overlaytimer_loc for respawn timer --- .../client/plugins/woodcutting/Tree.java | 97 -------- .../plugins/woodcutting/TreeRespawn.java | 3 +- .../woodcutting/WoodcuttingPlugin.java | 207 ++++++++++++++---- .../woodcutting/WoodcuttingSceneOverlay.java | 10 +- 4 files changed, 169 insertions(+), 148 deletions(-) delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java deleted file mode 100644 index d773e1260..000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2018, Mantautas Jurksa - * 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.woodcutting; - -import com.google.common.collect.ImmutableMap; -import java.time.Duration; -import java.util.Map; -import javax.annotation.Nullable; -import lombok.Getter; -import net.runelite.api.NullObjectID; -import net.runelite.api.ObjectID; -import static net.runelite.api.NullObjectID.NULL_10835; -import static net.runelite.api.NullObjectID.NULL_10823; -import static net.runelite.api.ObjectID.*; -import static net.runelite.client.util.RSTimeUnit.GAME_TICKS; - -@Getter -@SuppressWarnings("PMD.UnnecessaryFullyQualifiedName") -enum Tree -{ - REGULAR_TREE(null, TREE, TREE_1277, TREE_1278, TREE_1279, TREE_1280, TREE_40750, TREE_40752), - OAK_TREE(Duration.of(14, GAME_TICKS), OAK_TREE_4540, OAK_TREE_10820), - WILLOW_TREE(Duration.of(14, GAME_TICKS), WILLOW_TREE_10819, WILLOW_TREE_10829, WILLOW_TREE_10831, WILLOW_TREE_10833), - MAPLE_TREE(Duration.of(59, GAME_TICKS), MAPLE_TREE_10832, MAPLE_TREE_36681, MAPLE_TREE_40754) - { - @Override - Duration getRespawnTime(int region) - { - return region == MISCELLANIA_REGION ? Duration.of(14, GAME_TICKS) : super.respawnTime; - } - }, - TEAK_TREE(Duration.of(15, GAME_TICKS), ObjectID.TEAK_TREE, TEAK_TREE_36686, TEAK_TREE_40758), - MAHOGANY_TREE(Duration.of(14, GAME_TICKS), ObjectID.MAHOGANY_TREE, MAHOGANY, MAHOGANY_TREE_40760), - YEW_TREE(Duration.of(99, GAME_TICKS), YEW_TREE_10822, NULL_10823, YEW_TREE_36683, YEW_TREE_40756), - MAGIC_TREE(Duration.of(199, GAME_TICKS), MAGIC_TREE_10834, NULL_10835), - REDWOOD(Duration.of(199, GAME_TICKS), REDWOOD_TREE, REDWOOD_TREE_29670, NullObjectID.NULL_34633, NullObjectID.NULL_34635, NullObjectID.NULL_34637, NullObjectID.NULL_34639, ObjectID.REDWOOD_TREE_34284, ObjectID.REDWOOD_TREE_34286, ObjectID.REDWOOD_TREE_34288, ObjectID.REDWOOD_TREE_34290); - - @Nullable - private final Duration respawnTime; - private final int[] treeIds; - - Tree(Duration respawnTime, int... treeIds) - { - this.respawnTime = respawnTime; - this.treeIds = treeIds; - } - - private static final int MISCELLANIA_REGION = 10044; - private static final Map TREES; - - static - { - ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - - for (Tree tree : values()) - { - for (int treeId : tree.treeIds) - { - builder.put(treeId, tree); - } - } - - TREES = builder.build(); - } - - Duration getRespawnTime(int region) - { - return respawnTime; - } - - static Tree findTree(int objectId) - { - return TREES.get(objectId); - } -} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java index ef05dc67b..58602a375 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java @@ -34,10 +34,9 @@ @Getter class TreeRespawn { - private final Tree tree; + private final WorldPoint worldLocation; private final int lenX; private final int lenY; - private final WorldPoint worldLocation; private final Instant startTime; private final int respawnTime; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index fb65e4de0..b7ddfdfc2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -67,11 +67,14 @@ import static net.runelite.api.AnimationID.WOODCUTTING_TRAILBLAZER; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import net.runelite.api.Constants; import net.runelite.api.GameObject; import net.runelite.api.NPC; import net.runelite.api.NpcID; +import net.runelite.api.NullObjectID; +import net.runelite.api.ObjectComposition; import net.runelite.api.ObjectID; -import net.runelite.api.Point; +import net.runelite.api.ScriptID; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; @@ -83,6 +86,7 @@ import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.events.ScriptPreFired; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -136,7 +140,7 @@ public class WoodcuttingPlugin extends Plugin private WoodcuttingSession session; @Getter - private final Set treeObjects = new HashSet<>(); + private final Set redwoods = new HashSet<>(); // Forestry @Getter(AccessLevel.PACKAGE) @@ -163,8 +167,6 @@ public class WoodcuttingPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final List respawns = new ArrayList<>(); - private boolean recentlyLoggedIn; - private int currentPlane; private ClueNestTier clueTierSpawned; @Provides @@ -186,7 +188,7 @@ protected void shutDown() throws Exception overlayManager.remove(overlay); overlayManager.remove(treesOverlay); respawns.clear(); - treeObjects.clear(); + redwoods.clear(); roots.clear(); flowers.clear(); saplingIngredients.clear(); @@ -198,9 +200,7 @@ protected void shutDown() throws Exception @Subscribe public void onGameTick(GameTick gameTick) { - recentlyLoggedIn = false; clueTierSpawned = null; - currentPlane = client.getPlane(); respawns.removeIf(TreeRespawn::isExpired); @@ -319,15 +319,23 @@ public void onItemSpawned(ItemSpawned itemSpawned) public void onGameObjectSpawned(final GameObjectSpawned event) { GameObject gameObject = event.getGameObject(); - Tree tree = Tree.findTree(gameObject.getId()); - - if (tree == Tree.REDWOOD) - { - treeObjects.add(gameObject); - } switch (gameObject.getId()) { + /* redwood trees */ + case ObjectID.REDWOOD_TREE: + case ObjectID.REDWOOD_TREE_29670: + case NullObjectID.NULL_34633: + case NullObjectID.NULL_34635: + case NullObjectID.NULL_34637: + case NullObjectID.NULL_34639: + case ObjectID.REDWOOD_TREE_34284: + case ObjectID.REDWOOD_TREE_34286: + case ObjectID.REDWOOD_TREE_34288: + case ObjectID.REDWOOD_TREE_34290: + redwoods.add(gameObject); + break; + case ObjectID.TREE_ROOTS: case ObjectID.ANIMAINFUSED_TREE_ROOTS: if (roots.isEmpty() && config.forestryRisingRootsNotification()) @@ -369,28 +377,22 @@ public void onGameObjectDespawned(final GameObjectDespawned event) { final GameObject object = event.getGameObject(); - Tree tree = Tree.findTree(object.getId()); - if (tree != null) - { - if (tree.getRespawnTime() != null && !recentlyLoggedIn && currentPlane == object.getPlane()) - { - log.debug("Adding respawn timer for {} tree at {}", tree, object.getLocalLocation()); - - Point min = object.getSceneMinLocation(); - WorldPoint base = WorldPoint.fromScene(client, min.getX(), min.getY(), client.getPlane()); - TreeRespawn treeRespawn = new TreeRespawn(tree, object.sizeX() - 1, object.sizeY() - 1, - base, Instant.now(), (int) tree.getRespawnTime(base.getRegionID()).toMillis()); - respawns.add(treeRespawn); - } - - if (tree == Tree.REDWOOD) - { - treeObjects.remove(event.getGameObject()); - } - } - switch (object.getId()) { + /* redwood trees */ + case ObjectID.REDWOOD_TREE: + case ObjectID.REDWOOD_TREE_29670: + case NullObjectID.NULL_34633: + case NullObjectID.NULL_34635: + case NullObjectID.NULL_34637: + case NullObjectID.NULL_34639: + case ObjectID.REDWOOD_TREE_34284: + case ObjectID.REDWOOD_TREE_34286: + case ObjectID.REDWOOD_TREE_34288: + case ObjectID.REDWOOD_TREE_34290: + redwoods.remove(object); + break; + case ObjectID.TREE_ROOTS: case ObjectID.ANIMAINFUSED_TREE_ROOTS: roots.remove(object); @@ -420,6 +422,137 @@ public void onGameObjectDespawned(final GameObjectDespawned event) } } + @Subscribe + public void onScriptPreFired(ScriptPreFired scriptPreFired) + { + if (scriptPreFired.getScriptId() == ScriptID.ADD_OVERLAYTIMER_LOC) + { + var args = scriptPreFired.getScriptEvent().getArguments(); + int locCoord = (int) args[1]; + int locId = (int) args[2]; + int ticks = (int) args[5]; + + log.debug("Add overlay loc={} coord={} ticks={}", locId, locCoord, ticks); + + switch (locId) + { + case ObjectID.TREE_STUMP: + case ObjectID.TREE_STUMP_1342: // regular + case ObjectID.TREE_STUMP_1343: + case ObjectID.TREE_STUMP_1344: + case ObjectID.TREE_STUMP_1345: + case ObjectID.TREE_STUMP_1346: + case ObjectID.TREE_STUMP_1347: + case ObjectID.TREE_STUMP_1348: + case ObjectID.TREE_STUMP_1349: + case ObjectID.TREE_STUMP_1350: + case ObjectID.TREE_STUMP_1351: + case ObjectID.TREE_STUMP_1352: + case ObjectID.TREE_STUMP_1353: + case ObjectID.TREE_STUMP_1354: + case ObjectID.TREE_STUMP_1355: + case ObjectID.TREE_STUMP_1356: // oak + case ObjectID.TREE_STUMP_1357: + case ObjectID.TREE_STUMP_1358: + case ObjectID.TREE_STUMP_1359: + case ObjectID.TREE_STUMP_2310: + case ObjectID.TREE_STUMP_2891: + case ObjectID.ACHEY_TREE_STUMP: + case ObjectID.DYING_TREE_STUMP: + case ObjectID.TREE_STUMP_3880: + case ObjectID.TREE_STUMP_3884: + case ObjectID.TREE_STUMP_4061: + case ObjectID.TREE_STUMP_4328: + case ObjectID.TREE_STUMP_4329: + case ObjectID.JUNGLE_TREE_STUMP: + case ObjectID.JUNGLE_TREE_STUMP_4821: + case ObjectID.TREE_STUMP_4822: + case ObjectID.TREE_STUMP_5905: + case ObjectID.TREE_STUMP_6212: + case ObjectID.APPLE_TREE_STUMP: + case ObjectID.BANANA_TREE_STUMP: + case ObjectID.CURRY_TREE_STUMP: + case ObjectID.ORANGE_TREE_STUMP: + case ObjectID.PALM_TREE_STUMP: + case ObjectID.PAPAYA_TREE_STUMP: + case ObjectID.SPIRIT_TREE_STUMP: + case ObjectID.MAGIC_TREE_STUMP: + case ObjectID.TREE_STUMP_8445: + case ObjectID.OAK_TREE_STUMP: + case ObjectID.WILLOW_TREE_STUMP: + case ObjectID.YEW_TREE_STUMP: + case ObjectID.TREE_STUMP_9035: + case ObjectID.TREE_STUMP_9037: + case ObjectID.TREE_STUMP_9471: // willow + case ObjectID.TREE_STUMP_9661: + case ObjectID.TREE_STUMP_9711: + case ObjectID.TREE_STUMP_9712: + case ObjectID.TREE_STUMP_9713: + case ObjectID.TREE_STUMP_9714: // yew + case ObjectID.TREE_STUMP_10057: + case ObjectID.TREE_STUMP_12894: + case ObjectID.TREE_STUMP_14516: + case ObjectID.TREE_STUMP_14517: + case ObjectID.TREE_STUMP_14567: + case ObjectID.TREE_STUMP_14596: + case ObjectID.TREE_STUMP_14638: + case ObjectID.TREE_STUMP_14667: + case ObjectID.TREE_STUMP_14697: + case ObjectID.TREE_STUMP_16266: + case ObjectID.DREAM_TREE_STUMP: + case ObjectID.TREE_STUMP_21274: + case ObjectID.TREE_STUMP_23054: + case ObjectID.TREE_STUMP_25186: + case ObjectID.TREE_STUMP_26834: + case ObjectID.TREE_STUMP_27061: + case ObjectID.MAHOGANY_TREE_STUMP: + case ObjectID.TREE_STUMP_30446: + case ObjectID.DEAD_TREE_STUMP: + case ObjectID.DEAD_TREE_STUMP_30856: + case ObjectID.TREE_STUMP_33583: + case ObjectID.TREE_STUMP_33584: + case ObjectID.CELASTRUS_TREE_STUMP: + case ObjectID.DRAGONFRUIT_TREE_STUMP: + case ObjectID.TREE_STUMP_36673: + case ObjectID.TREE_STUMP_36675: + case ObjectID.TREE_STUMP_36678: + case ObjectID.TREE_STUMP_36680: + case ObjectID.TREE_STUMP_36684: + case ObjectID.TREE_STUMP_36687: + case ObjectID.TREE_STUMP_36689: + case ObjectID.TREE_STUMP_40751: + case ObjectID.TREE_STUMP_40753: + case ObjectID.TREE_STUMP_40757: + case ObjectID.TREE_STUMP_40759: + case ObjectID.TREE_STUMP_40761: + case ObjectID.TREE_STUMP_42392: + case ObjectID.TREE_STUMP_42394: + case ObjectID.TREE_STUMP_42396: + case ObjectID.TREE_STUMP_46582: + case ObjectID.TREE_STUMP_46583: + case ObjectID.TREE_STUMP_50035: + + // depleted redwood + case ObjectID.REDWOOD_TREE_29669: + case ObjectID.REDWOOD_TREE_29670: + case ObjectID.REDWOOD_TREE_29671: + + // farming guild redwood + case NullObjectID.NULL_34633: + case NullObjectID.NULL_34635: + case NullObjectID.NULL_34637: + case NullObjectID.NULL_34639: + { + WorldPoint worldPoint = new WorldPoint((locCoord >>> 14) & 0x3FFF, locCoord & 0x3FFF, (locCoord >>> 28) & 0x3); + ObjectComposition obj = client.getObjectDefinition(locId); + + TreeRespawn treeRespawn = new TreeRespawn(worldPoint, obj.getSizeX() - 1, obj.getSizeY() - 1, Instant.now(), ticks * Constants.GAME_TICK_LENGTH); + respawns.add(treeRespawn); + } + } + } + } + @Subscribe public void onGameStateChanged(final GameStateChanged event) { @@ -437,18 +570,12 @@ public void onGameStateChanged(final GameStateChanged event) entlings.clear(); // fallthrough case LOADING: - treeObjects.clear(); + redwoods.clear(); roots.clear(); saplingIngredients.clear(); Arrays.fill(saplingOrder, null); pheasantNests.clear(); break; - case LOGGED_IN: - // After login trees that are depleted will be changed, - // wait for the next game tick before watching for - // trees to despawn - recentlyLoggedIn = true; - break; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSceneOverlay.java index d2cae6a74..aecf33a92 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingSceneOverlay.java @@ -38,7 +38,6 @@ import net.runelite.api.GameObject; import net.runelite.api.ItemID; import net.runelite.api.NPC; -import net.runelite.api.ObjectComposition; import net.runelite.api.ObjectID; import net.runelite.api.Perspective; import net.runelite.api.Point; @@ -298,17 +297,10 @@ private void renderRedwoods(Graphics2D graphics) return; } - for (GameObject treeObject : plugin.getTreeObjects()) + for (GameObject treeObject : plugin.getRedwoods()) { if (treeObject.getWorldLocation().distanceTo(client.getLocalPlayer().getWorldLocation()) <= 12) { - // Redwood trees at the farming guild are multilocs rather than global objects synced for all players - // so we must handle them here rather than relying on GameObjectSpawned events - final ObjectComposition treeComp = client.getObjectDefinition(treeObject.getId()); - if (treeComp.getImpostorIds() != null && Tree.findTree(treeComp.getImpostor().getId()) == null) - { - continue; - } OverlayUtil.renderImageLocation(client, graphics, treeObject.getLocalLocation(), itemManager.getImage(ItemID.REDWOOD_LOGS), 120); } } From ac9b68aed6facb73da824837f7a55ac73a17b3f7 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Fri, 2 Feb 2024 18:33:34 -0700 Subject: [PATCH 12/35] ContainableFrame: remove non-native containedInScreen==ALWAYS code --- .../runelite/client/ui/ContainableFrame.java | 155 ++++++------------ 1 file changed, 51 insertions(+), 104 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java index c95b9648d..b6423ecf8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java @@ -51,133 +51,80 @@ public enum Mode @Setter private Mode containedInScreen; private boolean rightSideSuction; - private boolean boundsOpSet; private boolean scaleMinSize = false; private boolean overrideUndecorated; - @Override - @SuppressWarnings("deprecation") - public void resize(int width, int height) - { - reshape(getX(), getY(), width, height); - } - - @Override - @SuppressWarnings("deprecation") - public void move(int x, int y) - { - reshape(x, y, getWidth(), getHeight()); - } - - @Override - @SuppressWarnings("deprecation") - public void reshape(int x, int y, int width, int height) - { - // Component has stateful behavior so that setLocation can call reshape without - // reshape attempting to update it's x/y components. - if (boundsOpSet) - { - super.reshape(x, y, width, height); - return; - } - - applyChange(x, y, width, height, getX(), getY(), getWidth(), false); - } - - @Override - public void pack() - { - try - { - boundsOpSet = true; - super.pack(); - } - finally - { - boundsOpSet = false; - } - } - // we must use the deprecated variants since that it what Component ultimately delegates to @SuppressWarnings("deprecation") private void applyChange(int wX, int wY, int wWidth, int wHeight, int wOldx, int wOldY, int wOldWidth, boolean contain) { - try + if (contain && !isFullScreen()) { - boundsOpSet = true; + Rectangle cDpyBounds = this.getGraphicsConfiguration().getBounds(); + Insets insets = this.getInsets(); + Rectangle cRect = new Rectangle(wX + insets.left, wY + insets.top, wWidth - (insets.left + insets.right), wHeight - (insets.top + insets.bottom)); - if (contain && !isFullScreen()) + if (rightSideSuction) { - Rectangle cDpyBounds = this.getGraphicsConfiguration().getBounds(); - Insets insets = this.getInsets(); - Rectangle cRect = new Rectangle(wX + insets.left, wY + insets.top, wWidth - (insets.left + insets.right), wHeight - (insets.top + insets.bottom)); - - if (rightSideSuction) - { - // only keep suction while where are near the screen edge - rightSideSuction = wOldx + wOldWidth - insets.right + SCREEN_EDGE_CLOSE_DISTANCE >= cDpyBounds.getMaxX(); - } - - if (rightSideSuction && wWidth < wOldWidth) - { - // shift the window so the right side is near the edge again - cRect.x += wOldWidth - wWidth; - } - - if (wWidth > wOldWidth - && cRect.getMaxX() > cDpyBounds.getMaxX() - && (wOldx + insets.left) + (wOldWidth - (insets.left + insets.right)) + SCREEN_EDGE_CLOSE_DISTANCE > cDpyBounds.getMaxX() - && (wOldx + insets.left) + (wOldWidth - (insets.left + insets.right)) <= cDpyBounds.getMaxX()) - { - // attempt to retain the distance between us and the edge when shifting left - cRect.x -= wWidth - wOldWidth; - } - - cRect.x -= Math.max(0, cRect.getMaxX() - cDpyBounds.getMaxX()); - cRect.y -= Math.max(0, cRect.getMaxY() - cDpyBounds.getMaxY()); - - // if we are just resizing don't try to move the left side out - if (cRect.x != wOldx + insets.left) - { - cRect.x = Math.max(cRect.x, cDpyBounds.x); - } - - if (cRect.y != wOldY + insets.top) - { - cRect.y = Math.max(cRect.y, cDpyBounds.y); - } + // only keep suction while where are near the screen edge + rightSideSuction = wOldx + wOldWidth - insets.right + SCREEN_EDGE_CLOSE_DISTANCE >= cDpyBounds.getMaxX(); + } - if (wWidth > wOldWidth && cRect.x < wOldx + insets.left) - { - // we have shifted the window left to avoid the right side going oob - rightSideSuction = true; - } + if (rightSideSuction && wWidth < wOldWidth) + { + // shift the window so the right side is near the edge again + cRect.x += wOldWidth - wWidth; + } - wX = cRect.x - insets.left; - wY = cRect.y - insets.top; - wWidth = cRect.width + insets.left + insets.right; - wHeight = cRect.height + insets.top + insets.bottom; + if (wWidth > wOldWidth + && cRect.getMaxX() > cDpyBounds.getMaxX() + && (wOldx + insets.left) + (wOldWidth - (insets.left + insets.right)) + SCREEN_EDGE_CLOSE_DISTANCE > cDpyBounds.getMaxX() + && (wOldx + insets.left) + (wOldWidth - (insets.left + insets.right)) <= cDpyBounds.getMaxX()) + { + // attempt to retain the distance between us and the edge when shifting left + cRect.x -= wWidth - wOldWidth; } - boolean xyDifferent = getX() != wX || getY() != wY; - boolean whDifferent = getWidth() != wWidth || getHeight() != wHeight; + cRect.x -= Math.max(0, cRect.getMaxX() - cDpyBounds.getMaxX()); + cRect.y -= Math.max(0, cRect.getMaxY() - cDpyBounds.getMaxY()); - if (xyDifferent && whDifferent) + // if we are just resizing don't try to move the left side out + if (cRect.x != wOldx + insets.left) { - super.reshape(wX, wY, wWidth, wHeight); + cRect.x = Math.max(cRect.x, cDpyBounds.x); } - else if (xyDifferent) + + if (cRect.y != wOldY + insets.top) { - super.move(wX, wY); + cRect.y = Math.max(cRect.y, cDpyBounds.y); } - else if (whDifferent) + + if (wWidth > wOldWidth && cRect.x < wOldx + insets.left) { - super.resize(wWidth, wHeight); + // we have shifted the window left to avoid the right side going oob + rightSideSuction = true; } + + wX = cRect.x - insets.left; + wY = cRect.y - insets.top; + wWidth = cRect.width + insets.left + insets.right; + wHeight = cRect.height + insets.top + insets.bottom; } - finally + + boolean xyDifferent = getX() != wX || getY() != wY; + boolean whDifferent = getWidth() != wWidth || getHeight() != wHeight; + + if (xyDifferent && whDifferent) + { + super.reshape(wX, wY, wWidth, wHeight); + } + else if (xyDifferent) + { + super.move(wX, wY); + } + else if (whDifferent) { - boundsOpSet = false; + super.resize(wWidth, wHeight); } } From 93e6f5e2d5c514e0f6112503776191ac8a20afa8 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Fri, 2 Feb 2024 18:50:02 -0700 Subject: [PATCH 13/35] ContainableFrame: always contain & suction when snapped on windows --- .../runelite/client/ui/ContainableFrame.java | 7 ++-- .../net/runelite/client/util/WinUtil.java | 33 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java index b6423ecf8..459b312b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java @@ -35,6 +35,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.util.OSType; +import net.runelite.client.util.WinUtil; @Slf4j public class ContainableFrame extends JFrame @@ -58,13 +59,15 @@ public enum Mode @SuppressWarnings("deprecation") private void applyChange(int wX, int wY, int wWidth, int wHeight, int wOldx, int wOldY, int wOldWidth, boolean contain) { - if (contain && !isFullScreen()) + boolean isSnapped = WinUtil.isWindowArranged(this); + + if ((contain || isSnapped) && !isFullScreen()) { Rectangle cDpyBounds = this.getGraphicsConfiguration().getBounds(); Insets insets = this.getInsets(); Rectangle cRect = new Rectangle(wX + insets.left, wY + insets.top, wWidth - (insets.left + insets.right), wHeight - (insets.top + insets.bottom)); - if (rightSideSuction) + if (rightSideSuction || isSnapped) { // only keep suction while where are near the screen edge rightSideSuction = wOldx + wOldWidth - insets.right + SCREEN_EDGE_CLOSE_DISTANCE >= cDpyBounds.getMaxX(); diff --git a/runelite-client/src/main/java/net/runelite/client/util/WinUtil.java b/runelite-client/src/main/java/net/runelite/client/util/WinUtil.java index b30025769..f0751d5b8 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/WinUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/WinUtil.java @@ -25,13 +25,19 @@ package net.runelite.client.util; import com.sun.jna.Native; +import com.sun.jna.Pointer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.platform.win32.WinUser; +import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.W32APIOptions; import java.awt.Frame; +import java.awt.Window; public class WinUtil { + private static boolean isWindowArrangedSupported = OSType.getOSType() == OSType.Windows; + /** * Forcibly set focus to the given component * @@ -56,4 +62,31 @@ public static void requestForeground(Frame frame) WinDef.HWND hwnd = new WinDef.HWND(Native.getComponentPointer(frame)); user32.SetForegroundWindow(hwnd); } + + interface RLUser32 extends StdCallLibrary + { + RLUser32 INSTANCE = Native.load("user32", RLUser32.class, W32APIOptions.DEFAULT_OPTIONS); + + boolean IsWindowArranged(Pointer hwnd); + } + + public static boolean isWindowArranged(Window window) + { + if (!isWindowArrangedSupported || !window.isDisplayable()) + { + return false; + } + + try + { + Pointer hwnd = Native.getComponentPointer(window); + return RLUser32.INSTANCE.IsWindowArranged(hwnd); + } + catch (LinkageError ignored) + { + // IsWindowArranged is only since Win 10 1903 + isWindowArrangedSupported = false; + return false; + } + } } From 1046950384bd785f28cee61224dc145dcca8c260 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Fri, 2 Feb 2024 18:53:35 -0700 Subject: [PATCH 14/35] clientui: force keep window size on when snapped on windows --- .../src/main/java/net/runelite/client/ui/ClientUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 86e8e8f34..1fdf413a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -1404,7 +1404,7 @@ private void layout(Container content, boolean forceSizingClient) : 0; boolean keepGameSize = (frame.getExtendedState() & Frame.MAXIMIZED_HORIZ) == 0 - && (config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE || forceSizingClient); + && ((config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE && !WinUtil.isWindowArranged(frame)) || forceSizingClient); if (keepGameSize) { From bf9f5c2248570383aa7f8eec0cf117b048474a9f Mon Sep 17 00:00:00 2001 From: Max Weber Date: Mon, 5 Feb 2024 09:10:41 -0700 Subject: [PATCH 15/35] clientui: save game size instead of window size when keeping game size Previously when restoring if you had keep game size set, and the window was short enough that the sidebar had 2 columns, the layout manager would get confused and expand the window by the width of one row of tabs every startup. --- .../java/net/runelite/client/ui/ClientUI.java | 95 +++++++++++++++---- 1 file changed, 78 insertions(+), 17 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 1fdf413a2..740b01448 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -163,6 +163,7 @@ public class ClientUI private ContainableFrame frame; private JPanel content; + private ClientPanel clientPanel; private JButton sidebarNavBtn; private Dimension lastClientSize; private Cursor defaultCursor; @@ -369,7 +370,9 @@ public void windowClosing(WindowEvent event) content = new JPanel(); content.setLayout(new Layout()); - content.add(new ClientPanel(client)); + + clientPanel = new ClientPanel(client); + content.add(clientPanel); sidebar = new JTabbedPane(JTabbedPane.RIGHT); sidebar.setBackground(ColorScheme.DARKER_GRAY_COLOR); @@ -598,15 +601,13 @@ public void show() boolean appliedSize = false; if (config.rememberScreenBounds() && !safeMode) { - Rectangle clientBounds = configManager.getConfiguration( - CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, Rectangle.class); - if (clientBounds != null) + appliedSize = restoreClientBoundsConfig(); + if (appliedSize) { - frame.setBounds(clientBounds); - appliedSize = true; - // Adjust for insets before performing display test Insets insets = frame.getInsets(); + Rectangle clientBounds = frame.getBounds(); + clientBounds = new Rectangle( clientBounds.x + insets.left, clientBounds.y + insets.top, @@ -1220,25 +1221,85 @@ private void applyGameSize(boolean force) private void saveClientBoundsConfig() { - final Rectangle bounds = frame.getBounds(); + Insets insets = frame.getInsets(); + char mode; + Dimension size; + if (config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE) + { + mode = 'g'; + size = clientPanel.getSize(); + } + else + { + mode = 'c'; + size = frame.getSize(); + size.width -= insets.left + insets.right; + size.height -= insets.top + insets.bottom; + } + Point point = frame.getLocation(); + point.x += insets.left; + point.y += insets.top; + String serialized = point.x + ":" + point.y + ":" + size.width + ":" + size.height + ":" + mode; + configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, serialized); + if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0) { - configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, bounds); + // leave the previous bounds there, so when the client starts maximized it + // can restore to the restored size from the previous run configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED, true); } else { - if (config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE) + configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED); + } + } + + private boolean restoreClientBoundsConfig() + { + String str = configManager.getConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS); + if (str == null) + { + return false; + } + + try + { + String[] splitStr = str.split(":"); + int x = Integer.parseInt(splitStr[0]); + int y = Integer.parseInt(splitStr[1]); + int width = Integer.parseInt(splitStr[2]); + int height = Integer.parseInt(splitStr[3]); + String mode = null; + if (splitStr.length > 4) { - if (sidebar.isVisible() && sidebar.getSelectedComponent() != null) - { - // Try to contract plugin panel - bounds.width -= sidebar.getSelectedComponent().getWidth(); - } + mode = splitStr[4]; } - configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED); - configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, bounds); + Insets insets = frame.getInsets(); + + if (mode != null) + { + // null mode means legacy exact frame bounds + x -= insets.left; + y -= insets.top; + } + + frame.setLocation(x, y); + + if ("g".equals(mode)) + { + ((Layout) content.getLayout()).forceClientSize(width, height); + } + else + { + frame.setSize(width + insets.left + insets.right, height + insets.top + insets.bottom); + } + + return true; + } + catch (RuntimeException ignored) + { + return false; } } From b3b07a195849b1336618797f1cbd7d9220d97db6 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Mon, 5 Feb 2024 09:21:38 -0700 Subject: [PATCH 16/35] clientui: remember last restored bounds when starting maximized Previously if you maximized the client, closed it, opened it, then restored it, it would take up the whole screen because it remembered its size from when it was maximized. Instead save the restored position, so when the client restores after a restart it will have a sane size & position. --- .../java/net/runelite/client/ui/ClientUI.java | 78 +++++++++++++++---- 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 740b01448..31c45b368 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -55,6 +55,8 @@ import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.desktop.QuitStrategy; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -89,6 +91,7 @@ import javax.swing.JRootPane; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; +import javax.swing.Timer; import javax.swing.ToolTipManager; import javax.swing.border.EmptyBorder; import javax.swing.border.MatteBorder; @@ -168,6 +171,9 @@ public class ClientUI private Dimension lastClientSize; private Cursor defaultCursor; + private String lastNormalBounds; + private final Timer normalBoundsTimer; + @Inject(optional = true) @Named("minMemoryLimit") private int minMemoryLimit = 400; @@ -205,6 +211,9 @@ private ClientUI( this.eventBus = eventBus; this.safeMode = safeMode; this.title = title + (safeMode ? " (safe mode)" : ""); + + normalBoundsTimer = new Timer(250, _ev -> setLastNormalBounds()); + normalBoundsTimer.setRepeats(false); } @Subscribe @@ -367,6 +376,20 @@ public void windowClosing(WindowEvent event) } } }); + frame.addComponentListener(new ComponentAdapter() + { + @Override + public void componentResized(ComponentEvent e) + { + windowBoundsChanged(); + } + + @Override + public void componentMoved(ComponentEvent e) + { + windowBoundsChanged(); + } + }); content = new JPanel(); content.setLayout(new Layout()); @@ -1219,28 +1242,49 @@ private void applyGameSize(boolean force) } } - private void saveClientBoundsConfig() + private void windowBoundsChanged() { - Insets insets = frame.getInsets(); - char mode; - Dimension size; - if (config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE) + // Sometimes when maximizing windowMoved can be delivered before extendedState is updated, so defer + // actually saving for some ms to reduce the likelyhood of this + normalBoundsTimer.stop(); + if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == 0) { - mode = 'g'; - size = clientPanel.getSize(); + normalBoundsTimer.start(); } - else + } + + private void setLastNormalBounds() + { + if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == 0) + { + Insets insets = frame.getInsets(); + char mode; + Dimension size; + if (config.automaticResizeType() == ExpandResizeType.KEEP_GAME_SIZE) + { + mode = 'g'; + size = clientPanel.getSize(); + } + else + { + mode = 'c'; + size = frame.getSize(); + size.width -= insets.left + insets.right; + size.height -= insets.top + insets.bottom; + } + Point point = frame.getLocation(); + point.x += insets.left; + point.y += insets.top; + lastNormalBounds = point.x + ":" + point.y + ":" + size.width + ":" + size.height + ":" + mode; + } + } + + private void saveClientBoundsConfig() + { + if (lastNormalBounds != null) { - mode = 'c'; - size = frame.getSize(); - size.width -= insets.left + insets.right; - size.height -= insets.top + insets.bottom; + configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, lastNormalBounds); } - Point point = frame.getLocation(); - point.x += insets.left; - point.y += insets.top; - String serialized = point.x + ":" + point.y + ":" + size.width + ":" + size.height + ":" + mode; - configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, serialized); if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0) { From efe297ede78887e4065d5842cf4a92b56aee5c46 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Feb 2024 16:53:20 -0500 Subject: [PATCH 17/35] bank tags: use only dynamic components for tab layer Static components are unsafe due to it causing component ids to the new static components to be stored and referenced by the client later, like in the menu, which does not do bounds checking. This fixes a crash where you right click open the menu on a tag tab, close the bank, then click the menu. --- .../plugins/banktags/tabs/TabInterface.java | 106 +++++++++--------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 92da9cf8e..f54fbf5a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -156,13 +156,15 @@ public class TabInterface @Getter private boolean tagTabActive; private int tagTabFirstChildIdx = -1; - private int currentTabIndex; + private int tabScrollOffset; private Instant startScroll = Instant.now(); + private int tabCount; + private Widget parent; + private Widget scrollComponent; private Widget upButton; private Widget downButton; private Widget newTab; - private Widget tabLayer; @Inject private TabInterface( @@ -227,7 +229,11 @@ else if (event.getScriptId() == ScriptID.BANKMAIN_SIZE_CHECK && enabled) { log.debug("Bank resize!"); // This is right before the bank is resized, so wait until after so the computed tab layer size is right - clientThread.invokeLater(this::resizeTabLayer); + clientThread.invokeLater(() -> + { + repositionButtons(); + rebuildTabs(); + }); } } else if (event.getScriptId() == ScriptID.BANKMAIN_SEARCH_TOGGLE) @@ -245,7 +251,7 @@ else if (event.getScriptId() == ScriptID.BANKMAIN_FINISHBUILDING && enabled) hideBank(); } - resizeTabLayer(); + repositionButtons(); rebuildTabs(); rebuildTagTabTab(); @@ -302,7 +308,7 @@ public void onWidgetClosed(WidgetClosed event) if (event.getGroupId() == InterfaceID.BANK && event.isUnload()) { enabled = false; - upButton = downButton = newTab = tabLayer = null; + upButton = downButton = newTab = scrollComponent = parent = null; activeTab = null; tagTabActive = false; tagTabFirstChildIdx = -1; @@ -311,14 +317,13 @@ public void onWidgetClosed(WidgetClosed event) private void init() { - Widget parent = client.getWidget(ComponentID.BANK_CONTENT_CONTAINER); + assert parent == null; // avoid double init + parent = client.getWidget(ComponentID.BANK_CONTENT_CONTAINER); - assert tabLayer == null; // avoid double init - - tabLayer = parent.createStaticChild(WidgetType.LAYER); - tabLayer.setHasListener(true); - tabLayer.setNoScrollThrough(true); - tabLayer.setOnScrollWheelListener((JavaScriptCallback) (event) -> scrollTab(event.getMouseY())); + scrollComponent = parent.createChild(-1, WidgetType.TEXT); // not really text, but just to capture scroll + scrollComponent.setHasListener(true); + scrollComponent.setNoScrollThrough(true); + scrollComponent.setOnScrollWheelListener((JavaScriptCallback) (event) -> scrollTab(event.getMouseY())); upButton = createGraphic(parent, "", TabSprites.UP_ARROW.getSpriteId(), -1, TAB_WIDTH, BUTTON_HEIGHT, MARGIN, 0); upButton.setAction(1, SCROLL_UP); @@ -346,7 +351,7 @@ private void init() tabManager.clear(); tabManager.getAllTabs().forEach(this::loadTab); - currentTabIndex = config.position(); + tabScrollOffset = config.position(); scrollTab(0); if (config.rememberTab() && !Strings.isNullOrEmpty(config.tab())) @@ -399,12 +404,9 @@ public void deinit() enabled = false; activeTab = null; - // we can't easily remove these, just hide and orphan them - upButton.setHidden(true); - downButton.setHidden(true); - newTab.setHidden(true); - tabLayer.setHidden(true); - upButton = downButton = newTab = tabLayer = null; + upButton = downButton = newTab = scrollComponent = null; + parent.deleteAllChildren(); + parent = null; tabManager.clear(); } @@ -507,7 +509,7 @@ private void handleNewTab(ScriptEvent event) loadTab(tagName); tabManager.save(); - resizeTabLayer(); + repositionButtons(); rebuildTabs(); rebuildTagTabTab(); } @@ -555,7 +557,7 @@ private void handleNewTab(ScriptEvent event) loadTab(name); tabManager.save(); - resizeTabLayer(); + repositionButtons(); rebuildTabs(); rebuildTagTabTab(); @@ -755,16 +757,19 @@ public void onDraggingWidgetChanged(DraggingWidgetChanged event) if (!tagTabActive && draggedWidget.getId() == ComponentID.BANK_ITEM_CONTAINER && draggedWidget.getItemId() != -1 - && draggedOn.getId() == tabLayer.getId()) + && draggedOn.getParent() == parent + && draggedOn.getIndex() > 3) // skip buttons { // Tag an item dragged on a tag tab + log.debug("Dragged {} to tab {}", draggedWidget.getItemId(), Text.removeTags(draggedOn.getName())); tagManager.addTag(draggedWidget.getItemId(), draggedOn.getName(), shiftDown); reloadActiveTab(); } else if ((tagTabActive && draggedWidget.getId() == ComponentID.BANK_ITEM_CONTAINER && draggedOn.getId() == ComponentID.BANK_ITEM_CONTAINER) - || (tabLayer.getId() == draggedOn.getId() && tabLayer.getId() == draggedWidget.getId())) + || (draggedWidget.getParent() == parent && draggedOn.getParent() == parent)) { // Reorder tag tabs + log.debug("Reorder tag tab {} <-> {}", draggedWidget, draggedOn); moveTagTab(draggedWidget, draggedOn); } } @@ -854,7 +859,7 @@ private void deleteTab(String tag) tabManager.remove(tag); tabManager.save(); - resizeTabLayer(); + repositionButtons(); rebuildTabs(); rebuildTagTabTab(); scrollTab(0); @@ -927,24 +932,22 @@ private void scrollTick(int direction) private void scrollTab(int d) { - currentTabIndex += d; + tabScrollOffset += d; - int maxTabs = tabLayer.getHeight() / TAB_HEIGHT; - int maxScroll = tabManager.size() - maxTabs; - if (currentTabIndex > maxScroll) + int maxScroll = tabManager.size() - tabCount; + if (tabScrollOffset > maxScroll) { - currentTabIndex = maxScroll; + tabScrollOffset = maxScroll; } - if (currentTabIndex < 0) + if (tabScrollOffset < 0) { - currentTabIndex = 0; + tabScrollOffset = 0; } - int amt = (MARGIN + TAB_HEIGHT) * currentTabIndex; - tabLayer.setScrollY(amt); + config.position(tabScrollOffset); - config.position(currentTabIndex); + rebuildTabs(); } private void openNamedTag(String name, boolean relayout) @@ -991,7 +994,7 @@ public void reloadActiveTab() } } - private void resizeTabLayer() + private void repositionButtons() { Widget incinerator = client.getWidget(ComponentID.BANK_INCINERATOR); int incineratorHeight = 0; @@ -1019,38 +1022,43 @@ private void resizeTabLayer() incineratorHeight = incinerator.getHeight(); } - Widget parent = tabLayer.getParent(); - tabLayer.setOriginalY(41 + BUTTON_HEIGHT); - tabLayer.setOriginalWidth(TAB_WIDTH + MARGIN * 2); + scrollComponent.setOriginalY(41 + BUTTON_HEIGHT); + scrollComponent.setOriginalWidth(TAB_WIDTH + MARGIN * 2); // Keep the tab layer height a multiple of the tab heights - int tabLayerHeight = parent.getHeight() - tabLayer.getOriginalY() - 61 - incineratorHeight; - int numTabs = tabLayerHeight / (TAB_HEIGHT + MARGIN); - tabLayer.setOriginalHeight(numTabs * (TAB_HEIGHT + MARGIN)); + int tabLayerHeight = parent.getHeight() - scrollComponent.getOriginalY() - 61 - incineratorHeight; + tabCount = tabLayerHeight / (TAB_HEIGHT + MARGIN); + scrollComponent.setOriginalHeight(tabCount * (TAB_HEIGHT + MARGIN)); - tabLayer.revalidate(); + scrollComponent.revalidate(); upButton.setOriginalY(41); upButton.revalidate(); - downButton.setOriginalY(41 + BUTTON_HEIGHT + numTabs * (TAB_HEIGHT + MARGIN) + MARGIN); + downButton.setOriginalY(41 + BUTTON_HEIGHT + tabCount * (TAB_HEIGHT + MARGIN) + MARGIN); downButton.revalidate(); } private void rebuildTabs() { - int y = MARGIN; + // remove the tag tabs but keep the buttons and scroll component + parent.setChildren(Arrays.copyOf(parent.getChildren(), 4)); - tabLayer.deleteAllChildren(); - for (TagTab tab : tabManager.getTabs()) + int y = scrollComponent.getOriginalY(); + y += MARGIN; + + var tabs = tabManager.getTabs(); + for (int i = tabScrollOffset; i < tabScrollOffset + tabCount && i < tabs.size(); ++i) { - Widget background = createGraphic(tabLayer, ColorUtil.wrapWithColorTag(tab.getTag(), HILIGHT_COLOR), + TagTab tab = tabs.get(i); + + Widget background = createGraphic(parent, ColorUtil.wrapWithColorTag(tab.getTag(), HILIGHT_COLOR), (activeTab == tab ? TabSprites.TAB_BACKGROUND_ACTIVE : TabSprites.TAB_BACKGROUND).getSpriteId(), -1, TAB_WIDTH, TAB_HEIGHT, MARGIN, y); addTabActions(background); Widget icon = createGraphic( - tabLayer, + parent, ColorUtil.wrapWithColorTag(tab.getTag(), HILIGHT_COLOR), -1, tab.getIconItemId(), @@ -1060,8 +1068,6 @@ private void rebuildTabs() y += TAB_HEIGHT + MARGIN; } - - tabLayer.setScrollHeight(y); } private void rebuildTagTabTab() From 21a6ea4c1d20249f4716fb3fefd6509cdf7e3481 Mon Sep 17 00:00:00 2001 From: YvesW <7929021+YvesW@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:32:39 +0100 Subject: [PATCH 18/35] idle notifier: add crystal felling axe (inactive) animation --- runelite-api/src/main/java/net/runelite/api/AnimationID.java | 1 + .../runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java | 1 + 2 files changed, 2 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/AnimationID.java index 4dcba5687..c5512b514 100644 --- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java @@ -57,6 +57,7 @@ public final class AnimationID public static final int WOODCUTTING_2H_RUNE = 10070; public static final int WOODCUTTING_2H_DRAGON = 10071; public static final int WOODCUTTING_2H_CRYSTAL = 10072; + public static final int WOODCUTTING_2H_CRYSTAL_INACTIVE = 10073; public static final int WOODCUTTING_2H_3A = 10074; public static final int CONSUMING = 829; // consuming consumables public static final int FIREMAKING = 733; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index fa9430c7a..162635773 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -159,6 +159,7 @@ public void onAnimationChanged(AnimationChanged event) case WOODCUTTING_2H_RUNE: case WOODCUTTING_2H_DRAGON: case WOODCUTTING_2H_CRYSTAL: + case WOODCUTTING_2H_CRYSTAL_INACTIVE: case WOODCUTTING_2H_3A: case BLISTERWOOD_JUMP_SCARE: /* Firemaking */ From 352145fb2bab44141fd99613cc30a0e449e7819a Mon Sep 17 00:00:00 2001 From: YvesW <7929021+YvesW@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:46:57 +0100 Subject: [PATCH 19/35] wintertodt: add crystal felling axe (inactive) animation --- .../runelite/client/plugins/wintertodt/WintertodtPlugin.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index 31caeb9e4..2636d057c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -44,6 +44,7 @@ import static net.runelite.api.AnimationID.WOODCUTTING_2H_BLACK; import static net.runelite.api.AnimationID.WOODCUTTING_2H_BRONZE; import static net.runelite.api.AnimationID.WOODCUTTING_2H_CRYSTAL; +import static net.runelite.api.AnimationID.WOODCUTTING_2H_CRYSTAL_INACTIVE; import static net.runelite.api.AnimationID.WOODCUTTING_2H_DRAGON; import static net.runelite.api.AnimationID.WOODCUTTING_2H_IRON; import static net.runelite.api.AnimationID.WOODCUTTING_2H_MITHRIL; @@ -444,6 +445,7 @@ public void onAnimationChanged(final AnimationChanged event) case WOODCUTTING_2H_RUNE: case WOODCUTTING_2H_DRAGON: case WOODCUTTING_2H_CRYSTAL: + case WOODCUTTING_2H_CRYSTAL_INACTIVE: case WOODCUTTING_2H_3A: setActivity(WintertodtActivity.WOODCUTTING); break; From e18502f7efff5e0c2bb94abfba14f9c4945c7ae7 Mon Sep 17 00:00:00 2001 From: YvesW <7929021+YvesW@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:47:44 +0100 Subject: [PATCH 20/35] woodcutting: add crystal felling axe (inactive) animation --- .../runelite/client/plugins/woodcutting/WoodcuttingPlugin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index b7ddfdfc2..d9e6f394f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -46,6 +46,7 @@ import static net.runelite.api.AnimationID.WOODCUTTING_2H_BLACK; import static net.runelite.api.AnimationID.WOODCUTTING_2H_BRONZE; import static net.runelite.api.AnimationID.WOODCUTTING_2H_CRYSTAL; +import static net.runelite.api.AnimationID.WOODCUTTING_2H_CRYSTAL_INACTIVE; import static net.runelite.api.AnimationID.WOODCUTTING_2H_DRAGON; import static net.runelite.api.AnimationID.WOODCUTTING_2H_IRON; import static net.runelite.api.AnimationID.WOODCUTTING_2H_MITHRIL; @@ -110,7 +111,7 @@ public class WoodcuttingPlugin extends Plugin WOODCUTTING_INFERNAL, WOODCUTTING_3A_AXE, WOODCUTTING_CRYSTAL, WOODCUTTING_TRAILBLAZER, WOODCUTTING_2H_BRONZE, WOODCUTTING_2H_IRON, WOODCUTTING_2H_STEEL, WOODCUTTING_2H_BLACK, WOODCUTTING_2H_MITHRIL, WOODCUTTING_2H_ADAMANT, WOODCUTTING_2H_RUNE, WOODCUTTING_2H_DRAGON, - WOODCUTTING_2H_CRYSTAL, WOODCUTTING_2H_3A + WOODCUTTING_2H_CRYSTAL, WOODCUTTING_2H_CRYSTAL_INACTIVE, WOODCUTTING_2H_3A ); private static final Pattern WOOD_CUT_PATTERN = Pattern.compile("You get (?:some|an)[\\w ]+(?:logs?|mushrooms)\\."); From 9caf15eebc1af9bdf2625cde03c48669e808e8b2 Mon Sep 17 00:00:00 2001 From: Felanbird <41973452+Felanbird@users.noreply.github.com> Date: Thu, 1 Feb 2024 23:25:20 -0500 Subject: [PATCH 21/35] achievement diary: update various tasks --- .../achievementdiary/diaries/FremennikDiaryRequirement.java | 4 ++-- .../achievementdiary/diaries/KandarinDiaryRequirement.java | 2 +- .../achievementdiary/diaries/WesternDiaryRequirement.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java index dfd2fde23..f4d84ef3a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/FremennikDiaryRequirement.java @@ -106,12 +106,12 @@ public FremennikDiaryRequirement() add("Teleport to Waterbirth Island.", new SkillRequirement(Skill.MAGIC, 72), new QuestRequirement(Quest.LUNAR_DIPLOMACY)); - add("Obtain the Blast Furnace Foreman's permission to use the Blast Furnace for free.", + add("Obtain the Blast Furnace Foremans permission to use the Blast Furnace for free.", new SkillRequirement(Skill.SMITHING, 60), new QuestRequirement(Quest.THE_GIANT_DWARF, true)); // ELITE - add("Craft 56 astral runes simultaneously from Essence without the use of Extracts.", + add("Craft 56 astral runes from Essence simultaneously from Essence without the use of Extracts.", new SkillRequirement(Skill.RUNECRAFT, 82), new QuestRequirement(Quest.LUNAR_DIPLOMACY)); add("Create a dragonstone amulet in the Neitiznot furnace.", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java index 36c19a8e1..58e6ebab0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KandarinDiaryRequirement.java @@ -120,7 +120,7 @@ public KandarinDiaryRequirement() new SkillRequirement(Skill.AGILITY, 60)); add("Smith a Rune Hasta at Otto's Grotto.", new SkillRequirement(Skill.SMITHING, 90)); - add("Construct a Pyre ship from Magic Logs.(Requires Chewed Bones.)", + add("Construct a Pyre ship from Magic Logs.", new SkillRequirement(Skill.FIREMAKING, 85), new SkillRequirement(Skill.CRAFTING, 85)); add("Teleport to Catherby.", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java index e462b421f..0faf5d8b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/WesternDiaryRequirement.java @@ -128,7 +128,7 @@ public WesternDiaryRequirement() add("Fletch a Magic Longbow in Tirannwn.", new SkillRequirement(Skill.FLETCHING, 85), new QuestRequirement(Quest.MOURNINGS_END_PART_I)); - add("Kill the Thermonuclear Smoke devil (Does not require task).", + add("Kill the Thermonuclear Smoke devil.", new SkillRequirement(Skill.SLAYER, 93)); add("Have Prissy Scilla protect your Magic tree.", new SkillRequirement(Skill.FARMING, 75)); From 46e90c96156e518ac999bd6b4685cf1926361f5f Mon Sep 17 00:00:00 2001 From: sonnypb Date: Mon, 5 Feb 2024 23:34:08 +0000 Subject: [PATCH 22/35] timers: add Spellbook Swap timer --- .../src/main/java/net/runelite/api/Varbits.java | 8 ++++++++ .../runelite/client/plugins/timers/GameTimer.java | 1 + .../runelite/client/plugins/timers/TimersConfig.java | 10 ++++++++++ .../runelite/client/plugins/timers/TimersPlugin.java | 12 ++++++++++++ 4 files changed, 31 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 58f890bac..f538fd62e 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -878,4 +878,12 @@ public final class Varbits * This varbit determines which location he will appear in, which is useful for a master clue step. */ public static final int VIGGORA_LOCATION = 815; + + /** + * If the player has a spellbook swap active + *

+ * 0 = inactive + * 1 = active + */ + public static final int SPELLBOOK_SWAP = 3617; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java index 48ff001c5..afac7d7b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java @@ -96,6 +96,7 @@ enum GameTimer LIQUID_ADRENALINE(ItemID.LIQUID_ADRENALINE_2, GameTimerImageType.ITEM, "Liquid adrenaline", 150, ChronoUnit.SECONDS, false), SILK_DRESSING(ItemID.SILK_DRESSING_2, GameTimerImageType.ITEM, "Silk dressing", 100, GAME_TICKS, true), BLESSED_CRYSTAL_SCARAB(ItemID.BLESSED_CRYSTAL_SCARAB_2, GameTimerImageType.ITEM, "Blessed crystal scarab", 40, GAME_TICKS, true), + SPELLBOOK_SWAP(SpriteID.SPELL_SPELLBOOK_SWAP, GameTimerImageType.SPRITE, "Spellbook Reset", 120, ChronoUnit.SECONDS, false), ; @Nullable diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java index 13c24c126..daf383090 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java @@ -353,4 +353,14 @@ default boolean showFarmersAffinity() { return true; } + + @ConfigItem( + keyName = "showSpellbookSwap", + name = "Spellbook Swap timer", + description = "Configures whether Spellbook Swap timer is displayed" + ) + default boolean showSpellbookSwap() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index debb79369..4394f1487 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -209,6 +209,18 @@ public void onVarbitChanged(VarbitChanged event) } } + if (event.getVarbitId() == Varbits.SPELLBOOK_SWAP && config.showSpellbookSwap()) + { + if (event.getValue() == 1) + { + createGameTimer(SPELLBOOK_SWAP); + } + else + { + removeGameTimer(SPELLBOOK_SWAP); + } + } + if (event.getVarbitId() == Varbits.HEAL_GROUP_COOLDOWN && config.showHealGroup()) { if (event.getValue() == 1) From 6137e1a57bd832528ccd83391f7c700ce5bf96d9 Mon Sep 17 00:00:00 2001 From: YvesW <7929021+YvesW@users.noreply.github.com> Date: Thu, 18 Jan 2024 02:26:28 +0100 Subject: [PATCH 23/35] chat commands: fix theatre of blood: entry mode Previously the branch was unreachable: the label contained uppercase symbols while the selector is lowercase-only (boss.toLowerCase()) --- .../client/plugins/chatcommands/ChatCommandsPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index d97eca907..f96150cad 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -2161,7 +2161,7 @@ private static String longBossName(String boss) case "tob sm": case "tob story mode": case "tob story": - case "Theatre of Blood: Entry Mode": + case "theatre of blood: entry mode": case "tob em": case "tob entry mode": case "tob entry": From c3e6b94e066d745cba07b97e9708d5fcdcfcdcc5 Mon Sep 17 00:00:00 2001 From: timleafy <89559863+timleafy@users.noreply.github.com> Date: Tue, 6 Feb 2024 18:48:29 -0600 Subject: [PATCH 24/35] worldmap: add mining guild west amethyst --- .../runelite/client/plugins/worldmap/MiningSiteLocation.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java index 111fb32e7..6ec471ab7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MiningSiteLocation.java @@ -162,6 +162,8 @@ enum MiningSiteLocation MINING_GUILD_SOUTH(new WorldPoint(3032, 9720, 0), new Rock(8, Ore.IRON), new Rock(20, Ore.COAL), new Rock(10, Ore.MITHRIL), new Rock(8, Ore.ADAMANTITE), new Rock(2, Ore.RUNITE)), + MINING_GUILD_WEST(new WorldPoint(3006, 9711, 0), + new Rock(36, Ore.AMETHYST)), MISCELLANIA(new WorldPoint(2526, 3891, 0), new Rock(9, Ore.COAL)), MISCELLANIA_DUNGEON(new WorldPoint(2504, 10287, 0), new Rock(4, Ore.COAL)), MOR_UL_REK_NORTH(new WorldPoint(2458, 5167, 0), new Rock(3, Ore.SILVER), new Rock(3, Ore.GOLD)), From 79ae5fdb2bdc6fe126c950d0f3f3041743e177b7 Mon Sep 17 00:00:00 2001 From: smol-tako Date: Thu, 4 Jan 2024 15:39:50 -0500 Subject: [PATCH 25/35] chat history: fix Copy to clipboard for friend dms Previously the menu at length-2 would not always have a component in param1, like if it was the Lookup option from the hiscore plugin. Refactor the code to add the menu from onMenuEntryAdded, checking for the chatbox component, which avoids this problem entirely. --- .../chathistory/ChatHistoryPlugin.java | 148 ++++++++---------- 1 file changed, 67 insertions(+), 81 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java index 65202be16..740b3a6b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java @@ -47,7 +47,6 @@ import net.runelite.api.VarClientStr; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.MenuEntryAdded; -import net.runelite.api.events.MenuOpened; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.vars.InputType; import net.runelite.api.widgets.ComponentID; @@ -76,6 +75,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener private static final String WELCOME_MESSAGE = "Welcome to Old School RuneScape"; private static final String CLEAR_HISTORY = "Clear history"; private static final String COPY_TO_CLIPBOARD = "Copy to clipboard"; + private static final String REPORT = "Report"; private static final int CYCLE_HOTKEY = KeyEvent.VK_TAB; private static final int FRIENDS_MAX_SIZE = 5; @@ -180,71 +180,6 @@ public void onChatMessage(ChatMessage chatMessage) } } - @Subscribe - public void onMenuOpened(MenuOpened event) - { - if (event.getMenuEntries().length < 2 || !config.copyToClipboard()) - { - return; - } - - // Use second entry as first one can be walk here with transparent chatbox - final MenuEntry entry = event.getMenuEntries()[event.getMenuEntries().length - 2]; - - if (entry.getType() != MenuAction.CC_OP_LOW_PRIORITY && entry.getType() != MenuAction.RUNELITE) - { - return; - } - - final int groupId = WidgetUtil.componentToInterface(entry.getParam1()); - final int childId = WidgetUtil.componentToId(entry.getParam1()); - - if (groupId != InterfaceID.CHATBOX) - { - return; - } - - final Widget widget = client.getWidget(groupId, childId); - final Widget parent = widget.getParent(); - - if (ComponentID.CHATBOX_MESSAGE_LINES != parent.getId()) - { - return; - } - - // Get child id of first chat message static child so we can substract this offset to link to dynamic child - // later - final int first = WidgetUtil.componentToId(ComponentID.CHATBOX_FIRST_MESSAGE); - - // Convert current message static widget id to dynamic widget id of message node with message contents - // When message is right clicked, we are actually right clicking static widget that contains only sender. - // The actual message contents are stored in dynamic widgets that follow same order as static widgets. - // Every first dynamic widget is message sender, every second one is message contents, - // every third one is clan name and every fourth one is clan rank icon. - // The last two are hidden when the message is not from a clan chat or guest clan chat. - final int dynamicChildId = (childId - first) * 4 + 1; - - // Extract and store message contents when menu is opened because dynamic children can change while right click - // menu is open and dynamicChildId will be outdated - final Widget messageContents = parent.getChild(dynamicChildId); - if (messageContents == null) - { - return; - } - - String currentMessage = messageContents.getText(); - - client.createMenuEntry(1) - .setOption(COPY_TO_CLIPBOARD) - .setTarget(entry.getTarget()) - .setType(MenuAction.RUNELITE) - .onClick(e -> - { - final StringSelection stringSelection = new StringSelection(Text.removeTags(currentMessage)); - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null); - }); - } - @Subscribe public void onMenuOptionClicked(MenuOptionClicked event) { @@ -260,35 +195,86 @@ public void onMenuOptionClicked(MenuOptionClicked event) @Subscribe public void onMenuEntryAdded(MenuEntryAdded entry) { - if (entry.getType() != MenuAction.CC_OP.getId()) + if (entry.getType() != MenuAction.CC_OP.getId() && entry.getType() != MenuAction.CC_OP_LOW_PRIORITY.getId()) { return; } ChatboxTab tab = ChatboxTab.of(entry.getActionParam1()); - if (tab == null || tab.getAfter() == null || !config.clearHistory() || !entry.getOption().endsWith(tab.getAfter())) + if (tab != null && tab.getAfter() != null && config.clearHistory() && entry.getOption().endsWith(tab.getAfter())) { + final MenuEntry clearEntry = client.createMenuEntry(-2) + .setType(MenuAction.RUNELITE_HIGH_PRIORITY); + clearEntry.setParam1(entry.getActionParam1()); + + final StringBuilder optionBuilder = new StringBuilder(); + if (tab != ChatboxTab.ALL) + { + // Pull tab name from menu since Trade/Group is variable + String option = entry.getOption(); + int idx = option.indexOf(':'); + if (idx != -1) + { + optionBuilder.append(option, 0, idx).append(": "); + } + } + + optionBuilder.append(CLEAR_HISTORY); + clearEntry.setOption(optionBuilder.toString()); return; } - final MenuEntry clearEntry = client.createMenuEntry(-2) - .setType(MenuAction.RUNELITE_HIGH_PRIORITY); - clearEntry.setParam1(entry.getActionParam1()); - - final StringBuilder optionBuilder = new StringBuilder(); - if (tab != ChatboxTab.ALL) + if (entry.getOption().equals(REPORT) && config.copyToClipboard()) { - // Pull tab name from menu since Trade/Group is variable - String option = entry.getOption(); - int idx = option.indexOf(':'); - if (idx != -1) + final int groupId = WidgetUtil.componentToInterface(entry.getActionParam1()); + final int childId = WidgetUtil.componentToId(entry.getActionParam1()); + + if (groupId != InterfaceID.CHATBOX) { - optionBuilder.append(option, 0, idx).append(": "); + return; } + + final Widget widget = client.getWidget(groupId, childId); + final Widget parent = widget.getParent(); + + if (ComponentID.CHATBOX_MESSAGE_LINES != parent.getId()) + { + return; + } + + // Get child id of first chat message static child so we can substract this offset to link to dynamic child + // later + final int first = WidgetUtil.componentToId(ComponentID.CHATBOX_FIRST_MESSAGE); + + // Convert current message static widget id to dynamic widget id of message node with message contents + // When message is right clicked, we are actually right clicking static widget that contains only sender. + // The actual message contents are stored in dynamic widgets that follow same order as static widgets. + // Every first dynamic widget is message sender, every second one is message contents, + // every third one is clan name and every fourth one is clan rank icon. + // The last two are hidden when the message is not from a clan chat or guest clan chat. + final int dynamicChildId = (childId - first) * 4 + 1; + + // Extract and store message contents when menu is opened because dynamic children can change while right click + // menu is open and dynamicChildId will be outdated + final Widget messageContents = parent.getChild(dynamicChildId); + if (messageContents == null) + { + return; + } + + String currentMessage = messageContents.getText(); + + client.createMenuEntry(1) + .setOption(COPY_TO_CLIPBOARD) + .setTarget(entry.getTarget()) + .setType(MenuAction.RUNELITE) + .onClick(e -> + { + final StringSelection stringSelection = new StringSelection(Text.removeTags(currentMessage)); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null); + }); } - optionBuilder.append(CLEAR_HISTORY); - clearEntry.setOption(optionBuilder.toString()); } private void clearMessageQueue(ChatboxTab tab) From 993a260a8bf8889fa181fab35e222d700d093faf Mon Sep 17 00:00:00 2001 From: PhraZier <41238012+PhraZier@users.noreply.github.com> Date: Wed, 7 Feb 2024 05:55:19 +0100 Subject: [PATCH 26/35] bank: support group storage with search hotkey --- .../src/main/interfaces/interfaces.toml | 1 + .../client/plugins/bank/BankPlugin.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/runelite-api/src/main/interfaces/interfaces.toml b/runelite-api/src/main/interfaces/interfaces.toml index c16d0d9d7..b4e53cf21 100644 --- a/runelite-api/src/main/interfaces/interfaces.toml +++ b/runelite-api/src/main/interfaces/interfaces.toml @@ -416,6 +416,7 @@ id=726 id=724 ui=2 item_container=10 +search_button=16 [group_storage_inventory] id=725 diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index b241eaf26..e84bc0041 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -2,6 +2,7 @@ * Copyright (c) 2018, TheLonelyDev * Copyright (c) 2018, Jeremy Plsek * Copyright (c) 2019, Hydrox6 + * Copyright (c) 2024, PhraZier * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -132,6 +133,33 @@ public void keyPressed(KeyEvent e) e.consume(); } + Widget groupStorageSearchButton = client.getWidget(ComponentID.GROUP_STORAGE_SEARCH_BUTTON); + if (groupStorageSearchButton != null) + { + log.debug("Search hotkey pressed"); + clientThread.invoke(() -> + { + Widget searchButton = client.getWidget(ComponentID.GROUP_STORAGE_SEARCH_BUTTON); + if (searchButton == null || searchButton.isHidden()) + { + return; + } + + Object[] searchToggleArgs = searchButton.getOnOpListener(); + if (searchToggleArgs == null) + { + return; + } + + searchToggleArgs = searchToggleArgs.clone(); + // this calls [clientscript,shared_bank_search_toggle] + // the first argument is event_op and we need to spoof op1 + searchToggleArgs[1] = 1; + client.runScript(searchToggleArgs); + }); + e.consume(); + } + Widget seedVaultSearchButton = client.getWidget(ComponentID.SEED_VAULT_SEARCH_BUTTON); if (seedVaultSearchButton != null) { From 6067ae0ec3a2d9363e29d3fa738de8a4b5837cde Mon Sep 17 00:00:00 2001 From: Christopher Michael Mescher Date: Fri, 12 Jan 2024 11:48:07 -0500 Subject: [PATCH 27/35] world map: Add capes of achievement teleports --- .../worldmap/TeleportLocationData.java | 37 +++++++++++++++++- .../worldmap/achievement_cape_icon.png | Bin 0 -> 4668 bytes .../worldmap/construction_cape_icon.png | Bin 0 -> 4673 bytes .../plugins/worldmap/crafting_cape_icon.png | Bin 0 -> 4662 bytes .../plugins/worldmap/farming_cape_icon.png | Bin 0 -> 4666 bytes .../plugins/worldmap/fishing_cape_icon.png | Bin 0 -> 4445 bytes .../plugins/worldmap/hunter_cape_icon.png | Bin 0 -> 4429 bytes .../plugins/worldmap/music_cape_icon.png | Bin 0 -> 4441 bytes .../plugins/worldmap/quest_cape_icon.png | Bin 0 -> 4446 bytes .../plugins/worldmap/strength_cape_icon.png | Bin 0 -> 4435 bytes 10 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/achievement_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/construction_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/crafting_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/farming_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fishing_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/hunter_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/music_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_cape_icon.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/strength_cape_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 4212cbcc1..9b84392d0 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 @@ -197,7 +197,42 @@ enum TeleportLocationData ZULANDRA_SCROLL(TeleportType.SCROLL, "Zul-Andra Teleport", new WorldPoint(2197, 3056, 0), "scroll_teleport_icon.png"), KEY_MASTER_SCROLL(TeleportType.SCROLL, "Key Master Teleport", new WorldPoint(2686, 9882, 0), "scroll_teleport_icon.png"), REVENANT_CAVE_SCROLL(TeleportType.SCROLL, "Revenant Cave Teleport", new WorldPoint(3127, 3833, 0), "scroll_teleport_icon.png"), - WATSON_SCROLL(TeleportType.SCROLL, "Watson Teleport", new WorldPoint(1645, 3579, 0), "scroll_teleport_icon.png"); + WATSON_SCROLL(TeleportType.SCROLL, "Watson Teleport", new WorldPoint(1645, 3579, 0), "scroll_teleport_icon.png"), + + // Skillcapes + ACHIEVEMENT_CAPE_TWO_PINTS(TeleportType.OTHER, "Achievement Cape", "Two-pints", new WorldPoint(2574, 3324, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_JARR(TeleportType.OTHER, "Achievement Cape", "Jarr", new WorldPoint(3300, 3121, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_SIR_REBRAL(TeleportType.OTHER, "Achievement Cape", "Sir Rebral", new WorldPoint(2977, 3345, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_THORODIN(TeleportType.OTHER, "Achievement Cape", "Thorodin", new WorldPoint(2659, 3627, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_FLAX_KEEPER(TeleportType.OTHER, "Achievement Cape", "Flax Keeper", new WorldPoint(2744, 3444, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_JACKIE_THE_FRUIT(TeleportType.OTHER, "Achievement Cape", "Pirate Jackie the Fruit", new WorldPoint(2810, 3191, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_KALEB_PARAMAYA(TeleportType.OTHER, "Achievement Cape", "Kaleb Paramaya", new WorldPoint(2861, 2995, 1), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_JUNGLE_FORESTER(TeleportType.OTHER, "Achievement Cape", "Jungle forester", new WorldPoint(2795, 2945, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_TZHAAR_MEJ(TeleportType.OTHER, "Achievement Cape", "TzHaar-Mej", new WorldPoint(2455, 5133, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_ELISE(TeleportType.OTHER, "Achievement Cape", "Elise", new WorldPoint(1647, 3666, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_HATIUS_COSAINTUS(TeleportType.OTHER, "Achievement Cape", "Hatius Cosaintus", new WorldPoint(3239, 3220, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_LE_SABRE(TeleportType.OTHER, "Achievement Cape", "Le-sabrè", new WorldPoint(3465, 3477, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_TOBY(TeleportType.OTHER, "Achievement Cape", "Toby", new WorldPoint(3224, 3414, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_LESSER_FANATIC(TeleportType.OTHER, "Achievement Cape", "Lesser Fanatic", new WorldPoint(3122, 3516, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_ELDER_GNOME_CHILD(TeleportType.OTHER, "Achievement Cape", "Elder Gnome child", new WorldPoint(2467, 3459, 0), "achievement_cape_icon.png"), + ACHIEVEMENT_CAPE_TWIGGY_OKORN(TeleportType.OTHER, "Achievement Cape", "Twiggy O'Korn", new WorldPoint(3097, 3226, 0), "achievement_cape_icon.png"), + CONSTRUCTION_CAPE_RIMMINGTON(TeleportType.OTHER, "Construction Cape", "Rimmington", new WorldPoint(2954, 3224, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_TAVERLEY(TeleportType.OTHER, "Construction Cape", "Taverley", new WorldPoint(2894, 3465, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_POLLNIVNEACH(TeleportType.OTHER, "Construction Cape", "Pollnivneach", new WorldPoint(3340, 3004, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_HOSIDIUS(TeleportType.OTHER, "Construction Cape", "Hosidius", new WorldPoint(1744, 3517, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_RELLEKKA(TeleportType.OTHER, "Construction Cape", "Rellekka", new WorldPoint(2670, 3632, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_BRIMHAVEN(TeleportType.OTHER, "Construction Cape", "Brimhaven", new WorldPoint(2758, 3178, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_YANILLE(TeleportType.OTHER, "Construction Cape", "Yanille", new WorldPoint(2544, 3095, 0), "construction_cape_icon.png"), + CONSTRUCTION_CAPE_PRIFDDINAS(TeleportType.OTHER, "Construction Cape", "Prifddinas", new WorldPoint(3239, 6076, 0), "construction_cape_icon.png"), + CRAFTING_CAPE(TeleportType.OTHER, "Crafting Cape", new WorldPoint(2931, 3286, 0), "crafting_cape_icon.png"), + FARMING_CAPE(TeleportType.OTHER, "Farming Cape", new WorldPoint(1248, 3725, 0), "farming_cape_icon.png"), + FISHING_CAPE_FISHING_GUILD(TeleportType.OTHER, "Fishing Cape", "Fishing Guild", new WorldPoint(2604, 3401, 0), "fishing_cape_icon.png"), + FISHING_CAPE_OTTOS_GROTTO(TeleportType.OTHER, "Fishing Cape", "Otto's Grotto", new WorldPoint(2504, 3484, 0), "fishing_cape_icon.png"), + HUNTER_CAPE_CARNIVOROUS(TeleportType.OTHER, "Hunter Cape", "Carnivorous Chinchompa Area", new WorldPoint(2556, 2916, 0), "hunter_cape_icon.png"), + HUNTER_CAPE_BLACK(TeleportType.OTHER, "Hunter Cape", "Black Chinchompa Area", new WorldPoint(3144, 3772, 0), "hunter_cape_icon.png"), + STRENGTH_CAPE(TeleportType.OTHER, "Strength Cape", new WorldPoint(2865, 3546, 0), "strength_cape_icon.png"), + QUEST_CAPE(TeleportType.OTHER, "Quest Cape", new WorldPoint(2729, 3348, 0), "quest_cape_icon.png"), + MUSIC_CAPE(TeleportType.OTHER, "Music Cape", "Falo the Bard", new WorldPoint(2689, 3547, 0), "music_cape_icon.png"); private final TeleportType type; private final String tooltip; diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/achievement_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/achievement_cape_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e503b0b45df87967695881ce7064c8c0e1e9901c GIT binary patch literal 4668 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 literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/crafting_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/crafting_cape_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bab9fb384d4e5f5cf8c8e0665e6852003ea0f30a GIT binary patch literal 4662 zcmeHKeNa@_6@M!Vh$tEb(X{F7QVG<)eINVv-YcsSmdHkztgy8hiE{V7`<55j4|gB3 z=oqR5BZ)?B)ITCMX<{5Fel(3XLp1dZM>EzMN2k(Gr()-G}a z>~DHyFd`kP{Knld#Mi2pl=wU)C1f-fQPg@&5Q+9RTU}+HzGChyPh~`_kOnOIvn#@EHfkr8Vd5n`F6gMC`~|_d(W%LoF}9`uw)U z@`~CiAGMzSlJDNtx%#fD__b5EeX}Rk9trJvaXhR9(R-nwvSq9vhRcJSR(pIzcv-1dIk!`>t0t-P-6%~$#9 zPv#_)KcC(IvtIl}mT+QFB9?705cV&H@c05>@y(h4& zqQImb=P#Viy?AJX?b8=})_lhQaVq&mX7!Cw^Y2XOpZ?{tNZr=Fn&^Wa9pSoj4@KWe z$(%dmt-_-fTXy&gi0aa!za8M1q z%-u(in@Lr6nSXBgGTvwju2suc#c<`Sa=)~yP7-AE+&LLV2@wE7SVLqYR3DCu376Tx z6+zb3w3#$av^tl$3JR$t62qj;VzV$*X+mAendfAXMKM_sE8LIvLBNyCT&rnOk)|6P z8!e4iOC%PgSwRqJhNC%-0t+hM6xL9J3di$wh$My^$EBDW)znCs)G<*Y(xAD_W>_ct z;|oQ--U0Y&d>)sXvoM1iUp>+kaB!Iys^Nyj;DTQb;YtnZY_d+q&Nv09l@S~c-a5p4 zF^1V4S?bGuC7s3=sHTk7)cjTbbcUETZ+c*q_uQ z`oGeiG#JuHftsWa`ZKh9dZ6F;aR%|;&re^u-OnvZa&(gs@jFV_C|x6BU_{2F)ip}j zh!_}=@o07Z-{{I1d}G96_(!i1-UokBeDVOiOQr@E%y%1al|*mJ(PogwN6VJP31Y%j zeVB-s+H*mfrg^-jY1d7eQ?efVVXAjOsJcDwdH#a;CHX`~?l;nN_kyQ=t=`LD-}{m| zEQ%t^J+)!~lqWCm7U}ix?g>?8uFXC1%!0hk!_&^NFi!SPZkRlsV?Qv>>iw!<{VOT? z)o;J``%QAyVfXmX?DyV2RCD?Ci4#QE-dD*#L_awx?YBs$USCwPDAjThG#C9nJJ)W$ zJFyecJNOAl&PYd_xxE{f2d_U7{S|sFlGS<48=rA4@HzX{1IsRK>3ZfVYjqF(;Xg8G z=P&M@wdYR$Yqh68{Op^JZ;qY3_3Crx8Pnrg`|_)*C3p6DV#cwjI-ZZ3+6y<{4E<>F jruParKB4ZsQ$3FGEtg+jaO>K6oh(mjx%*&o&AR^pq)ayK literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/farming_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/farming_cape_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8c34e5b8070451c930b7726a5e8c4823f544b9 GIT binary patch literal 4666 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 CfcuRA literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/hunter_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/hunter_cape_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8490a1cfb77fede37df9da7a454dbcbf0370ed2e GIT binary patch literal 4429 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 QHL`B*?0nZtSrv`{0c-dKwEzGB literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/strength_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/strength_cape_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa693f651b8468d39666926a10ecb87936d890e GIT binary patch literal 4435 zcmeHKYj6|S6<%Sm6=TB?up!Vg8#xUIvf7uPTMJ`L3RXd&$__ORP_OnO?a0y!?b?=M z90INl4v;{2ObZT88j@j5oR*SK&7*Y!Ox$NTILF6NG-c){MFE_nQOzzXjcULak5q z`4%BYcmSkfGGfp$&a$k$#!aA3!NHNtkIH_!E?cAxMU#P?BN@2V*5+ zeZz~R5ot^>iv4FHzBbA24*1+|G?A1=sa`;kRA$EV#nU3EVz2IffIReM(Wdn?mKt-mvz6ija)EE*=L45r z4b@k?%?CDr^rK5ZxrXIV_WaR7uQ-%yO^Ls=IRpNwK61=n zSDX@m|MrnjI?kOB9dF$~P5ef6$>B$zJ$i8EaOD8Ef2cUz9pt(<-JRWj_iz2wWoehG z!~0mpR^t@wzHe{YReGCQSbR}E{Fgh=^*q(FHveRQ-Jfcg7R}`^PyZsXHykZ`HMBlh zYEXL}@AS=i@5EHgt!IZ?K6PA}iGE(N_C{>;&kb)s_56A{x~HTrF|Vg59_^o>IGIyW z{?N}Bo(}Fl5GX|k!+-TV>#i4He{$&B0MmCPXZK5MUWq^5>aIIe^@m$a2LF7!^MhVj z_wYZFw|bJlwzpi(gCtBzHMMH3e+9$IF*D1{A;FxACA1Sm%F0s-mWv818WO@%++`X( z-D^T6-evlZ)lc{nZXqI7ZA=Q)8&}qF8>5_)HzAoI7^7K*+>Ux)v0)nd0bA$SU658#)btv z5fAGVn&3=Dz~?eiW@2=0VOcFtfj}RJy)f>iz^ZbxMwaVcrfk{GPW$0H@vO>vSXBVh zY$2{0Da06IWr%e68l7L}C9(N`p|#6{mH{4)yh>7F{bqeAeWR*{4e6)!W4)wbB^1>! z1;cXbEhucGkUlKnN>6bSHXatBdSuddWL)}^RNzEfw9|wY;&;-RB?Q^TQY4Mh1i`Z* z(qgmH>GR97E3&9Iu}PsK3_5~Vke>R#D6~{RsD-*_S#(oG&`tpa!w3>1ss9uV&ukdi zYR1Tp%kclwq)Z2lDKg-f9)scqwGhu1!;EGS!B_dooW)nU1d2{9GA?~5;EQK{^;wJ5QkquP4KeR(&S^{MJqS7e3?go(B|6tpE7#j3>Dr!pK?cVF^I=ggMTW^8Q{AT6+ zp2-*9Xngs~;uBAAZ|gD6tN8SM;Sp+Tm2_`C^TE;X7tpQdH-kGOJBLb)AI95Rwb(b@hDc`FY0Kwc8iC-{)&Pm32#A`q+QL zI`fy`KNc;{-FeE-J(IlmOyQ(C4Tn4z!^qmtmfhmdPWjBc>(aHQkF<2{Vur3f)EIt$ zT~6Tm7UcH8s)rAL5!3ZsZWZ8R!(r;Ev_L9UhMK?zpqOZ`*M!TGA!R t|0q^p`y|S*nN$1L-S(E~FUtS*ggtVSU)?`>{whr@pLeC_^~$=f{|2FT_pSf{ literal 0 HcmV?d00001 From 306cf1c8c557c2553e4ffb4c2cdd4e6721d00932 Mon Sep 17 00:00:00 2001 From: RuneLite Cache-Code Autoupdater Date: Wed, 7 Feb 2024 12:02:13 +0000 Subject: [PATCH 28/35] Update Object IDs to 2024-02-07-rev219 --- .../src/main/java/net/runelite/api/NullObjectID.java | 9 +++++++++ .../src/main/java/net/runelite/api/ObjectID.java | 1 + 2 files changed, 10 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java index 7ff68e3c3..503eb7fef 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java @@ -25428,6 +25428,15 @@ public final class NullObjectID public static final int NULL_50016 = 50016; public static final int NULL_50017 = 50017; public static final int NULL_50018 = 50018; + public static final int NULL_50020 = 50020; + public static final int NULL_50021 = 50021; + public static final int NULL_50022 = 50022; + public static final int NULL_50023 = 50023; + public static final int NULL_50024 = 50024; + public static final int NULL_50025 = 50025; + public static final int NULL_50026 = 50026; + public static final int NULL_50027 = 50027; + public static final int NULL_50028 = 50028; public static final int NULL_50038 = 50038; public static final int NULL_50039 = 50039; public static final int NULL_50040 = 50040; diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java index 0da74ccee..d1b86e323 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java @@ -24574,6 +24574,7 @@ public final class ObjectID public static final int ROOTS_50007 = 50007; public static final int ROOTS_50008 = 50008; public static final int ROOTS_50009 = 50009; + public static final int BIG_EGG_50019 = 50019; public static final int TREE_50034 = 50034; public static final int TREE_STUMP_50035 = 50035; public static final int SNOW_SHARK = 50036; From 11c4157b93ef5298c1f24154cb8e4b78373306de Mon Sep 17 00:00:00 2001 From: RuneLite Cache-Code Autoupdater Date: Wed, 7 Feb 2024 12:02:13 +0000 Subject: [PATCH 29/35] Update NPC IDs to 2024-02-07-rev219 --- runelite-api/src/main/java/net/runelite/api/NpcID.java | 2 ++ runelite-api/src/main/java/net/runelite/api/NullNpcID.java | 1 + 2 files changed, 3 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java index 0359fca13..a91736186 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -10571,6 +10571,8 @@ public final class NpcID public static final int BARBARIAN_BARTENDER = 12603; public static final int WAITRESS = 12604; public static final int GOOSE_12605 = 12605; + public static final int LAVA_DRAGON_12607 = 12607; + public static final int LAVA_DRAGON_12608 = 12608; public static final int TRADER_STAN_12630 = 12630; public static final int TRADER_STAN_12631 = 12631; public static final int TRADER_CREWMEMBER_12632 = 12632; diff --git a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java index e1455574f..88b9e1dd4 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java @@ -2017,5 +2017,6 @@ public final class NullNpcID public static final int NULL_12595 = 12595; public static final int NULL_12596 = 12596; public static final int NULL_12606 = 12606; + public static final int NULL_12609 = 12609; /* This file is automatically generated. Do not edit. */ } From 9a0d54ce17a6738f81c9973f39599b8f76f1ab3d Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 7 Feb 2024 14:00:25 -0500 Subject: [PATCH 30/35] Revert "api: add widget createStaticChild" This reverts commit 448440aae150476dd86396ccb6a971c013d0fc2f. --- .../src/main/java/net/runelite/api/widgets/Widget.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java index 016b47787..80e6a9a8b 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java @@ -621,13 +621,6 @@ Widget setSize(int width, int height, @Nullable String[] getActions(); - /** - * Create a static widget child - * @param type the {@link WidgetType} of the widget - * @return - */ - Widget createStaticChild(@MagicConstant(valuesFromClass = WidgetType.class) int type); - /** * Creates a dynamic widget child * From 7d46ab45d3f0c92349bd82496ef53501bf9aec21 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 7 Feb 2024 14:04:06 -0500 Subject: [PATCH 31/35] worldmap: strip pngs --- .../plugins/worldmap/achievement_cape_icon.png | Bin 4668 -> 201 bytes .../worldmap/construction_cape_icon.png | Bin 4673 -> 212 bytes .../plugins/worldmap/crafting_cape_icon.png | Bin 4662 -> 212 bytes .../drakans_medallion_teleport_icon.png | Bin 6890 -> 206 bytes .../plugins/worldmap/farming_cape_icon.png | Bin 4666 -> 208 bytes .../plugins/worldmap/fishing_cape_icon.png | Bin 4445 -> 206 bytes .../plugins/worldmap/hunter_cape_icon.png | Bin 4429 -> 204 bytes .../plugins/worldmap/music_cape_icon.png | Bin 4441 -> 206 bytes .../worldmap/mythical_cape_teleport_icon.png | Bin 491 -> 454 bytes .../plugins/worldmap/quest_cape_icon.png | Bin 4446 -> 209 bytes .../plugins/worldmap/quest_highlight_icon.png | Bin 2485 -> 228 bytes .../plugins/worldmap/strength_cape_icon.png | Bin 4435 -> 206 bytes 12 files changed, 0 insertions(+), 0 deletions(-) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/achievement_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/achievement_cape_icon.png index e503b0b45df87967695881ce7064c8c0e1e9901c..ac988311dc3d815efbcff62fda0d523bbd78e0da 100644 GIT binary patch delta 185 zcmdm^a*}a^L_G^L0|Ud!A03rIN+Q4~#1%+0Ffi`lzn{TIwz{>3x58$@ng#p!<$RP~ zoB@(43GxeOaCmkj4akZ2ba4#fxbE9~k+(sChxIhuCEf}awgQ&JEVEuQbqQ;{zP(8P z+v`iGp9)U=JnxMR^IQo*i7$*tnl30#)tqrKs>`a)Xv<#bTTkNLSS_D!>M73M+~{ok j%=|nP^VwZLb8BDoOIh)MpL49F9ONcXS3j3^P6!PG##PkCeOfwaOh z3>fg3#Dye~0L=ssrA^9Es6!Hxjty;SA|}l6Fc~t~P0|jT&`F_`IDw{wwuGKt$**Z< zI-Zn&mgf4Nz4yD{J?FdU9&0-T%N9@5&($LcGR;@*seyjF(sYyI?}Gl_OQ3sCsPl(O5hxO3ea-q`EfjbXBJVvpOEF_3k{>{(aB)EWtIe zK2o^m*N+*iIs&C{{I%i6h4RJ=J6`Ug^snURwG|!CH}xH(d-PjAp8nL)_UC`GZCC2Y zHH|YacbxhcHMlRm{+6cdrFY1~rTLA=!Uvw8LhP+CT)%oog)ZkQrb^sHJm@R=s(-+h zto@U>bx+%+pItoiDK>eM=M&1hbZ@FXCBAQ`1`D2C;d{LEeCLDyW9S#f1BK6CqGqou zN{N3s`|@8p(|F~aS%>AF&uZ; ztv15JvZ8Gil`oQznFuE+R6uT$fQP~<2SM5`7)x0RjAU#)#&V1UqePZvDFQ~` z63!9O<3cbPB z@i4Lgq{D?cI8=x++(zRW_Z2#Sl$XTT|AkgA4_XFzIPz*K0sFVALzx>@E3C;pWgeR) z^(vvLdMRjz%Y=|%)(X7pCvat^xJD)t5}?4ak>RTmp+kLzZtSPbT z6$u2nuRv)Uq!sg!v}SALvE>V9&fGZgkGu2kzBH*1 z?cMOxg3>d&OP<@7J1za1x9ZUE=Nq?+)qB?GbV_{ zsGwkNeyHGA-@hOwB|(0{3=Yq3qyagJo-U3d9M_W*5)wp2QWzNB6jfCXygfW4Jv|vT z7A#rvX3-Lkv=zH7G@DYU9Eyo)D01>zn5mi2mStOUd`p6|g0jit8ZD366QX{tQV?hk s)YLWQSQM)p!g+)ti}|#|P1dcl3@$AK8x#!|@_?M@>FVdQ&MBb@07L#jWdHyG literal 4673 zcmeHKYj6|S6<%Sm9U&eL*m0eb(a4iv8dm$zN?L6!8(R`s0fAx*YJx+wPkC!eE2K4+ zq2PkYfSZum4KSHNNK%pv!y`=snHXqG!8BwT3XGWoolYjNPHOU~3xr8XO473{`8CZ< z$J6r9S95jG-h0k>&-w1TN7~Nd;ssNTB}N26rub{TwJ=W8dVVf^KXhsP!!TSB>;017 z{}Uu19zfGD5iw{w&9#7Ek@t6}yMUtZ;f~0q?>vq@l24{9Gsq=O3YoF!)F&SF* z`oh9h2bPvqcLX0i{Au`lUu9!o*ULS$@wG{LZAJU1TF)J2dW;)Cn6~9m`!m0OVq5z0 z+Qx#9J5GN~5A5z;`<0=3&q-?kgHs!i#$J8qE@J13!nG?4=H=&XVXLJb#BBeZuPE*(w->2_+ ztSBvAIs5Y8J9|%YZ?tcpD&1dKy8D5r_CB}xR`n%*`;DT=!CL;{+Uxghy8g`>^0K_u z(&?L9wK0E^ecK}&ww8Ut%qi+qcmMO+(>?1u8;nQJg#T7Qudqb8Jng%@_Lvtq&|>cqL|K1%(r>=~zNLF{HdQonZMUQ8ja7M2@>H z1ILbA%(CFN{L~)60|}4VDA%k>igjxihxj#3yi2fDRv63E3;@JLl{Keh(RhkUyDd5{ z1F|-aSLn3*Uq-dtBlodyPX?ZnisW6($lY+$5dgo^$;K^-iRMiB7VJ$5! z))t#pNk%Zj<#J&-iIF4<8fdCDuCi$~o+{NKG8kSl#V6&2Dl2ibhRJeDv+A~3VBI|E zUn~&_48g}!Sr&i~EX^h`!irH*G}^XQU%w zK7>0;doXrg8MFcc#;fqnntOh)+oJ8y2nsI?j4l!a#}b^4MhP2_qm(3ZDC=Y$s7Q#c z;J_u^W}`+x`Qs^-jq{=g1>ja0a7dEFZBEXCa=a*^6iM)?i*VXe)=t_eyTtK=#EpPh zl9VAU+2}~GG$;X}M2_ZY2kkcmxoM8mwzA?XwfD@D!{2Zcn+mFoJVO= za-ouob`X-*Sbj8mN|DqSHYrv`fJfj8(o_G5GMDKGHD|PTOQWcr0uYAc1WJ%0f?(_f zL(y5nusa{3L<*F{DG;cWWNDP5IS!?5E)KO31V;%ZO_2_AwA244HU zRu%^jwH*78W6vmzsG~qlW)A8zlzVKb-e)<}D(f9=*>t;uI{@_fCS&4voUU=Y#>Bvw zl*hAcoUSo3Fec^k?E1gaWgLEE6yxwmuLa%*5xjl_yi4YC3m16xw@T!e=U5v^cO`0; zrx0ZF46PfG=XMptWS;5|`11MZ&j%5JTLsgSo}Tz%iEDt!H&Si z?{0sKA7&VaEk3#BK*3{mE7<9trQb7iH_bDJPrg!+D=mpfo^>CYb#C+C_MWaz!?d!= z+kM2uS@?%<-aP-t&o?b>dmeAt5PfK}BVaO_5?kNNebf}e8hSq^ABdLB9^fP44~itM z_xC^kZaDhlAG;d=weiE7zq@FPbyOv8&b<;n{MFqO-4mP9(0$*Hirk|8ou;MB_Bwj) zhw1|Y-I6ZNf!2E>wzK%l=9$G>OFqAze7!z!YWKDadyEotcK)*`u6$Hdy6?&8?Q1_f r)m{F`p3lLv10~&c#c%aFt{yQWi{6&{7F52wS>w&`TkL(UI=u1UjJYyc diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/crafting_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/crafting_cape_icon.png index bab9fb384d4e5f5cf8c8e0665e6852003ea0f30a..4f05ec91cbf647194ab99490875fbd28b448c991 100644 GIT binary patch delta 196 zcmdm{a)oh%L_G^L0|Ud!A03rIN-@AE#1%+0Ffi`lzdz8H)7e1w=o*Ri0IP<=u*k1rCDGBlmW^j0RBMrz&^mK6y;kcfhkdPoElET2~rl_iF;O*fV>FLR! zv0%xPH;a~Vq^;Oxq1lu&EzMN2k(Gr()-G}a z>~DHyFd`kP{Knld#Mi2pl=wU)C1f-fQPg@&5Q+9RTU}+HzGChyPh~`_kOnOIvn#@EHfkr8Vd5n`F6gMC`~|_d(W%LoF}9`uw)U z@`~CiAGMzSlJDNtx%#fD__b5EeX}Rk9trJvaXhR9(R-nwvSq9vhRcJSR(pIzcv-1dIk!`>t0t-P-6%~$#9 zPv#_)KcC(IvtIl}mT+QFB9?705cV&H@c05>@y(h4& zqQImb=P#Viy?AJX?b8=})_lhQaVq&mX7!Cw^Y2XOpZ?{tNZr=Fn&^Wa9pSoj4@KWe z$(%dmt-_-fTXy&gi0aa!za8M1q z%-u(in@Lr6nSXBgGTvwju2suc#c<`Sa=)~yP7-AE+&LLV2@wE7SVLqYR3DCu376Tx z6+zb3w3#$av^tl$3JR$t62qj;VzV$*X+mAendfAXMKM_sE8LIvLBNyCT&rnOk)|6P z8!e4iOC%PgSwRqJhNC%-0t+hM6xL9J3di$wh$My^$EBDW)znCs)G<*Y(xAD_W>_ct z;|oQ--U0Y&d>)sXvoM1iUp>+kaB!Iys^Nyj;DTQb;YtnZY_d+q&Nv09l@S~c-a5p4 zF^1V4S?bGuC7s3=sHTk7)cjTbbcUETZ+c*q_uQ z`oGeiG#JuHftsWa`ZKh9dZ6F;aR%|;&re^u-OnvZa&(gs@jFV_C|x6BU_{2F)ip}j zh!_}=@o07Z-{{I1d}G96_(!i1-UokBeDVOiOQr@E%y%1al|*mJ(PogwN6VJP31Y%j zeVB-s+H*mfrg^-jY1d7eQ?efVVXAjOsJcDwdH#a;CHX`~?l;nN_kyQ=t=`LD-}{m| zEQ%t^J+)!~lqWCm7U}ix?g>?8uFXC1%!0hk!_&^NFi!SPZkRlsV?Qv>>iw!<{VOT? z)o;J``%QAyVfXmX?DyV2RCD?Ci4#QE-dD*#L_awx?YBs$USCwPDAjThG#C9nJJ)W$ zJFyecJNOAl&PYd_xxE{f2d_U7{S|sFlGS<48=rA4@HzX{1IsRK>3ZfVYjqF(;Xg8G z=P&M@wdYR$Yqh68{Op^JZ;qY3_3Crx8Pnrg`|_)*C3p6DV#cwjI-ZZ3+6y<{4E<>F jruParKB4ZsQ$3FGEtg+jaO>K6oh(mjx%*&o&AR^pq)ayK diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/drakans_medallion_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/drakans_medallion_teleport_icon.png index 0f37fb27bf319fbba3bb733643306964318697f2..ef80fb9cb171e176571d1ad9ba72e3e3d7d22784 100644 GIT binary patch delta 190 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 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/farming_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/farming_cape_icon.png index ca8c34e5b8070451c930b7726a5e8c4823f544b9..f36371b2cd12b4417316f245d1906e422e86b319 100644 GIT binary patch delta 192 zcmdm`a)EJzL_G^L0|Ud!A03rIN-n@B#1%+0Ffi`lzu(GPjX{rL)}~Y?AC=kt)uOH2 zMFj=#E#!;=$(IEA1v5B2yO9RuBzU?whHzZ>?Y+p`puod=n(Y#A1q)jN%V8FY5=O;D zCYkuCzZ>GG$LaNV^lVj0mk3CzNSMigK;5Esf|;c{o4eO#L$BQ;hbp(%&JFmrVp8E7 pWp0Trv+mo7ah&lvoBukxo_MCLOhao9u2j$!2Z%(InDH1F;QK2Iczl_HDY;B%3DN zHl+h7odVTE;iPp2Iw*<^qkszj2;c}7M;u0h!J)`_clc`*<*+B*d4Qnzc9Z@ZopCxI z|23VL_ucnC@AJOj&-=b_x}E;{b0_Ib^aMdn@>aU5aX(pYITP{seSKXI;O+#f^@?8a zbRq{oV5Dw5p;Ixq>4w?kbXi0e9$SsuE!b8uYAexA(E7h%`}T~z5!+=MjJk%_jUy)E zz6Uo3+Xc9P2{&m?dark|t$uQ}Kl?aBLk#qDy*|HzG0~LCV#DhxhUF=mrx^py@HER? zD7?S!xgn2KrajjZC$N7VlFQ}yx?F}>To$D;B8X(q@(s?)!~TMf1vQ=xFSSo~-@ybL zU!7OjxN~7yMTdXJ>)+K~JUOfWbRK>$_*#2co_JSH>6W{n+_7o?m5M&tb*U({s~YZVyLjvBi&u{_r=@kq zPS3q_R^?2vZhY{ub!8X$X+puR-w^{4AE`BlkXuGTK?aDLfXZC-8q36?s z&Rtio6Yr+t@7tGunN1LROQb-pQtPYYp&T&*K@K8QG7?iyj3}R#i~-ny6hjb&q^Q%_ zf8e0eAPG+6BCC(`#ayUfs$3RFHOuA);Ianj5R9{C>dTWnCWs&f7?P22G{GmGMva%p zwmNJ!8Z?N~;563aL~_Y-WMECKi6T8oshKg()EmmGt|2r|(cRX~!ACQ4O`G>01{U|fnRk{mUtoFFJSDNdsi&l?8( zi^P1sLHcMSqXO2$oCGm5ZKBMPhwR~Gu#op ze2{kpdLVWUj8Q%x@0MYc>Ymr_G^+daf(#{r*GwxEIIEqbNDIqYNLHX7qys_=2`yI2 z4s0|BL^zDf8%-!63Xw{M$xRaGfuhLLf)$W98$MAMA(jLVfg*!;hrmIHXc3v=6bs@K z&Pos-?v+X^*q4bTaL5=CB^kZ1ku9Cr^ zT?!t+bO;I1j0DY3%$1&k^&lETxO!yLbzofjja0BXtPn!cN+PQTl5CI#BxkiDQltQ5 zqir_IMh8c-CuC7+0dX`ZgmuJP;q=sgq6}r)K}{QpZmCD=DPX}!iY94B6^x>I%8?Pw zeB(m|4g^KkVJ9uLz>+M**~uUS9b}NTu?%OiFf_xCbo!5nsQx%JBSS1Vt7UQEP|MA~ zI`%YRSRKXEq{nc5#^v5TSno5Msg?BxelqEH19!mGW1Eah-!Zwyk6sIYA56URP8EKaoEV%p*R8!(5?5RYR$}X>SmojbLEJn= zZ8~C8Pca_MR=hq>_BmZ{e%_xJlvK6hp-W!(oIu%eC>+uk{{kPs9(vE;;rsaK>pxMi z^E?lVd)MyFf25{q9`9=SsOsL;vvccuU(Dalo!#&*eK!BtnjP(_^_{xOl^?t{mmWWr z`h3rSe*6aIPTl(>OpQC!Tom3^TwMHFN!M3_;_sdN+fSjYPgv$3g>Z+G7rGpF+!j5w zvpXkHJi z4<6l?zh>_*mfl+q{q2i0x$5WbzTVsmZHt&|i&k_vuRhnfE`K4FHT~orpPPCo#J0cs m>9fy(Q)_#AcXYk!J-(3GR{#&+3C=XCf_Xjj-McI5R{amtK{H*7SNOKMA|T@z$UGSFJOl+AI= m>Q=2r35VPSNtN9TwlOo9try6j9c!iya+s&9pUXO@geCwCy*?QL literal 4445 zcmeHLe{dAl9p6iU#N*c>BoVA-yD1Q)d;8<|eyuqmxjV^04$dUfpn}=keRtU=cYEAz z$OQ(Xq(OoTgalLsDis}!MWos`1Y0K3HWRdpX-(*K6h|EiSPg=sV8_z$?p=OOo#|wz z{+CN$-gn>od_V8|KJWX!$)?G_a@kbl93zHdQ@us*66mLEEprn5ysLNba_G*Xa&OS< zy%WoX2S6GoUknXSpG^JBmWJtw!G4+7=f_zSLz~Q2@TXahrx~7Mafan-Gf!J# zeZw=u5ot^vYnv5_uTgfn{9cy}kH(asT#Ya+abR<^v*?U}R^zHtPjg$t9qu2nW$RyF zk+uF;_vRHg`WL-=x#DWilFFXlN80VimnLS^XTLbj^i~JoZru98^zE-SwEXhX*2IG) zl`}qS?E05|;Lw>(UmFUaeVu!8(X`5r@bfLVFi+o~wQ1dqrJ3p5g~H%IW`TF%_1->b zP3e1{x_$K*e(~<{Psm9V+#lM_#ZM<162ZS(?E^C(S>s*Z^mfw%UkCn0ZeP}}3-+9~ z*@@u!H;-IwI`hZCiH5z?g7Zpq56$0sbpOg5g}vh5YuTY=CE~G7S97*q{pKv&CqGU! zd45u`HFKh+^`3_x&-;vDnBAiuy7I-Y_AN~h7*C$9__%y&)*PvC`oA+yhpMuk53DQ6 zGpMKSZ*|>v?v=^hr#r80{-^yfGx6(F9=H^)|Bd0zEqm4}Rn55-(c9bGBUNXA7(JOj zWy$PcFFaMUd!IiK8wh>rb5!(a_uqf*lU}~-Qu^-0Yo3cd)ZnUkt?2KcE*|*&vjhJ) z?L2nlTdcD^_GjDXk1`+$6LML(TJ9_6MI~$!Bqe}MiEvaqF)V*cA}WYgNW}vvBuAXY zz^T&&E=x}0rxqXWi@H#yT(mKUN;j@76E{|g4vAQ@*qEQ-fgp@j0Z)XhBXK_ABy?UL zY;Bk#a2=vnIf-&eB$pCHIA`KaH0epm8(3no5zmiFLB7O&cZvd@oJ6InMtO>=t*tfH znoUY9L@^GBgQ8iAWl2Dg@w$jAB*;iSSEERBxKUh;$x&5SBDlsW1e6-pNf0oP55^ac z`g}w5k$6f4(1S_{QHn9qR5(nH^oXmT4M36#=sP{)Wpz|vVSvVARc6$Z+Lasf&?E@S;i&EfVvjz!MM|R^m7d=?Ky`ppaP7PSaM>%F<>lLbTm1jHFlXA`tR1#3xSsRi#heRU8awI32Su(&va9{~`t7t|Rj@F}*ME-6i78c+*<**P!R5TLO zCp5wN0>9Tuu%;wbAMsZUY7iWpM6n#HNen~F16mCollYEVBP;hYnKPl2Rs~kksOEh>-3@IjVeX!lTXRVYFWQZIIdp` zUJ#R8hzlE#q{j(d$tkf?h=dSSk5sx2j?3SX3PEJGOUN#f7SRmZ6rh8oUE~lcNr<75 z#U?OjVKjSO397Y13>AbxN6-q=Q~wo(=jjKva5TEM5^1LZf{`>sGVGvWwv=F0YQvOP zGX{5@PyLrB`8r@kkpaKt7!)t4h15_nOlhW-o$v9JI*add1)v^ZWK8;w%QY_7m=qWj zcs#qt6x+Pk) zCXQi~XKKxW?LTlE3}&capC_Z=Fl9!1#-;OZ6)<$e>nRJTf4_>UPE8Icd zH)a34mbRm9Rde|E*ZK-~1ZwYW=sDMU{mQm`cD?hn+ScyMtO*a%2Lp7IQg&`|R zukpn1vQ3Z8F6N$CP~vq6a(_|hhd=+e>bLbb@11+lfaaaNuSNSu3g-2!biY(svGqR# CfcuRA diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/hunter_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/hunter_cape_icon.png index 8490a1cfb77fede37df9da7a454dbcbf0370ed2e..5a317c5221c1be1f1cce0d4073bac025d7dffa01 100644 GIT binary patch delta 188 zcmX@BbcS()L_G^L0|Ud!A03rIN;<$N#1%+0Ffi`lzh6R>*W5@}O^P8bz{*5NX{w1@dwLtflJShJn%5hv~tUw?quP9`#R^+`=LgCwJD6v lVV`FoXKI|e@@H=CYkn;W0lR=dcm9B!<>~6@vd$@?2>^^5LG%Cs literal 4429 zcmeHKYj6}*7VaUEgdsp>A#oOWW$cKA#h!l5tEb6;WM)W485}bSn-npdp6=U|Hkk)A z9Wo)yLsE$e%1Z$$N#VLGYYDixx^4{A1|7;&Q79IaM9W%5ur&CJ!d9)UqIoko}|0|tIKBT=j$;Ho8>KcS3o~UZMoU-d+CL}cSH9!s`g4= z?{BbNcmbsDCQPSdpy|fh({x!_7L0X5`vur4Ms4$T)3yE)uy4uOd%!NvU{oJkHw~Kw zeGfDS?0L{X4^4h3z1H8sR-at$$36|y5F>q=*XK7fCYmytZQxHa7LKAhnlaK0M_D95VJsq*$zPa12=R5uE|=fyav5Xss3bQb3`_QG-0dt+`R8@q8}RIYzWvwkUon;I zj@?tR?nqT}X@`Hw%b(R>J-58!+^%POS^W#sb2b+qo^5)okL%TMy*Q`qrS`}E`0$?O z?L3_slb&cBf7SUu@qyTUr<>I(Wy9=bl)7z4U^x_gZ1-XoYaJ?dr{)SO0yQ8I-r< z-JUyFY|Wi+-E-fA+l#;C78jmV4u1X3&fZPkwfa|2*MD4nSHXO7aLx}o{h`K!L&3U= zVx7{@zBOQY`=yzd&v#tg_yzmsT;sQSwO7KM|EfE)>Cw7qzxI=}VFv5QLG!8` z$9%p~`bZ+90_Z^|`4~x?C^8%-$9p6c&w3!q1oV?0iOSX(A}dfL+8h^Esh1!7M?DzY>t)`Zy98Ere`0|EC@ z-U;ZDy=!1V`Fxx^Dm1I%dEHK2U7r)9f-G{HX*SbA#4{pcwu=tJA|OQYmY|*BC5L1~ z4w^-@Z5)+1l2G`FfK)0VH_5;wP&SFO1siUbZ$e3cw&PL4q<vCSL0c$0W2UXl z7-$WOCm<75POW%qGwQK$uo)1RSMwAIv~k!A=ZYgAVgkxBl@4E}^F>8jYW-hm_3{`?01roAE+=69R&6MKqXKAM`Yrw1Bx_g6 zXw)tR#|!B#B>446)ZzrL^pw!RM?wgyM*rAdhf7*}M#FFgju3u+-bS`0Iqsb%M9d@^V8Gp+#CQ;SSW-zmAK zo|8V0w>Sd1Oc*E;mNAm9vi2E0$u2vm5W|&5A$$xz1eyO!amkm$njt@MBY>K|9 z`~8t8Kl)<-ujdu-*(z-9-Dulj;P%<7OkU4w_Y0-~&!04u^s%qfv;Th@a$)K@d$&xpV zmT;u4*kz&FlrrT|OiV+Olh?vb&4jkB85<)v2u?5;oRxNu>yp}%X<>paNd{U=m$Er- nS>3ADDB+NsAgQu@!8T@w?`!!>kI2s519F(BtDnm{r-UW|52-<8 literal 4441 zcmeHKe{d639^bS;+d$z;Y4z%mM5sVdvNr~OvfZ%E(j z7nbI&-g~d9w8MMnOJCMqKDD6!)TUj1v~mB`jJEveW|~hNV*8Bi&(37kyZYpxkepZ**5+?_M)4~3rDl11!TnYU(D&ce*}N4QdH8*zub`1^s= zj>f7_%bK^foq6(u=g*Uy^8PiUN>01Ft0#3J?lnBf1n}n8ULzE zlR@pLPaM1XWbbt9tBqG$FVgSi!r#xh|BF!D%Z9ffe0-JCu(_}^j^M}5^)ctY4 zW8d{3q1XGOZ`xZw&j3l7kbTu^wPzX2D0pKfGn7AEJ?6{AS9|BoCpQOF*e~qbY2$N z+AxN|Iz(-7Ak`p|oJv%LDKllp(XxcxL?ZKza7k2<*h<&kDGKo9K%WoWw{H1qd|O99Fpm8jcle6iE)37~`XIM3t2=tZ{OFrBQVt2$+Y5;|oPR zo)P+RETsa_150obj4r&w9js%@Gl+6k|$blo!jI#IRa8mO|i1 z{3DIgpuQb}$Hbr*0?-&(l^D0AcI8GqGzkK7D584-vBx1*SsE2W_>tKNLcvzRhH)`RzT@FNBpA{5d7FgZH8Q#y)76#>cJB?C=jY0hqFQBBr*cs9< z*lc$D7%F!-rgC9k)TjWtSq3~dJI7cgi9sa_x1tm-h$ttJ0!mp##%A?fMajaCp|~e1 zgRJC&W24fj1VBacHo{8L3@Q>Nk5aTW6t0cO8NBJDg)F*cn_;Mu#CXov&HDTla# zh(*EyeL@qQUF3B;5Ymi~j(CHdDgg%vvP=#)CPpWGa!9OFIZaK%j$3g%!&s~~8*aB- zMnTKPXbfbc#;F%ieMUPL7HkFx%V~KE2=sBV7uFdSIaP`J6eZ|DM#}EUv)eOyj+ff^_%sfbke>R#DA=SQRPlIpyk68!0SJcT1WJ&@f>~37 zVW|ycTFn^VaS8Tcnw02(F+~RWCC5PV0<{nuDTXP{w6gOHeo|-g3$6gDCl{HJzLRoI z$~7ScCIp_$u1UEjq`-v0liBrulgl{zIwgj|ub?=1Sz3E?=Ud=KYnp%QVwe8P1zmR@ zZUa_Uq`W2uLDO@!W`MSL-wXybRJW%r*Dsvo z3S`}vle^5c`vd-Lj%n|P6`NvSncv%)m(^8d`_JRsms~1Y_uZR=E6?u#hqUA46-MOndjPK6gYxeG$x6~)@9=Lk2rF8n4 zLHhQhP)+Ub-Z#U6T&3=-lkCdLJqo%&RynnK>vWSnHgOjA4s=BbS zw!pTujFOy`m7cn{x3{&niIkzixx2}}y}-7%y|J*3lAMW;n76R6s;8@#oTkRRxxlx# zyRomjt*eohoxi%emztuhr>nfNu)DFbwW+DLsHU{8ue-3Xw5h1Mudlthx002go}HrW znt*ix0004WQh!cU06^y0W&i*HkV!;AR0!8&U;qI|5MY1-Mn)zOfQbNk%q$QQD3^(e zl?^Vy$j-#U$;HhBD3zNJ_Co`O-47a`Fm_O3Eq_J`K*_9 delta 476 zcmV<20VDp#1M35j8Gi-<002AIl}Z2r010qNS#tmY3ljhU3ljkVnw%H_00EszL_t(2 zk&Tm0ZxT@yhMxn&e9#V;28tPpH8x7z7^D9HUFpiWGI3#|zs^6=u5@M6jTjdiLs6l& z*v_CGU@miAz|hvA#b`W=TGRhJpuJrs*jUH4Eug^r?vORlK~*at7w>lo zyS~p>(?BxCuYV}ke4nW}lm?nF-+$8heM%5CkYX_piwI?<7)2xAe%L3mJg#18aDQuq zs-5!g(}3e>pVoFj$#t{L7t62s+-)_nWyVb<1QiD;aPNAZ$t-2>W0!GwlEFsK7GM#< zbGcC~)9D>Dn`sas#c-#oaP1P0o;(GN10gj^MG}?$jetR$c&cVE64uNU-buIGMnMq S`NnPl0000 zE4A>h8+%6G9wKg0_5<cSl@o~l@1Smo^guUH&?^d|m^KOAd zqNFeoY5c(WF^L$PG}g8d(==#HuoFa+*g8ZV(?T*yYTG16qn1Y6X^b)HvwO$aG&3D$ zn*X?)m-pHC{XM_;d4KQoKHRnzPTE2{6_I?JlrojNF!}XDI!4uw^la!XEXp*GO zR#;#C+*m|1)2fd4QxIRX;B*$aolb2iEb>AXQmLW`x9oQ0oi13|{7_N$?vAFVu6wBB zO)o!~vgySi=(3s%9ys=C#m$Qu{)=sgyKS16W+XPGb|&l3_0Zj##=p$l*44D^r3`jqwlP`!e)4|zvd;$w z9o0o2WY_I)xb%}h{pvD4bGqwqHsjj%Xj7Db+hQA9@I;xrr1gC3{hl7}XK8~eyDr%l zJ(3#b-|0X6N$cs?y}xeSm(1T+ly>O*JAZK?|5nxjyKgwvceIc_T7Pp<%gry&QiH+{ ztTlT@W@FL}^WKMlv_p4;UY2@MI`ogvc6D!U-Jp5(Y{f^Vt5cS6gY&*h?DbWq9PySH z>eN!N?cABg7rJJfuI(J&a^3dU0`2E>He3xf99Q>meX3ln+?`ety1TnOSb6r|(5ne^ zGQRW5vJ-`E`wMicA>The_KGX1SJn?-9-z-$O=x?*>}SEpo17KD%X|0Qs-eH%IQU+# z6jRvZM5jyI?6kZx^ zd6>Yo3Ph@OV5N{qPBDzMCcQ~-z_X)54TY`JXw$TO@dJs`2M38y|5eN|DJt9(e4UohG`bLjPaa{-zg(xCchgpkSFAvSqN+0OVtznNgVk;(?G~$@v{}YL zB`6$$Oq4m5;;GEY$3nwqKv+i3Qy@^rVK1~Zj2KA_7mH$*0~;;7qthO^P8=gKE=EE? zI$DT}M+z}+Fw=%u_%fYGr`>D@ae}UzAp-9MrOj=vqILPXPqO4J1xdBZArEf)Viz z6LQTM*>O7YUz(&VfN@0z{9QF42-6R)V}%%8n7Ik;g6hQ4sSGK+QRkM8+i=d{d)&ApEV z*55dX5&n{{ANOs%r@ZUw8wZZH-%(>L8sAy5ab5d!ncTYa<4eB#+RN8pIoGe5mmX*t zezyLZ`ZK3=*M51)fxm?sfAijsmVs+?@z>WhF8|}w?N86S-O^?_nV*nW_vgFLuYdEC z3yW&}!#T(EhwgLjd$y$da)$1G@rR54@M+nC>Do6m(^v04*}HgU*V`xSE?mC-^W5W) z<#a##WyygTcjfjpJ$(IqN5x;aCa9m>zRfeZ;ohrs-p3!ar9H_f?#z1pgXe#LEIrxT zlzOqczw_|U<(h5FbNY^yRld+svPSIN`>)5AzT4lhxbLHuEgOIP_1B$Wscx+n^o{tJ QHL`B*?0nZtSrv`{0c-dKwEzGB diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_highlight_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_highlight_icon.png index 9c7884450bd14d079c425e84bb7304b414e0bb9b..f0f8f1ad14ea69b875e7f7f50d39902873b827d0 100644 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^{2z zp!om44V(~hAR}v3O+6ErpSGXqNyACcz9~e#SIMB>|suEVRYS@Bq1TE*6>7_-@rzT!LWc;9I5J<~y z3xNn+m&%XDYQWjP0&UF7B85h+ zBE`)&-~uH(X!@KftRy) z0%|Z{udzs=R-_vwel5ceSX`N$_n{pxX{%k<*DUChKAD_?f!MSsd zHh$xl1V4U3I~egQlv&u{=B{aI+ivP^Ff^4+6n!RC9OmvX4OA=kIg;ho1-mskH0jgS zYM3BQNVO?WPO81xry)yXlM{ZL_lgZfbk=Oo9UH0Yto+~LG55)$u;o2@Gr&Xt-C$}4I%OaGF zr;MjnTHN_L(d^UxJ1vQi5?c~m6YE1&vhADCy{henb4+<*_odNe#z8Ok8pN*J2*pDrZVn1 zLn8SNa89l_+0ORdSnH&FWG$Y0fiW$?bEm7tuJ`;#B6VXbI;wCK6&#<7E4<=yor*;^7c zUbcUHE3KPC3-*0#A9&WtE0MtVSJ~R1t9vob@4#*PTnviLN&<_738V!f8pFU^v4pcF zkOu;3=*kZ;DDUhFVC7g#_Y2?$czR$cY$lvcWrx$?0wxDQgFsjT2DoL?_+*HH$zbs? z0tcu9fdTI2VFVPSfbe%YKm$CzA$T^I2C;@)!I4m$Is^j2a;Xs*BEjVg9e8qpM)CO^ z3<41s7YC2CgtNJk2$Y?j9Ri6)pwTb@0prE9_+$Z$#alBw$k%ZQG#-UZ=kV!l7DPTS zIh-BCcYs3WLf^L8I{Ea7?@BD*7h8Zqggk>l!I6mhXfy%+2Q+!+hcqhXn=4KXm!a@P zr66bw8k5H2^8g-dUOAw*--!QLq=3ws6;m{E)*Dt{Ifh8%u^BP)7LZtUJ`Rml7@8aY z-jP`rp3UTNX*?c4!&!f!D97gF1HQ}PY`#JxOBiNSzZ?o^+iBAHWwc_pMY{u zi6C!1#+xpnF#-s5prHyED8RZnI}93$Ma;n{ zRUpscxim7L&Glom890Rtru-3N3Acq?&2p6yU&vU5d>$#ytJz7bhyt?~rw%Z`t^hdo z;8(9pKp^mPH-eL&nf@ta{q6>&PKeQ}osxR57=t#}01IMXQH)HEouYK#T zVw^R@r zemD(VGT4_XwwdyK#oaq`sr-+r&K8T-N%P3T@ExuWIxRt@mG({sK9YYUr0)c6LDi6$ z9qfq5$zo^2w$-HV=(fa%h_tosA_=fj~LWQLn xnN>2|?iQEZvEE_9UK;Jx=Hs1#AKR(ZrmY`~Jzk(MjmXzbH|K4H>zj8T_z!R#@|XYs diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/strength_cape_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/strength_cape_icon.png index 0aa693f651b8468d39666926a10ecb87936d890e..aa3ea57166c22a09dc730ed7b6a5e3bb4827b4e9 100644 GIT binary patch delta 190 zcmcbtbdGU?L_G^L0|Ud!A03rIN;<$N#1%+0Ffi`lzn?)?kiki=*(GodXj!aZ_>-~@BQSz&Qpm(-R_ixXo>GSFJOl+AI= m>Q=2r35VPSNtN9TwlOnk`3P8j+O&2H$YGwYelF{r5}E+jxISP2 literal 4435 zcmeHKYj6|S6<%Sm6=TB?up!Vg8#xUIvf7uPTMJ`L3RXd&$__ORP_OnO?a0y!?b?=M z90INl4v;{2ObZT88j@j5oR*SK&7*Y!Ox$NTILF6NG-c){MFE_nQOzzXjcULak5q z`4%BYcmSkfGGfp$&a$k$#!aA3!NHNtkIH_!E?cAxMU#P?BN@2V*5+ zeZz~R5ot^>iv4FHzBbA24*1+|G?A1=sa`;kRA$EV#nU3EVz2IffIReM(Wdn?mKt-mvz6ija)EE*=L45r z4b@k?%?CDr^rK5ZxrXIV_WaR7uQ-%yO^Ls=IRpNwK61=n zSDX@m|MrnjI?kOB9dF$~P5ef6$>B$zJ$i8EaOD8Ef2cUz9pt(<-JRWj_iz2wWoehG z!~0mpR^t@wzHe{YReGCQSbR}E{Fgh=^*q(FHveRQ-Jfcg7R}`^PyZsXHykZ`HMBlh zYEXL}@AS=i@5EHgt!IZ?K6PA}iGE(N_C{>;&kb)s_56A{x~HTrF|Vg59_^o>IGIyW z{?N}Bo(}Fl5GX|k!+-TV>#i4He{$&B0MmCPXZK5MUWq^5>aIIe^@m$a2LF7!^MhVj z_wYZFw|bJlwzpi(gCtBzHMMH3e+9$IF*D1{A;FxACA1Sm%F0s-mWv818WO@%++`X( z-D^T6-evlZ)lc{nZXqI7ZA=Q)8&}qF8>5_)HzAoI7^7K*+>Ux)v0)nd0bA$SU658#)btv z5fAGVn&3=Dz~?eiW@2=0VOcFtfj}RJy)f>iz^ZbxMwaVcrfk{GPW$0H@vO>vSXBVh zY$2{0Da06IWr%e68l7L}C9(N`p|#6{mH{4)yh>7F{bqeAeWR*{4e6)!W4)wbB^1>! z1;cXbEhucGkUlKnN>6bSHXatBdSuddWL)}^RNzEfw9|wY;&;-RB?Q^TQY4Mh1i`Z* z(qgmH>GR97E3&9Iu}PsK3_5~Vke>R#D6~{RsD-*_S#(oG&`tpa!w3>1ss9uV&ukdi zYR1Tp%kclwq)Z2lDKg-f9)scqwGhu1!;EGS!B_dooW)nU1d2{9GA?~5;EQK{^;wJ5QkquP4KeR(&S^{MJqS7e3?go(B|6tpE7#j3>Dr!pK?cVF^I=ggMTW^8Q{AT6+ zp2-*9Xngs~;uBAAZ|gD6tN8SM;Sp+Tm2_`C^TE;X7tpQdH-kGOJBLb)AI95Rwb(b@hDc`FY0Kwc8iC-{)&Pm32#A`q+QL zI`fy`KNc;{-FeE-J(IlmOyQ(C4Tn4z!^qmtmfhmdPWjBc>(aHQkF<2{Vur3f)EIt$ zT~6Tm7UcH8s)rAL5!3ZsZWZ8R!(r;Ev_L9UhMK?zpqOZ`*M!TGA!R t|0q^p`y|S*nN$1L-S(E~FUtS*ggtVSU)?`>{whr@pLeC_^~$=f{|2FT_pSf{ From 7208d698a80b3ae6f0cf01166f7f59c68e84b753 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 7 Feb 2024 14:28:54 -0500 Subject: [PATCH 32/35] api: add setter for ScriptEvent op --- .../src/main/java/net/runelite/api/ScriptEvent.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java index cc62a9e9e..50471bef8 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java @@ -60,12 +60,19 @@ public interface ScriptEvent Object[] getArguments(); /** - * Gets the menu index of the event + * Gets the menu op of the event * - * @return the index + * @return the menu op */ int getOp(); + /** + * Set the menu op of the event + * + * @param op + */ + ScriptEvent setOp(int op); + /** * Gets the target of the menu option * From 44bab4b65d0df2ae727898d5f26958255b5a04ef Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 7 Feb 2024 14:30:06 -0500 Subject: [PATCH 33/35] bank: use scriptevent for shared bank search trigger --- .../java/net/runelite/client/plugins/bank/BankPlugin.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index e84bc0041..d07229ab7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -151,11 +151,9 @@ public void keyPressed(KeyEvent e) return; } - searchToggleArgs = searchToggleArgs.clone(); - // this calls [clientscript,shared_bank_search_toggle] - // the first argument is event_op and we need to spoof op1 - searchToggleArgs[1] = 1; - client.runScript(searchToggleArgs); + client.createScriptEvent(searchToggleArgs) // [clientscript,shared_bank_search_toggle] + .setOp(1) + .run(); }); e.consume(); } From f5a1da0c86ec40fbe7df787265b4c331e9ff8400 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 8 Feb 2024 22:24:24 -0500 Subject: [PATCH 34/35] rs: add error dialog for js5io and crash errors --- .../net/runelite/client/rs/RSAppletStub.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java b/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java index c061e6e1a..327526ba4 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java @@ -140,10 +140,31 @@ public void showDocument(URL url) .addButton("Game Status", () -> LinkBrowser.browse("https://secure.runescape.com/m=news/game-status-information-centre?oldschool=1")) .open()); } + else if (code.equals("error_game_js5io")) + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("OldSchool RuneScape is unable to retrieve updates from its update server. " + + "This is likely due to a firewall blocking the RuneScape server. Try disabling your firewall, or use " + + "a different network.") + .setTitle("RuneLite", "Unable to connect to update server") + .addHelpButtons() + .open()); + } + else if (code.equals("error_game_crash")) + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("OldSchool RuneScape has crashed. Crashes are most commonly caused by plugin hub plugins, " + + "but can also be caused by RuneLite or Jagex client bugs. If you receive this message commonly, try playing in " + + "safe mode to eliminate the potential of plugins causing the crash. The client log file will contain additional " + + "information about the crash.") + .setTitle("RuneLite", "OldSchool RuneScape has crashed") + .addHelpButtons() + .open()); + } else { SwingUtilities.invokeLater(() -> - new FatalErrorDialog("OldSchool RuneScape has crashed with the message: " + code + "") + new FatalErrorDialog("OldSchool RuneScape has crashed with the message: " + code) .setTitle("RuneLite", "OldSchool RuneScape has crashed") .addHelpButtons() .open()); From 4628433da1cc829b245cf1208b0857495300ebbb Mon Sep 17 00:00:00 2001 From: RuneLite updater Date: Fri, 9 Feb 2024 15:57:01 +0000 Subject: [PATCH 35/35] Release 1.10.21.2 --- cache/pom.xml | 2 +- pom.xml | 4 ++-- runelite-api/pom.xml | 2 +- runelite-client/pom.xml | 2 +- runelite-jshell/pom.xml | 2 +- runelite-maven-plugin/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cache/pom.xml b/cache/pom.xml index cee5a15b4..fbbeaf67f 100644 --- a/cache/pom.xml +++ b/cache/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 cache diff --git a/pom.xml b/pom.xml index 188de9791..1ceef58ca 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 pom RuneLite @@ -63,7 +63,7 @@ https://github.com/runelite/runelite scm:git:git://github.com/runelite/runelite scm:git:git@github.com:runelite/runelite - HEAD + runelite-parent-1.10.21.2 diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml index 80ae96dfa..8bb14ea7a 100644 --- a/runelite-api/pom.xml +++ b/runelite-api/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 runelite-api diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index dabbaa339..5e77d8ef3 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 client diff --git a/runelite-jshell/pom.xml b/runelite-jshell/pom.xml index f9a9f8f92..7e9926669 100644 --- a/runelite-jshell/pom.xml +++ b/runelite-jshell/pom.xml @@ -30,7 +30,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 jshell diff --git a/runelite-maven-plugin/pom.xml b/runelite-maven-plugin/pom.xml index d446ba9c0..7de41ffa0 100644 --- a/runelite-maven-plugin/pom.xml +++ b/runelite-maven-plugin/pom.xml @@ -29,7 +29,7 @@ net.runelite runelite-parent - 1.10.21.2-SNAPSHOT + 1.10.21.2 runelite-maven-plugin