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 9cc903f621..67777f2987 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 8732dfbf92..30b682553d 100644
--- a/runelite-api/src/main/java/net/runelite/api/GroundObject.java
+++ b/runelite-api/src/main/java/net/runelite/api/GroundObject.java
@@ -42,4 +42,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 94e1d09bc2..40c4e57457 100644
--- a/runelite-api/src/main/java/net/runelite/api/WallObject.java
+++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java
@@ -27,37 +27,46 @@ package net.runelite.api;
import java.awt.Shape;
/**
- * Represents the wall of a tile, which is an un-passable boundary.
+ * Represents one or two walls on a tile
*/
public interface WallObject extends TileObject
{
/**
- * Gets the first orientation of the wall.
- *
- * @return the first orientation, 0-2048 where 0 is north
+ * 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();
/**
- * Gets the second orientation value of the wall.
- *
- * @return the second orientation, 0-2048 where 0 is north
+ * 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();
/**
- * Gets the boundary configuration of the wall.
- *
- * @return the boundary configuration
+ * A bitfield containing various flags:
+ * {@code
+ * object type id = bits & 0x20
+ * orientation (0-3) = bits >>> 6 & 3
+ * supports items = bits >>> 8 & 1
+ * }
*/
int getConfig();
- Renderable getRenderable1();
- Renderable getRenderable2();
-
- Model getModelA();
- Model getModelB();
-
/**
* Gets the convex hull of the objects model.
*
@@ -66,4 +75,10 @@ public interface WallObject extends TileObject
*/
Shape getConvexHull();
Shape getConvexHull2();
+
+ Renderable getRenderable1();
+ Renderable getRenderable2();
+
+ Model getModelA();
+ Model getModelB();
}
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 aa5c7b17a6..0c05ff3e1e 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
@@ -551,8 +551,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/callback/ClientThread.java b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java
index 3a650b0e85..6c1a9e7024 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
@@ -127,6 +127,10 @@ public class ClientThread implements Executor
{
ir.remove();
}
+ else
+ {
+ log.trace("Deferring task {}", r);
+ }
}
}
}
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/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/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());
+ }
+ });
}
}
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 6e740cc471..9893f002dc 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
@@ -128,7 +128,6 @@ public class MenuEntrySwapperPlugin extends Plugin
MenuAction.ITEM_THIRD_OPTION,
MenuAction.ITEM_FOURTH_OPTION,
MenuAction.ITEM_FIFTH_OPTION,
- MenuAction.EXAMINE_ITEM,
MenuAction.ITEM_USE
);
@@ -791,7 +790,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);
}
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;
});
}
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),
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);
}
}
}
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 22e46213e2..2e00dae0d6 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
@@ -187,6 +187,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
}