From a8e2e88810fa486733c8787f3b5587862bd3ff43 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 2 Jan 2022 19:39:43 -0500 Subject: [PATCH 1/9] api: add getConfig to deco, game, and ground objects Additionally fix the wall object orientation javadoc, the returned value is an angle --- .../main/java/net/runelite/api/DecorativeObject.java | 10 ++++++++++ .../src/main/java/net/runelite/api/GameObject.java | 10 ++++++++++ .../src/main/java/net/runelite/api/GroundObject.java | 10 ++++++++++ .../src/main/java/net/runelite/api/WallObject.java | 12 ++++-------- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java index ba78add470..4b80d581f5 100644 --- a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java +++ b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java @@ -54,4 +54,14 @@ public interface DecorativeObject extends TileObject * account for walls of varying widths. */ int getYOffset(); + + /** + * A bitfield containing various flags: + *
{@code
+	 * object type id = bits & 0x20
+	 * orientation (0-3) = bits >>> 6 & 3
+	 * supports items = bits >>> 8 & 1
+	 * }
+ */ + int getConfig(); } diff --git a/runelite-api/src/main/java/net/runelite/api/GameObject.java b/runelite-api/src/main/java/net/runelite/api/GameObject.java index f1797f416a..e642596581 100644 --- a/runelite-api/src/main/java/net/runelite/api/GameObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GameObject.java @@ -93,4 +93,14 @@ public interface GameObject extends TileObject * @see net.runelite.api.coords.Angle */ int getModelOrientation(); + + /** + * A bitfield containing various flags: + *
{@code
+	 * object type id = bits & 0x20
+	 * orientation (0-3) = bits >>> 6 & 3
+	 * supports items = bits >>> 8 & 1
+	 * }
+ */ + int getConfig(); } diff --git a/runelite-api/src/main/java/net/runelite/api/GroundObject.java b/runelite-api/src/main/java/net/runelite/api/GroundObject.java index 8971aa88bf..4b9ef0f0d0 100644 --- a/runelite-api/src/main/java/net/runelite/api/GroundObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GroundObject.java @@ -40,4 +40,14 @@ public interface GroundObject extends TileObject * @see net.runelite.api.model.Jarvis */ Shape getConvexHull(); + + /** + * A bitfield containing various flags: + *
{@code
+	 * object type id = bits & 0x20
+	 * orientation (0-3) = bits >>> 6 & 3
+	 * supports items = bits >>> 8 & 1
+	 * }
+ */ + int getConfig(); } diff --git a/runelite-api/src/main/java/net/runelite/api/WallObject.java b/runelite-api/src/main/java/net/runelite/api/WallObject.java index 99e8236942..3c8b95793c 100644 --- a/runelite-api/src/main/java/net/runelite/api/WallObject.java +++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java @@ -32,18 +32,14 @@ import java.awt.Shape; public interface WallObject extends TileObject { /** - * A bitfield with the orientation of a wall - * 1 = East - * 2 = North - * 4 = West - * 8 = South + * The angle of the first wall + * @see net.runelite.api.coords.Angle */ int getOrientationA(); /** - * A bitfield containing the orientation of the second wall on this tile, - * or 0 if there is no second wall. - * @see #getOrientationA + * The angle of the second wall + * @see net.runelite.api.coords.Angle */ int getOrientationB(); From 45f744fa2b0adcc78af52b2d74eed19838d765dd Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 2 Jan 2022 20:24:38 -0500 Subject: [PATCH 2/9] api: fix wallobject orientation javadoc and use This is not an angle, and the model outline renderer code which uses it as one is incorrect. --- .../java/net/runelite/api/WallObject.java | 22 +++++++++++++++---- .../overlay/outline/ModelOutlineRenderer.java | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/WallObject.java b/runelite-api/src/main/java/net/runelite/api/WallObject.java index 3c8b95793c..93d5e3b4f8 100644 --- a/runelite-api/src/main/java/net/runelite/api/WallObject.java +++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java @@ -32,14 +32,28 @@ import java.awt.Shape; public interface WallObject extends TileObject { /** - * The angle of the first wall - * @see net.runelite.api.coords.Angle + * A bitfield with the orientation of the first wall + * 1 = West + * 2 = North + * 4 = East + * 8 = South + * 16 = North-west + * 32 = North-east + * 64 = South-east + * 128 = South-west */ int getOrientationA(); /** - * The angle of the second wall - * @see net.runelite.api.coords.Angle + * A bitfield with the orientation of the second wall + * 1 = West + * 2 = North + * 4 = East + * 8 = South + * 16 = North-west + * 32 = North-east + * 64 = South-east + * 128 = South-west */ int getOrientationB(); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java index 3047086dda..6f56546547 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java @@ -1131,7 +1131,7 @@ public class ModelOutlineRenderer { drawModelOutline(model, lp.getX(), lp.getY(), Perspective.getTileHeight(client, lp, wallObject.getPlane()), - wallObject.getOrientationA(), outlineWidth, color, feather); + 0, outlineWidth, color, feather); } } @@ -1143,7 +1143,7 @@ public class ModelOutlineRenderer { drawModelOutline(model, lp.getX(), lp.getY(), Perspective.getTileHeight(client, lp, wallObject.getPlane()), - wallObject.getOrientationB(), outlineWidth, color, feather); + 0, outlineWidth, color, feather); } } } From a4b10d99d84133ff04fbe032c1235d7a8bb1e72c Mon Sep 17 00:00:00 2001 From: testing-ongithub <96100526+testing-ongithub@users.noreply.github.com> Date: Sun, 2 Jan 2022 10:26:06 -0600 Subject: [PATCH 3/9] Fix clicking tray icon not bringing client to front on macOS --- .../java/net/runelite/client/util/SwingUtil.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index 828adfdadf..08bd9613a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -184,6 +184,18 @@ public class SwingUtil @Override public void mouseClicked(MouseEvent e) { + if (OSType.getOSType() == OSType.MacOS) + { + // On macOS, frame.setVisible(true) only restores focus when the visibility was previously false. + // The frame's visibility is not set to false when the window loses focus, so we set it manually. + // Additionally, in order to bring the window to the foreground, + // frame.setVisible(true) calls CPlatformWindow::nativePushNSWindowToFront. + // However, this native method is not called with activateIgnoringOtherApps:YES, + // so any other active window will prevent our window from being brought to the front. + // To work around this, we use our macOS-specific requestForeground(). + frame.setVisible(false); + OSXUtil.requestForeground(); + } frame.setVisible(true); frame.setState(Frame.NORMAL); // Restore } From d7c367b6778b3d8d96bb0107e61a1d880b9902a5 Mon Sep 17 00:00:00 2001 From: Robert <17119716+robmonte@users.noreply.github.com> Date: Sun, 2 Jan 2022 19:46:15 -0600 Subject: [PATCH 4/9] interface styles: fix 2005 style icon alignment --- .../net/runelite/api/widgets/WidgetInfo.java | 4 +-- .../plugins/interfacestyles/WidgetOffset.java | 34 ++++++++++++------- .../client/ui/overlay/WidgetOverlay.java | 4 +-- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 70a9d221fd..83b0f2d6a0 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -549,8 +549,8 @@ public enum WidgetInfo TRAILBLAZER_AREA_TELEPORT(WidgetID.TRAILBLAZER_AREAS_GROUP_ID, WidgetID.TrailblazerAreas.TELEPORT), MULTICOMBAT_FIXED(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MULTICOMBAT_INDICATOR), - MULTICOMBAT_RESIZEABLE_MODERN(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), - MULTICOMBAT_RESIZEABLE_CLASSIC(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), + MULTICOMBAT_RESIZABLE_MODERN(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), + MULTICOMBAT_RESIZABLE_CLASSIC(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), TEMPOROSS_STATUS_INDICATOR(WidgetID.TEMPOROSS_GROUP_ID, WidgetID.TemporossStatus.STATUS_INDICATOR), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java index 8b189e57eb..807eb45413 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java @@ -79,7 +79,7 @@ enum WidgetOffset FIXED_2010_STATS_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_STATS_TAB, 41, 1, null, null), FIXED_2010_STATS_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_STATS_ICON, 41, null, null, null), FIXED_2010_QUESTS_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_QUESTS_TAB, 75, 1, 33, null), - FIXED_2010_QUESTS_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_QUESTS_ICON, 75, 0, null, null), + FIXED_2010_QUESTS_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_QUESTS_ICON, 75, null, null, null), FIXED_2010_INVENTORY_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB, 109, 1, null, null), FIXED_2010_INVENTORY_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_INVENTORY_ICON, 111, -1, null, null), FIXED_2010_EQUIPMENT_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_EQUIPMENT_ICON, 143, 2, null, null), @@ -87,7 +87,7 @@ enum WidgetOffset FIXED_2010_PRAYER_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 178, 1, null, null), FIXED_2010_MAGIC_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB, 211, 1, null, null), FIXED_2010_MAGIC_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 212, 1, null, null), - FIXED_2010_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, 0, 1, null, null), + FIXED_2010_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, null, 1, null, null), FIXED_2010_FRIENDS_CHAT_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 5, null, null, null), FIXED_2010_FRIENDS_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB, 38, 1, 33, null), FIXED_2010_FRIENDS_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_ICON, 40, null, null, null), @@ -102,17 +102,25 @@ enum WidgetOffset FIXED_2010_MUSIC_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MUSIC_TAB, 208, 1, null, null), FIXED_2010_MUSIC_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MUSIC_ICON, 209, 2, null, null), - RESIZABLE_2005_QUESTS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_QUESTS_ICON, 72, 0, null, null), + RESIZABLE_2005_QUESTS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_QUESTS_ICON, 71, -1, null, null), RESIZABLE_2005_LOGOUT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_LOGOUT_ICON, null, null, null, null), RESIZABLE_2005_OPTIONS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_OPTIONS_ICON, 137, null, null, null), - RESIZABLE_2005_EMOTE_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_EMOTES_ICON, 173, 1, null, null), - RESIZABLE_2005_INVENTORY_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_ICON, null, -2, null, null), - RESIZABLE_2005_EQUIPMENT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_EQUIPMENT_ICON, null, 2, null, null), + RESIZABLE_2005_EMOTE_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_EMOTES_ICON, 171, 2, null, null), + RESIZABLE_2005_INVENTORY_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_ICON, 103, 1, null, null), + RESIZABLE_2005_EQUIPMENT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_EQUIPMENT_ICON, 136, 3, null, null), RESIZABLE_2005_MUSIC_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_MUSIC_ICON, null, 3, null, null), + RESIZABLE_2005_PRAYER_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_PRAYER_ICON, 169, -1, null, null), + RESIZABLE_2005_STATS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_STATS_ICON, 37, null, null, null), + RESIZABLE_2005_FRIENDS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_FRIENDS_ICON, 38, null, null, null), - RESIZABLE_BOTTOM_2005_INVENTORY_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_ICON, 98, 2, null, null), - RESIZABLE_BOTTOM_2005_QUESTS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_QUESTS_ICON, 67, 0, null, null), - RESIZABLE_BOTTOM_2005_EQUIPMENT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_EQUIPMENT_ICON, 132, 2, null, null), + RESIZABLE_BOTTOM_2005_INVENTORY_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_ICON, 98, 1, null, null), + RESIZABLE_BOTTOM_2005_QUESTS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_QUESTS_ICON, 66, -1, null, null), + RESIZABLE_BOTTOM_2005_EQUIPMENT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_EQUIPMENT_ICON, 131, 3, null, null), + RESIZABLE_BOTTOM_2005_MUSIC_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_MUSIC_ICON, null, 3, null, null), + RESIZABLE_BOTTOM_2005_EMOTE_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_EMOTES_ICON, 133, 1, null, null), + RESIZABLE_BOTTOM_2005_STATS_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_STATS_ICON, 32, null, null, null), + RESIZABLE_BOTTOM_2005_PRAYER_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_PRAYER_ICON, null, -1, null, null), + RESIZABLE_BOTTOM_2005_COMBAT_ICON(Skin.AROUND_2005, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_COMBAT_ICON, 1, -1, null, null), FIXED_2005_ROOT_INTERFACE_CONTAINER(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_ROOT_INTERFACE_CONTAINER, null, null, 197, null), FIXED_2005_INTERFACE_CONTAINER(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_INTERFACE_CONTAINER, 7, null, null, null), @@ -128,11 +136,11 @@ enum WidgetOffset FIXED_2005_EQUIPMENT_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_EQUIPMENT_TAB, 153, 1, 30, null), FIXED_2005_EQUIPMENT_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_EQUIPMENT_ICON, 151, 4, null, null), FIXED_2005_PRAYER_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_PRAYER_TAB, 181, null, 30, null), - FIXED_2005_PRAYER_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 178, null, null, null), + FIXED_2005_PRAYER_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 179, null, null, null), FIXED_2005_MAGIC_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB, 209, 1, 30, null), - FIXED_2005_MAGIC_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 206, 2, null, null), + FIXED_2005_MAGIC_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 206, 3, null, null), FIXED_2005_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, 15, null, null, null), - FIXED_2005_FRIENDS_CHAT_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 22, 0, null, null), + FIXED_2005_FRIENDS_CHAT_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 22, null, null, null), FIXED_2005_FRIENDS_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB, 51, null, 30, null), FIXED_2005_FRIENDS_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_ICON, 49, -1, null, null), FIXED_2005_IGNORES_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_IGNORES_TAB, 79, null, 30, null), @@ -144,7 +152,7 @@ enum WidgetOffset FIXED_2005_EMOTES_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_EMOTES_TAB, 178, null, 30, null), FIXED_2005_EMOTES_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_EMOTES_ICON, 178, 1, null, null), FIXED_2005_MUSIC_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MUSIC_TAB, 206, null, 30, null), - FIXED_2005_MUSIC_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MUSIC_ICON, 202, 5, null, null), + FIXED_2005_MUSIC_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MUSIC_ICON, 202, 2, null, null), FIXED_2006_ROOT_INTERFACE_CONTAINER(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_ROOT_INTERFACE_CONTAINER, null, null, 197, null), FIXED_2006_INTERFACE_CONTAINER(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_INTERFACE_CONTAINER, 7, null, null, null), 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 93f71a5f90..57834bd4f3 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 @@ -71,8 +71,8 @@ public class WidgetOverlay extends Overlay new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_VENTS_INFOBOX_GROUP, OverlayPosition.BOTTOM_RIGHT), new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_STABILITY_INFOBOX_GROUP, OverlayPosition.BOTTOM_LEFT), new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT), - new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_MODERN, OverlayPosition.CANVAS_TOP_RIGHT), - new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE_CLASSIC, OverlayPosition.CANVAS_TOP_RIGHT), + new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZABLE_MODERN, OverlayPosition.CANVAS_TOP_RIGHT), + new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZABLE_CLASSIC, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.TEMPOROSS_STATUS_INDICATOR, OverlayPosition.TOP_LEFT), new WidgetOverlay(client, WidgetInfo.BA_HEAL_TEAMMATES, OverlayPosition.BOTTOM_LEFT), new WidgetOverlay(client, WidgetInfo.BA_TEAM, OverlayPosition.TOP_RIGHT), From fa9a178f4a1037be04536c0fb75a8dc0279f2233 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Jan 2022 11:45:26 -0500 Subject: [PATCH 5/9] Fix race with client startup and low detail/chat icon loading Since c1aa0c4898900361593e423792b475c08f141e49 moved client startup to be much earlier, the plugins can now start after the client is already at the login screen. This causes the low detail plugin and chat icon manager to not initialize correctly as they are waiting on the event for the login screen. --- .../runelite/client/game/ChatIconManager.java | 33 ++++++++--------- .../chatchannel/ChatChannelPlugin.java | 23 ++++++------ .../plugins/lowmemory/LowMemoryPlugin.java | 35 ++++++++++--------- 3 files changed, 46 insertions(+), 45 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java index 1637f3a3fe..5578578015 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java @@ -38,9 +38,7 @@ import net.runelite.api.FriendsChatRank; import net.runelite.api.GameState; import net.runelite.api.IndexedSprite; import net.runelite.api.clan.ClanTitle; -import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.callback.ClientThread; import net.runelite.client.util.ImageUtil; @Singleton @@ -55,15 +53,23 @@ public class ChatIconManager private BufferedImage[] friendsChatRankImages; private BufferedImage[] clanRankImages; - private int friendsChatOffset; - private int clanOffset; + private int friendsChatOffset = -1; + private int clanOffset = -1; @Inject - private ChatIconManager(Client client, SpriteManager spriteManager, EventBus eventBus) + private ChatIconManager(Client client, SpriteManager spriteManager, ClientThread clientThread) { this.client = client; this.spriteManager = spriteManager; - eventBus.register(this); + clientThread.invokeLater(() -> + { + if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState()) + { + loadRankIcons(); + return true; + } + return false; + }); } @Nullable @@ -87,22 +93,13 @@ public class ChatIconManager public int getIconNumber(final FriendsChatRank friendsChatRank) { - return friendsChatOffset + friendsChatRank.ordinal() - 1; + return friendsChatOffset == -1 ? -1 : friendsChatOffset + friendsChatRank.ordinal() - 1; } public int getIconNumber(final ClanTitle clanTitle) { int rank = clanTitle.getId(); - return clanOffset + clanRankToIdx(rank); - } - - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) - { - if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN && friendsChatOffset == 0) - { - loadRankIcons(); - } + return clanOffset == -1 ? -1 : clanOffset + clanRankToIdx(rank); } private void loadRankIcons() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java index d1277b981d..7268e6aaf8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java @@ -632,18 +632,21 @@ public class ChatChannelPlugin extends Plugin if (rank != null && rank != FriendsChatRank.UNRANKED) { int iconNumber = chatIconManager.getIconNumber(rank); - final String img = ""; - if (message.getType() == ChatMessageType.FRIENDSCHAT) + if (iconNumber > -1) { - message.getMessageNode() - .setSender(message.getMessageNode().getSender() + " " + img); + final String img = ""; + if (message.getType() == ChatMessageType.FRIENDSCHAT) + { + message.getMessageNode() + .setSender(message.getMessageNode().getSender() + " " + img); + } + else + { + message.getMessageNode() + .setName(img + message.getMessageNode().getName()); + } + client.refreshChat(); } - else - { - message.getMessageNode() - .setName(img + message.getMessageNode().getName()); - } - client.refreshChat(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java index 4e980af0da..a8c67a0a56 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java @@ -29,7 +29,6 @@ import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.BeforeRender; -import net.runelite.api.events.GameStateChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -57,10 +56,18 @@ public class LowMemoryPlugin extends Plugin @Override protected void startUp() { - if (client.getGameState() == GameState.LOGGED_IN) + clientThread.invoke(() -> { - clientThread.invoke(() -> client.changeMemoryMode(config.lowDetail())); - } + // When the client starts it initializes the texture size based on the memory mode setting. + // Don't set low memory before the login screen is ready to prevent loading the low detail textures, + // which breaks the gpu plugin due to it requiring the 128x128px textures + if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState()) + { + client.changeMemoryMode(config.lowDetail()); + return true; + } + return false; + }); } @Override @@ -80,19 +87,13 @@ public class LowMemoryPlugin extends Plugin { if (configChanged.getGroup().equals(LowMemoryConfig.GROUP)) { - clientThread.invoke(() -> client.changeMemoryMode(config.lowDetail())); - } - } - - @Subscribe - public void onGameStateChanged(GameStateChanged event) - { - // When the client starts it initializes the texture size based on the memory mode setting. - // Don't set low memory before the login screen is ready to prevent loading the low detail textures, - // which breaks the gpu plugin due to it requiring the 128x128px textures - if (event.getGameState() == GameState.LOGIN_SCREEN) - { - client.changeMemoryMode(config.lowDetail()); + clientThread.invoke(() -> + { + if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState()) + { + client.changeMemoryMode(config.lowDetail()); + } + }); } } From 97c484fc3866fa6329be8f2aeeb073bd56d2d1c7 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Jan 2022 12:08:55 -0500 Subject: [PATCH 6/9] world map: use game state change event to load quest icons This was queueing potentially multiple tasks if the config was changed on the login screen, all waiting for the player to be logged in. Instead, use the game state change event to load the icons. --- .../client/callback/ClientThread.java | 4 ++++ .../plugins/worldmap/WorldMapPlugin.java | 23 ++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java index 2470b55056..17d2ffb177 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java @@ -110,6 +110,10 @@ public class ClientThread { ir.remove(); } + else + { + log.trace("Deferring task {}", r); + } } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index cfe7714b5e..fcc2519ac9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -34,6 +34,7 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Quest; import net.runelite.api.Skill; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.WidgetID; @@ -168,6 +169,15 @@ public class WorldMapPlugin extends Plugin woodcuttingLevel = 0; } + @Subscribe + public void onGameStateChanged(GameStateChanged gameStateChanged) + { + if (gameStateChanged.getGameState() == GameState.LOGGED_IN) + { + updateQuestStartPointIcons(); + } + } + @Subscribe public void onConfigChanged(ConfigChanged event) { @@ -488,17 +498,14 @@ public class WorldMapPlugin extends Plugin } // Must setup the quest icons on the client thread, after the player has logged in. - clientThread.invokeLater(() -> + clientThread.invoke(() -> { - if (client.getGameState() != GameState.LOGGED_IN) + if (client.getGameState() == GameState.LOGGED_IN) { - return false; + Arrays.stream(QuestStartLocation.values()) + .map(this::createQuestStartPoint) + .forEach(worldMapPointManager::add); } - - Arrays.stream(QuestStartLocation.values()) - .map(this::createQuestStartPoint) - .forEach(worldMapPointManager::add); - return true; }); } From a2f8a4219e29aaf976f8cc78074e990ed0de0106 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Jan 2022 13:57:56 -0500 Subject: [PATCH 7/9] menu swapper: remove examine swap This has not worked in the past, since the Examine option is not an inventory action and so cannot ever be shift-click swapped, and causes a crash now if set due to it subtracting the Examine menu op from ITEM_FIRST_OPTION. --- .../plugins/menuentryswapper/MenuEntrySwapperPlugin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 7fa8f7fba2..9366edb8e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -127,7 +127,6 @@ public class MenuEntrySwapperPlugin extends Plugin MenuAction.ITEM_THIRD_OPTION, MenuAction.ITEM_FOURTH_OPTION, MenuAction.ITEM_FIFTH_OPTION, - MenuAction.EXAMINE_ITEM, MenuAction.ITEM_USE ); @@ -781,7 +780,7 @@ public class MenuEntrySwapperPlugin extends Plugin ItemComposition itemComposition = event.getItemComposition(); Integer option = getSwapConfig(true, itemComposition.getId()); - if (option != null) + if (option != null && option < itemComposition.getInventoryActions().length) { itemComposition.setShiftClickActionIndex(option); } From 8bdf78c87458ee55ae03e166f86247e485d706a9 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Jan 2022 14:25:14 -0500 Subject: [PATCH 8/9] Revert "world map: use game state change event to load quest icons" This reverts commit 97c484fc3866fa6329be8f2aeeb073bd56d2d1c7. --- .../client/callback/ClientThread.java | 4 ---- .../plugins/worldmap/WorldMapPlugin.java | 23 +++++++------------ 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java index 17d2ffb177..2470b55056 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java @@ -110,10 +110,6 @@ public class ClientThread { ir.remove(); } - else - { - log.trace("Deferring task {}", r); - } } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index fcc2519ac9..cfe7714b5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -34,7 +34,6 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Quest; import net.runelite.api.Skill; -import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.WidgetID; @@ -169,15 +168,6 @@ public class WorldMapPlugin extends Plugin woodcuttingLevel = 0; } - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) - { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) - { - updateQuestStartPointIcons(); - } - } - @Subscribe public void onConfigChanged(ConfigChanged event) { @@ -498,14 +488,17 @@ public class WorldMapPlugin extends Plugin } // Must setup the quest icons on the client thread, after the player has logged in. - clientThread.invoke(() -> + clientThread.invokeLater(() -> { - if (client.getGameState() == GameState.LOGGED_IN) + if (client.getGameState() != GameState.LOGGED_IN) { - Arrays.stream(QuestStartLocation.values()) - .map(this::createQuestStartPoint) - .forEach(worldMapPointManager::add); + return false; } + + Arrays.stream(QuestStartLocation.values()) + .map(this::createQuestStartPoint) + .forEach(worldMapPointManager::add); + return true; }); } From fb035a8c135edcd81e6a36c09bd47d92af99eafd Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Jan 2022 14:26:52 -0500 Subject: [PATCH 9/9] world map: remove quest icon load retry if not logged in The quest icons are also loaded on world map open, so all this has to do is load the icons if the player is logged in with the map open at the time the plugin is started. --- .../net/runelite/client/callback/ClientThread.java | 4 ++++ .../client/plugins/worldmap/WorldMapPlugin.java | 13 +++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java index 2470b55056..17d2ffb177 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java @@ -110,6 +110,10 @@ public class ClientThread { ir.remove(); } + else + { + log.trace("Deferring task {}", r); + } } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index cfe7714b5e..36b11e2823 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -488,17 +488,14 @@ public class WorldMapPlugin extends Plugin } // Must setup the quest icons on the client thread, after the player has logged in. - clientThread.invokeLater(() -> + clientThread.invoke(() -> { - if (client.getGameState() != GameState.LOGGED_IN) + if (client.getGameState() == GameState.LOGGED_IN) { - return false; + Arrays.stream(QuestStartLocation.values()) + .map(this::createQuestStartPoint) + .forEach(worldMapPointManager::add); } - - Arrays.stream(QuestStartLocation.values()) - .map(this::createQuestStartPoint) - .forEach(worldMapPointManager::add); - return true; }); }