diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java
index f074f6010a..cb48995317 100644
--- a/runelite-api/src/main/java/net/runelite/api/Client.java
+++ b/runelite-api/src/main/java/net/runelite/api/Client.java
@@ -1394,24 +1394,20 @@ public interface Client extends GameEngine
void queueChangedSkill(Skill skill);
/**
- * Sets a mapping of sprites to override.
+ * Gets a mapping of sprites to override.
*
* The key value in the map corresponds to the ID of the sprite,
* and the value the sprite to replace it with.
- *
- * @param overrides the sprites to override
*/
- void setSpriteOverrides(Map overrides);
+ Map getSpriteOverrides();
/**
- * Sets a mapping of widget sprites to override.
+ * Gets a mapping of widget sprites to override.
*
* The key value in the map corresponds to the packed widget ID,
* and the value the sprite to replace the widgets sprite with.
- *
- * @param overrides the sprites to override
*/
- void setWidgetSpriteOverrides(Map overrides);
+ Map getWidgetSpriteOverrides();
/**
* Sets the compass sprite.
@@ -1420,6 +1416,13 @@ public interface Client extends GameEngine
*/
void setCompass(SpritePixels spritePixels);
+ /**
+ * Returns widget sprite cache, to be used with {@link Client#getSpriteOverrides()}
+ *
+ * @return the cache
+ */
+ NodeCache getWidgetSpriteCache();
+
/**
* Gets the current server tick count.
*
diff --git a/runelite-api/src/main/java/net/runelite/api/NodeCache.java b/runelite-api/src/main/java/net/runelite/api/NodeCache.java
new file mode 100644
index 0000000000..c6337fd735
--- /dev/null
+++ b/runelite-api/src/main/java/net/runelite/api/NodeCache.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018, Tomas Slusny
+ * 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.api;
+
+/**
+ * Represents a doubly linked node cache.
+ */
+public interface NodeCache
+{
+ /**
+ * Resets cache.
+ */
+ void reset();
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java
index afccecf6d5..9b54d4e69c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java
@@ -32,8 +32,6 @@ import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
@@ -80,13 +78,7 @@ public class InterfaceStylesPlugin extends Plugin
@Override
protected void startUp() throws Exception
{
- clientThread.invoke(() ->
- {
- overrideSprites();
- overrideWidgetSprites();
- restoreWidgetDimensions();
- adjustWidgetDimensions();
- });
+ clientThread.invoke(this::updateAllOverrides);
}
@Override
@@ -104,14 +96,7 @@ public class InterfaceStylesPlugin extends Plugin
{
if (config.getGroup().equals("interfaceStyles"))
{
- clientThread.invoke(() ->
- {
- removeGameframe();
- overrideSprites();
- overrideWidgetSprites();
- restoreWidgetDimensions();
- adjustWidgetDimensions();
- });
+ clientThread.invoke(this::updateAllOverrides);
}
}
@@ -121,10 +106,17 @@ public class InterfaceStylesPlugin extends Plugin
adjustWidgetDimensions();
}
+ private void updateAllOverrides()
+ {
+ removeGameframe();
+ overrideSprites();
+ overrideWidgetSprites();
+ restoreWidgetDimensions();
+ adjustWidgetDimensions();
+ }
+
private void overrideSprites()
{
- Map overrides = new HashMap<>();
-
for (SpriteOverride spriteOverride : SpriteOverride.values())
{
for (Skin skin : spriteOverride.getSkin())
@@ -139,19 +131,25 @@ public class InterfaceStylesPlugin extends Plugin
}
else
{
- overrides.put(spriteOverride.getSpriteID(), spritePixels);
+ client.getSpriteOverrides().put(spriteOverride.getSpriteID(), spritePixels);
}
}
}
}
+ }
- client.setSpriteOverrides(overrides);
+ private void restoreSprites()
+ {
+ client.getWidgetSpriteCache().reset();
+
+ for (SpriteOverride spriteOverride : SpriteOverride.values())
+ {
+ client.getSpriteOverrides().remove(spriteOverride.getSpriteID());
+ }
}
private void overrideWidgetSprites()
{
- Map widgetOverrides = new HashMap<>();
-
for (WidgetOverride widgetOverride : WidgetOverride.values())
{
if (widgetOverride.getSkin() == config.skin())
@@ -162,13 +160,22 @@ public class InterfaceStylesPlugin extends Plugin
{
for (WidgetInfo widgetInfo : widgetOverride.getWidgetInfo())
{
- widgetOverrides.put(widgetInfo.getPackedId(), spritePixels);
+ client.getWidgetSpriteOverrides().put(widgetInfo.getPackedId(), spritePixels);
}
}
}
}
+ }
- client.setWidgetSpriteOverrides(widgetOverrides);
+ private void restoreWidgetSprites()
+ {
+ for (WidgetOverride widgetOverride : WidgetOverride.values())
+ {
+ for (WidgetInfo widgetInfo : widgetOverride.getWidgetInfo())
+ {
+ client.getWidgetSpriteOverrides().remove(widgetInfo.getPackedId());
+ }
+ }
}
private SpritePixels getFileSpritePixels(String file, String subfolder)
@@ -292,8 +299,8 @@ public class InterfaceStylesPlugin extends Plugin
private void removeGameframe()
{
- client.setSpriteOverrides(null);
- client.setWidgetSpriteOverrides(null);
+ restoreSprites();
+ restoreWidgetSprites();
BufferedImage compassImage = spriteManager.getSprite(SpriteID.COMPASS_TEXTURE, 0);
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java
index 272ec7e2c6..efe5ee605c 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java
@@ -25,6 +25,7 @@
*/
package net.runelite.mixins;
+import java.util.HashMap;
import java.util.Map;
import net.runelite.api.SpritePixels;
import net.runelite.api.mixins.Copy;
@@ -39,24 +40,23 @@ import net.runelite.rs.api.RSSpritePixels;
public abstract class SpriteMixin implements RSClient
{
@Inject
- private static Map spriteOverrides;
+ private static final Map spriteOverrides = new HashMap();
@Inject
- private static Map widgetSpriteOverrides;
+ private static final Map widgetSpriteOverrides = new HashMap();
@Inject
@Override
- public void setSpriteOverrides(Map overrides)
+ public Map getSpriteOverrides()
{
- getWidgetSpriteCache().reset();
- spriteOverrides = overrides;
+ return spriteOverrides;
}
@Inject
@Override
- public void setWidgetSpriteOverrides(Map overrides)
+ public Map getWidgetSpriteOverrides()
{
- widgetSpriteOverrides = overrides;
+ return widgetSpriteOverrides;
}
@Copy("getSpriteAsSpritePixels")
@@ -68,14 +68,11 @@ public abstract class SpriteMixin implements RSClient
@Replace("getSpriteAsSpritePixels")
public static RSSpritePixels rl$loadSprite(RSIndexDataBase var0, int var1, int var2)
{
- if (spriteOverrides != null)
- {
- SpritePixels sprite = spriteOverrides.get(var1);
+ SpritePixels sprite = spriteOverrides.get(var1);
- if (sprite != null)
- {
- return (RSSpritePixels) sprite;
- }
+ if (sprite != null)
+ {
+ return (RSSpritePixels) sprite;
}
return rs$loadSprite(var0, var1, var2);
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/WidgetSpriteMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/WidgetSpriteMixin.java
index 95821b0f26..12001fb4c8 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/WidgetSpriteMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/WidgetSpriteMixin.java
@@ -49,7 +49,7 @@ public abstract class WidgetSpriteMixin implements RSWidget
@Replace("getWidgetSprite")
public RSSpritePixels rl$getWidgetSprite(boolean var1)
{
- if (getSpriteId() != -1 && widgetSpriteOverrides != null)
+ if (getSpriteId() != -1)
{
SpritePixels sprite = widgetSpriteOverrides.get(getId());
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
index ee72bd1e3a..a54f253ae6 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
@@ -645,6 +645,7 @@ public interface RSClient extends RSGameEngine, Client
void setCompass(SpritePixels spritePixels);
@Import("widgetSpriteCache")
+ @Override
RSNodeCache getWidgetSpriteCache();
@Import("oculusOrbState")
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNodeCache.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNodeCache.java
index 7a721cde0c..fef11bb370 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSNodeCache.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNodeCache.java
@@ -24,9 +24,10 @@
*/
package net.runelite.rs.api;
+import net.runelite.api.NodeCache;
import net.runelite.mapping.Import;
-public interface RSNodeCache
+public interface RSNodeCache extends NodeCache
{
@Import("get")
RSCacheableNode get(long id);