diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 22508e9813..be5efa9081 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -27,9 +27,6 @@ package net.runelite.client.plugins; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; -import java.util.Collection; -import java.util.Collections; -import net.runelite.client.ui.overlay.Overlay; public abstract class Plugin implements Module { @@ -52,15 +49,4 @@ public abstract class Plugin implements Module { return injector; } - - public Overlay getOverlay() - { - return null; - } - - public Collection getOverlays() - { - Overlay overlay = getOverlay(); - return overlay != null ? Collections.singletonList(overlay) : Collections.EMPTY_LIST; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 6ee7d8eaa0..b2156d9594 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -26,8 +26,6 @@ package net.runelite.client.plugins.agility; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -65,7 +63,7 @@ import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( @@ -83,11 +81,13 @@ public class AgilityPlugin extends Plugin private Tile markOfGrace; @Inject - @Getter - private AgilityOverlay overlay; + private OverlayManager overlayManager; @Inject - private LapCounterOverlay lapOverlay; + private AgilityOverlay agilityOverlay; + + @Inject + private LapCounterOverlay lapCounterOverlay; @Inject private Notifier notifier; @@ -114,14 +114,17 @@ public class AgilityPlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(overlay, lapOverlay); + overlayManager.add(agilityOverlay); + overlayManager.add(lapCounterOverlay); } @Override protected void shutDown() throws Exception { + overlayManager.remove(agilityOverlay); + overlayManager.remove(lapCounterOverlay); markOfGrace = null; obstacles.clear(); session = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java index a53503e397..37e3323c5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java @@ -52,6 +52,7 @@ import net.runelite.client.plugins.PluginDescriptor; import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING; import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE_CASTING; import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Attack Styles" @@ -73,6 +74,9 @@ public class AttackStylesPlugin extends Plugin @Inject private AttackStylesConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private AttackStylesOverlay overlay; @@ -82,16 +86,11 @@ public class AttackStylesPlugin extends Plugin return configManager.getConfig(AttackStylesConfig.class); } - @Override - public AttackStylesOverlay getOverlay() - { - return overlay; - } - - @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + if (client.getGameState() == GameState.LOGGED_IN) { updateWarnedSkills(config.warnForAttack(), Skill.ATTACK); @@ -111,6 +110,7 @@ public class AttackStylesPlugin extends Plugin @Override protected void shutDown() { + overlayManager.remove(overlay); hideWarnedStyles(false); processWidgets(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java index ea4861ccd2..140a7456f7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java @@ -45,7 +45,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Barbarian Assault" @@ -63,6 +63,9 @@ public class BarbarianAssaultPlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private BarbarianAssaultConfig config; @@ -78,6 +81,7 @@ public class BarbarianAssaultPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); font = FontManager.getRunescapeFont() .deriveFont(Font.BOLD, 24); @@ -87,6 +91,12 @@ public class BarbarianAssaultPlugin extends Plugin } } + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); + } + @Subscribe public void onGameTick(GameTick event) { @@ -155,12 +165,6 @@ public class BarbarianAssaultPlugin extends Plugin } } - @Override - public Overlay getOverlay() - { - return overlay; - } - public Font getFont() { return font; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java index c77c2954df..96e8821482 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java @@ -28,7 +28,6 @@ import com.google.common.collect.Sets; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -64,7 +63,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.StackFormatter; import net.runelite.http.api.item.ItemPrice; @@ -88,26 +87,19 @@ public class BarrowsPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final Set walls = new HashSet<>(); + @Getter(AccessLevel.PACKAGE) private final Set ladders = new HashSet<>(); + + @Inject + private OverlayManager overlayManager; + @Inject private BarrowsOverlay barrowsOverlay; @Inject private BarrowsBrotherSlainOverlay brotherOverlay; - @Provides - BarrowsConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(BarrowsConfig.class); - } - - @Override - public Collection getOverlays() - { - return Arrays.asList(barrowsOverlay, brotherOverlay); - } - @Inject private Client client; @@ -122,9 +114,24 @@ public class BarrowsPlugin extends Plugin private long chestPrice; + @Provides + BarrowsConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(BarrowsConfig.class); + } + + @Override + protected void startUp() throws Exception + { + overlayManager.add(barrowsOverlay); + overlayManager.add(brotherOverlay); + } + @Override protected void shutDown() { + overlayManager.remove(barrowsOverlay); + overlayManager.remove(brotherOverlay); walls.clear(); ladders.clear(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java index f9c63b4752..7eff2c1ed4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java @@ -26,8 +26,6 @@ package net.runelite.client.plugins.blastfurnace; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; @@ -41,7 +39,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Blast Furnace" @@ -56,6 +54,9 @@ public class BlastFurnacePlugin extends Plugin @Getter(AccessLevel.PACKAGE) private GameObject barDispenser; + @Inject + private OverlayManager overlayManager; + @Inject private BlastFurnaceOverlay overlay; @@ -65,9 +66,20 @@ public class BlastFurnacePlugin extends Plugin @Inject private BlastFurnaceClickBoxOverlay clickBoxOverlay; + @Override + protected void startUp() throws Exception + { + overlayManager.add(overlay); + overlayManager.add(cofferOverlay); + overlayManager.add(clickBoxOverlay); + } + @Override protected void shutDown() { + overlayManager.remove(overlay); + overlayManager.remove(cofferOverlay); + overlayManager.remove(clickBoxOverlay); conveyorBelt = null; barDispenser = null; } @@ -78,12 +90,6 @@ public class BlastFurnacePlugin extends Plugin return configManager.getConfig(BlastFurnaceConfig.class); } - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, cofferOverlay, clickBoxOverlay); - } - @Subscribe public void onGameObjectSpawn(GameObjectSpawned event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java index 2c167f0a0f..28f6677ea3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java @@ -26,8 +26,6 @@ package net.runelite.client.plugins.blastmine; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; @@ -44,7 +42,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor(name = "Blast Mine") public class BlastMinePlugin extends Plugin @@ -52,6 +50,9 @@ public class BlastMinePlugin extends Plugin @Getter private final Map rocks = new HashMap<>(); + @Inject + private OverlayManager overlayManager; + @Inject private Client client; @@ -68,14 +69,17 @@ public class BlastMinePlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(blastMineRockOverlay, blastMineOreCountOverlay); + overlayManager.add(blastMineRockOverlay); + overlayManager.add(blastMineOreCountOverlay); } @Override protected void shutDown() throws Exception { + overlayManager.remove(blastMineRockOverlay); + overlayManager.remove(blastMineOreCountOverlay); final Widget blastMineWidget = client.getWidget(WidgetInfo.BLAST_MINE); if (blastMineWidget != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java index b60c1a01d5..b91fec472e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java @@ -44,7 +44,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.SkillIconManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( @@ -78,6 +78,9 @@ public class BoostsPlugin extends Plugin @Inject private InfoBoxManager infoBoxManager; + @Inject + private OverlayManager overlayManager; + @Inject private BoostsOverlay boostsOverlay; @@ -100,15 +103,10 @@ public class BoostsPlugin extends Plugin return configManager.getConfig(BoostsConfig.class); } - @Override - public Overlay getOverlay() - { - return boostsOverlay; - } - @Override protected void startUp() { + overlayManager.add(boostsOverlay); updateShownSkills(config.enableSkill()); Arrays.fill(lastSkillLevels, -1); overallIcon = skillIconManager.getSkillImage(Skill.OVERALL); @@ -117,6 +115,7 @@ public class BoostsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(boostsOverlay); infoBoxManager.removeIf(t -> t instanceof BoostIndicator || t instanceof StatChangeIndicator); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index 598597911b..28ec9c5473 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -29,8 +29,6 @@ import com.google.inject.Provides; import java.awt.Color; import java.time.temporal.ChronoUnit; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -59,7 +57,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( @@ -97,6 +95,9 @@ public class CannonPlugin extends Plugin @Inject private Notifier notifier; + @Inject + private OverlayManager overlayManager; + @Inject private CannonOverlay cannonOverlay; @@ -119,14 +120,17 @@ public class CannonPlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(cannonOverlay, cannonSpotOverlay); + overlayManager.add(cannonOverlay); + overlayManager.add(cannonSpotOverlay); } @Override protected void shutDown() throws Exception { + overlayManager.remove(cannonOverlay); + overlayManager.remove(cannonSpotOverlay); cannonPlaced = false; cannonPosition = null; cballsLeft = 0; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java index 369bc91212..40df429edf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java @@ -41,7 +41,7 @@ import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor(name = "Cerberus") @Singleton @@ -50,21 +50,25 @@ public class CerberusPlugin extends Plugin @Getter private final List ghosts = new ArrayList<>(); + @Inject + private OverlayManager overlayManager; + @Inject private CerberusOverlay overlay; + @Override + protected void startUp() throws Exception + { + overlayManager.add(overlay); + } + @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); ghosts.clear(); } - @Override - public Overlay getOverlay() - { - return overlay; - } - @Subscribe public void onGameStateChange(GameStateChanged event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index b8ffa93695..53e1057c7b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -33,7 +33,6 @@ import java.io.IOException; import java.time.Duration; import java.time.Instant; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.stream.Stream; import javax.imageio.ImageIO; @@ -82,7 +81,7 @@ import net.runelite.client.plugins.cluescrolls.clues.MapClue; import net.runelite.client.plugins.cluescrolls.clues.NpcClueScroll; import net.runelite.client.plugins.cluescrolls.clues.ObjectClueScroll; import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.QueryRunner; import net.runelite.client.util.Text; @@ -128,6 +127,9 @@ public class ClueScrollPlugin extends Plugin @Inject private QueryRunner queryRunner; + @Inject + private OverlayManager overlayManager; + @Inject private ClueScrollOverlay clueScrollOverlay; @@ -172,15 +174,20 @@ public class ClueScrollPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void startUp() throws Exception { - resetClue(); + overlayManager.add(clueScrollOverlay); + overlayManager.add(clueScrollEmoteOverlay); + overlayManager.add(clueScrollWorldOverlay); } @Override - public Collection getOverlays() + protected void shutDown() throws Exception { - return Arrays.asList(clueScrollOverlay, clueScrollEmoteOverlay, clueScrollWorldOverlay); + overlayManager.remove(clueScrollOverlay); + overlayManager.remove(clueScrollEmoteOverlay); + overlayManager.remove(clueScrollWorldOverlay); + resetClue(); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java index 824d5373e3..2563fb28f0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java @@ -58,7 +58,7 @@ import net.runelite.api.events.ProjectileMoved; import net.runelite.client.callback.ClientThread; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Demonic Gorillas" @@ -69,6 +69,9 @@ public class DemonicGorillaPlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private DemonicGorillaOverlay overlay; @@ -87,6 +90,7 @@ public class DemonicGorillaPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); gorillas = new HashMap<>(); recentBoulders = new ArrayList<>(); pendingAttacks = new ArrayList<>(); @@ -97,18 +101,13 @@ public class DemonicGorillaPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); gorillas = null; recentBoulders = null; pendingAttacks = null; memorizedPlayers = null; } - @Override - public Overlay getOverlay() - { - return overlay; - } - private void clear() { recentBoulders.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index f76866e484..3c96f34de1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -32,8 +32,6 @@ import com.google.inject.Provides; import java.awt.Font; import java.awt.image.BufferedImage; import static java.lang.Math.min; -import java.util.Arrays; -import java.util.Collection; import javax.imageio.ImageIO; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; @@ -52,7 +50,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import org.slf4j.LoggerFactory; @PluginDescriptor( @@ -68,6 +66,9 @@ public class DevToolsPlugin extends Plugin @Inject private PluginToolbar pluginToolbar; + @Inject + private OverlayManager overlayManager; + @Inject private DevToolsOverlay overlay; @@ -120,6 +121,12 @@ public class DevToolsPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(locationOverlay); + overlayManager.add(sceneOverlay); + overlayManager.add(cameraOverlay); + overlayManager.add(worldMapLocationOverlay); + final DevToolsPanel panel = injector.getInstance(DevToolsPanel.class); BufferedImage icon; @@ -144,15 +151,14 @@ public class DevToolsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(locationOverlay); + overlayManager.remove(sceneOverlay); + overlayManager.remove(cameraOverlay); + overlayManager.remove(worldMapLocationOverlay); pluginToolbar.removeNavigation(navButton); } - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, locationOverlay, sceneOverlay, cameraOverlay, worldMapLocationOverlay); - } - @Subscribe public void onCommand(CommandExecuted commandExecuted) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java index ae7f5be097..81e02a067f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java @@ -34,7 +34,7 @@ import net.runelite.api.queries.NPCQuery; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.QueryRunner; @PluginDescriptor( @@ -48,15 +48,24 @@ public class FightCavePlugin extends Plugin @Inject private QueryRunner queryRunner; + @Inject + private OverlayManager overlayManager; + @Inject private FightCaveOverlay overlay; private JadAttack attack; @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } @Schedule( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index a23e89514c..93c1061886 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -30,7 +30,6 @@ import com.google.common.primitives.Ints; import com.google.inject.Provides; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Comparator; import java.util.List; import javax.inject.Inject; @@ -50,7 +49,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.QueryRunner; @PluginDescriptor( @@ -71,6 +70,9 @@ public class FishingPlugin extends Plugin @Inject private QueryRunner queryRunner; + @Inject + private OverlayManager overlayManager; + @Inject private FishingConfig config; @@ -94,14 +96,18 @@ public class FishingPlugin extends Plugin @Override protected void startUp() throws Exception { - // Initialize overlay config + overlayManager.add(overlay); + overlayManager.add(spotOverlay); + overlayManager.add(fishingSpotMinimapOverlay); updateConfig(); } @Override - public Collection getOverlays() + protected void shutDown() throws Exception { - return Arrays.asList(overlay, spotOverlay, fishingSpotMinimapOverlay); + overlayManager.remove(overlay); + overlayManager.remove(spotOverlay); + overlayManager.remove(fishingSpotMinimapOverlay); } public FishingSession getSession() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java index 5ccf90b9d7..9428b0e4a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java @@ -33,7 +33,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.DrawManager; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; /** * FPS Control has two primary areas, this plugin class just keeps those areas up to date and handles setup / teardown. @@ -53,6 +53,9 @@ public class FpsPlugin extends Plugin { static final String CONFIG_GROUP_KEY = "fpscontrol"; + @Inject + private OverlayManager overlayManager; + @Inject private FpsOverlay overlay; @@ -68,12 +71,6 @@ public class FpsPlugin extends Plugin return configManager.getConfig(FpsConfig.class); } - @Override - public Overlay getOverlay() - { - return overlay; - } - @Subscribe public void onConfigChanged(ConfigChanged event) { @@ -93,6 +90,7 @@ public class FpsPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); drawManager.registerEveryFrameListener(drawListener); drawListener.reloadConfig(); } @@ -100,6 +98,7 @@ public class FpsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); drawManager.unregisterEveryFrameListener(drawListener); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index 0d2cf5daab..4a979d2c75 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -48,7 +48,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ChatboxInputManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Text; @Slf4j @@ -69,6 +69,9 @@ public class FriendNotesPlugin extends Plugin @Inject private ConfigManager configManager; + @Inject + private OverlayManager overlayManager; + @Inject private FriendNoteOverlay overlay; @@ -79,9 +82,15 @@ public class FriendNotesPlugin extends Plugin private HoveredFriend hoveredFriend = null; @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 1e4513c5a9..fb9ef35b2f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -81,7 +81,7 @@ import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.BOTH; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.NAME; import static net.runelite.client.plugins.grounditems.config.MenuHighlightMode.OPTION; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.http.api.item.ItemPrice; @PluginDescriptor( @@ -140,6 +140,9 @@ public class GroundItemsPlugin extends Plugin @Inject private ItemManager itemManager; + @Inject + private OverlayManager overlayManager; + @Inject private GroundItemsConfig config; @@ -171,15 +174,10 @@ public class GroundItemsPlugin extends Plugin return configManager.getConfig(GroundItemsConfig.class); } - @Override - public Overlay getOverlay() - { - return overlay; - } - @Override protected void startUp() { + overlayManager.add(overlay); reset(); mouseManager.registerMouseListener(inputListener); keyManager.registerKeyListener(inputListener); @@ -188,6 +186,7 @@ public class GroundItemsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); mouseManager.unregisterMouseListener(inputListener); keyManager.unregisterKeyListener(inputListener); groundItems.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java index d6ca3ce744..090420bee1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java @@ -56,6 +56,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( @@ -85,6 +86,9 @@ public class GroundMarkerPlugin extends Plugin @Inject private ConfigManager configManager; + @Inject + private OverlayManager overlayManager; + @Inject private GroundMarkerOverlay overlay; @@ -286,20 +290,17 @@ public class GroundMarkerPlugin extends Plugin @Override protected void startUp() { + overlayManager.add(overlay); keyManager.registerKeyListener(inputListener); } @Override protected void shutDown() { + overlayManager.remove(overlay); keyManager.unregisterKeyListener(inputListener); } - @Override - public GroundMarkerOverlay getOverlay() - { - return overlay; - } protected void markTile(LocalPoint localPoint) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java index 4736adfc47..ad94be4af4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java @@ -27,7 +27,6 @@ package net.runelite.client.plugins.herbiboars; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -58,7 +57,7 @@ import net.runelite.api.events.VarbitChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( @@ -96,24 +95,15 @@ public class HerbiboarPlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private HerbiboarOverlay overlay; @Inject private HerbiboarMinimapOverlay minimapOverlay; - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, minimapOverlay); - } - - @Provides - HerbiboarConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(HerbiboarConfig.class); - } - @Getter private boolean inHerbiboarArea; @@ -145,12 +135,27 @@ public class HerbiboarPlugin extends Plugin @Setter private int finishId; + @Provides + HerbiboarConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(HerbiboarConfig.class); + } + @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(minimapOverlay); inHerbiboarArea = checkArea(); } + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); + overlayManager.remove(minimapOverlay); + } + private void updateTrailData() { currentTrail = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java index 094c03c8e1..a863e6d64b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java @@ -48,7 +48,7 @@ import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.util.QueryRunner; +import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( @@ -60,10 +60,9 @@ public class HunterPlugin extends Plugin private Client client; @Inject - private QueryRunner queryRunner; + private OverlayManager overlayManager; @Inject - @Getter private TrapOverlay overlay; @Inject @@ -89,12 +88,14 @@ public class HunterPlugin extends Plugin @Override protected void startUp() { + overlayManager.add(overlay); overlay.updateConfig(); } @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); lastActionTime = Instant.ofEpochMilli(0); traps.clear(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java index 9e93ad2376..42766db2b2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java @@ -28,8 +28,6 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.Color; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.List; import javax.inject.Inject; import lombok.AccessLevel; @@ -42,8 +40,7 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.util.QueryRunner; +import net.runelite.client.ui.overlay.OverlayManager; /** * @author robin @@ -56,6 +53,9 @@ public class ImplingsPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final List implings = new ArrayList<>(); + @Inject + private OverlayManager overlayManager; + @Inject private ImplingsOverlay overlay; @@ -65,19 +65,25 @@ public class ImplingsPlugin extends Plugin @Inject private ImplingsConfig config; - @Inject - private QueryRunner queryRunner; - @Provides ImplingsConfig getConfig(ConfigManager configManager) { return configManager.getConfig(ImplingsConfig.class); } + @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(overlay, minimapOverlay); + overlayManager.add(overlay); + overlayManager.add(minimapOverlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); + overlayManager.remove(minimapOverlay); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java index c8ac26550a..266ed52f54 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java @@ -37,7 +37,7 @@ import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Instance Map" @@ -49,6 +49,9 @@ public class InstanceMapPlugin extends Plugin @Inject private InstanceMapInputListener inputListener; + @Inject + private OverlayManager overlayManager; + @Inject private InstanceMapOverlay overlay; @@ -80,6 +83,7 @@ public class InstanceMapPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); addCustomOptions(); keyManager.registerKeyListener(inputListener); mouseManager.registerMouseListener(inputListener); @@ -89,6 +93,7 @@ public class InstanceMapPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); removeCustomOptions(); keyManager.unregisterKeyListener(inputListener); mouseManager.registerMouseListener(inputListener); @@ -127,12 +132,6 @@ public class InstanceMapPlugin extends Plugin } } - @Override - public Overlay getOverlay() - { - return overlay; - } - public void showMap() { overlay.setShowMap(true); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 251b5b1f17..03a255bb82 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -24,22 +24,25 @@ */ package net.runelite.client.plugins.itemcharges; -import javax.inject.Inject; -import net.runelite.api.ChatMessageType; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.ui.overlay.Overlay; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; +import javax.inject.Inject; +import net.runelite.api.ChatMessageType; import net.runelite.api.events.ChatMessage; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; +import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Item Charges" ) public class ItemChargePlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private ItemChargeOverlay overlay; @@ -49,18 +52,24 @@ public class ItemChargePlugin extends Plugin @Inject private ItemChargeConfig config; - @Override - public Overlay getOverlay() - { - return overlay; - } - @Provides ItemChargeConfig getConfig(ConfigManager configManager) { return configManager.getConfig(ItemChargeConfig.class); } + @Override + protected void startUp() throws Exception + { + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); + } + @Subscribe public void onChatMessage(ChatMessage event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java index c83f92a657..a166b4df66 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java @@ -29,7 +29,7 @@ import javax.inject.Inject; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Item Prices", @@ -38,7 +38,8 @@ import net.runelite.client.ui.overlay.Overlay; public class ItemPricesPlugin extends Plugin { @Inject - private ItemPricesConfig config; + private OverlayManager overlayManager; + @Inject private ItemPricesOverlay overlay; @@ -49,8 +50,14 @@ public class ItemPricesPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java index 9c3d332df8..1572842e9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java @@ -29,13 +29,16 @@ import com.google.inject.Provides; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Item Stats" ) public class ItemStatPlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private ItemStatOverlay overlay; @@ -46,8 +49,14 @@ public class ItemStatPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index 0a57cb1313..f46571e397 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -47,7 +47,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Kourend Library" @@ -66,6 +66,9 @@ public class KourendLibraryPlugin extends Plugin @Inject private Library library; + @Inject + private OverlayManager overlayManager; + @Inject private KourendLibraryOverlay overlay; @@ -81,6 +84,7 @@ public class KourendLibraryPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(overlay); Book.fillImages(itemManager); panel = injector.getInstance(KourendLibraryPanel.class); @@ -105,15 +109,10 @@ public class KourendLibraryPlugin extends Plugin @Override protected void shutDown() { + overlayManager.remove(overlay); pluginToolbar.removeNavigation(navButton); } - @Override - public Overlay getOverlay() - { - return overlay; - } - @Subscribe private void onMenuOptionClicked(MenuOptionClicked menuOpt) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index b3a610d547..6a1b7c6fb0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -32,8 +32,6 @@ import com.google.inject.Provides; import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; @@ -72,7 +70,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Motherlode Mine", @@ -91,6 +89,9 @@ public class MotherlodePlugin extends Plugin private static final int UPPER_FLOOR_HEIGHT = -500; + @Inject + private OverlayManager overlayManager; + @Inject private MotherlodeOverlay overlay; @@ -132,15 +133,14 @@ public class MotherlodePlugin extends Plugin return configManager.getConfig(MotherlodeConfig.class); } - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, rocksOverlay, motherlodeSackOverlay, motherlodeGemOverlay); - } - @Override protected void startUp() { + overlayManager.add(overlay); + overlayManager.add(rocksOverlay); + overlayManager.add(motherlodeGemOverlay); + overlayManager.add(motherlodeSackOverlay); + session = new MotherlodeSession(); inMlm = checkInMlm(); @@ -153,6 +153,10 @@ public class MotherlodePlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(rocksOverlay); + overlayManager.remove(motherlodeGemOverlay); + overlayManager.remove(motherlodeSackOverlay); session = null; veins.clear(); rocks.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java index ea4a9b3a55..d2f86ef48c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java @@ -29,13 +29,16 @@ import javax.inject.Inject; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Mouse Tooltips" ) public class MouseHighlightPlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private MouseHighlightOverlay overlay; @@ -46,8 +49,14 @@ public class MouseHighlightPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java index e45f4c8e9a..a98431f114 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java @@ -39,7 +39,7 @@ import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Text; @PluginDescriptor( @@ -53,6 +53,9 @@ public class NightmareZonePlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private NightmareZoneConfig config; @@ -64,8 +67,16 @@ public class NightmareZonePlugin extends Plugin private boolean absorptionNotificationSend = true; @Override - protected void shutDown() + protected void startUp() throws Exception { + overlayManager.add(overlay); + overlay.removeAbsorptionCounter(); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); overlay.removeAbsorptionCounter(); } @@ -81,12 +92,6 @@ public class NightmareZonePlugin extends Plugin return configManager.getConfig(NightmareZoneConfig.class); } - @Override - public Overlay getOverlay() - { - return overlay; - } - @Subscribe public void onGameTick(GameTick event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 94dabaa561..581597db8e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -30,8 +30,6 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -62,7 +60,7 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.WildcardMatcher; @PluginDescriptor(name = "NPC Indicators") @@ -85,6 +83,9 @@ public class NpcIndicatorsPlugin extends Plugin @Inject private NpcIndicatorsConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private NpcSceneOverlay npcSceneOverlay; @@ -174,6 +175,8 @@ public class NpcIndicatorsPlugin extends Plugin @Override protected void startUp() throws Exception { + overlayManager.add(npcSceneOverlay); + overlayManager.add(npcMinimapOverlay); keyManager.registerKeyListener(inputListener); highlights = getHighlights(); clientThread.invokeLater(() -> @@ -186,6 +189,8 @@ public class NpcIndicatorsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(npcSceneOverlay); + overlayManager.remove(npcMinimapOverlay); deadNpcsToDisplay.clear(); memorizedNpcs.clear(); spawnedNpcsThisTick.clear(); @@ -321,12 +326,6 @@ public class NpcIndicatorsPlugin extends Plugin lastPlayerLocation = client.getLocalPlayer().getWorldLocation(); } - @Override - public Collection getOverlays() - { - return Arrays.asList(npcSceneOverlay, npcMinimapOverlay); - } - private static boolean isInViewRange(WorldPoint wp1, WorldPoint wp2) { int distance = wp1.distanceTo(wp2); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java index 9d3bd49f24..2e008dc245 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java @@ -41,7 +41,7 @@ import net.runelite.api.WorldType; import net.runelite.api.events.GameStateChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.http.api.hiscore.HiscoreEndpoint; @PluginDescriptor( @@ -52,6 +52,9 @@ public class OpponentInfoPlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private OpponentInfoOverlay overlay; @@ -59,9 +62,15 @@ public class OpponentInfoPlugin extends Plugin private HiscoreEndpoint hiscoreEndpoint = HiscoreEndpoint.NORMAL; @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java index 12824633e3..f8ff927da0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java @@ -27,19 +27,28 @@ package net.runelite.client.plugins.pestcontrol; import javax.inject.Inject; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Pest Control" ) public class PestControlPlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private PestControlOverlay overlay; @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index 00d4c2736e..60bc8eb93e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -24,27 +24,14 @@ */ package net.runelite.client.plugins.playerindicators; -import com.google.common.collect.Sets; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.Color; -import java.util.Collection; import javax.inject.Inject; import net.runelite.api.ClanMemberRank; import static net.runelite.api.ClanMemberRank.UNRANKED; import net.runelite.api.Client; -import static net.runelite.api.MenuAction.FOLLOW; -import static net.runelite.api.MenuAction.ITEM_USE_ON_PLAYER; -import static net.runelite.api.MenuAction.PLAYER_EIGTH_OPTION; -import static net.runelite.api.MenuAction.PLAYER_FIFTH_OPTION; -import static net.runelite.api.MenuAction.PLAYER_FIRST_OPTION; -import static net.runelite.api.MenuAction.PLAYER_FOURTH_OPTION; -import static net.runelite.api.MenuAction.PLAYER_SECOND_OPTION; -import static net.runelite.api.MenuAction.PLAYER_SEVENTH_OPTION; -import static net.runelite.api.MenuAction.PLAYER_SIXTH_OPTION; -import static net.runelite.api.MenuAction.PLAYER_THIRD_OPTION; -import static net.runelite.api.MenuAction.SPELL_CAST_ON_PLAYER; -import static net.runelite.api.MenuAction.TRADE; +import static net.runelite.api.MenuAction.*; import net.runelite.api.MenuEntry; import net.runelite.api.Player; import net.runelite.api.events.MenuEntryAdded; @@ -52,13 +39,16 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ClanManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Player Indicators" ) public class PlayerIndicatorsPlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private PlayerIndicatorsConfig config; @@ -81,9 +71,17 @@ public class PlayerIndicatorsPlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Sets.newHashSet(playerIndicatorsOverlay, playerIndicatorsMinimapOverlay); + overlayManager.add(playerIndicatorsOverlay); + overlayManager.add(playerIndicatorsMinimapOverlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(playerIndicatorsOverlay); + overlayManager.remove(playerIndicatorsMinimapOverlay); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java index 444c6ba904..ad8a3f17af 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java @@ -27,8 +27,6 @@ package net.runelite.client.plugins.poh; import com.google.common.collect.Sets; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -55,7 +53,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Player-owned House" @@ -68,6 +66,9 @@ public class PohPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final Map pohObjects = new HashMap<>(); + @Inject + private OverlayManager overlayManager; + @Inject private PohOverlay overlay; @@ -80,21 +81,19 @@ public class PohPlugin extends Plugin return configManager.getConfig(PohConfig.class); } - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, burnerOverlay); - } - @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(burnerOverlay); overlay.updateConfig(); } @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(burnerOverlay); pohObjects.clear(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index dbc90fe7ef..23f902a5b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -36,7 +36,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( @@ -55,6 +55,9 @@ public class PrayerPlugin extends Plugin @Inject private SpriteManager spriteManager; + @Inject + private OverlayManager overlayManager; + @Inject private PrayerFlickOverlay overlay; @@ -68,15 +71,16 @@ public class PrayerPlugin extends Plugin } @Override - protected void shutDown() + protected void startUp() { - removeIndicators(); + overlayManager.add(overlay); } @Override - public Overlay getOverlay() + protected void shutDown() { - return overlay; + overlayManager.remove(overlay); + removeIndicators(); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java index c89e1f2db6..12329700d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java @@ -26,11 +26,11 @@ package net.runelite.client.plugins.puzzlesolver; import com.google.inject.Provides; -import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Puzzle Solver" @@ -38,10 +38,10 @@ import net.runelite.client.plugins.PluginDescriptor; public class PuzzleSolverPlugin extends Plugin { @Inject - private PuzzleSolverOverlay puzzleSolverOverlay; + private OverlayManager overlayManager; @Inject - private ScheduledExecutorService executorService; + private PuzzleSolverOverlay overlay; @Provides PuzzleSolverConfig provideConfig(ConfigManager configManager) @@ -50,8 +50,14 @@ public class PuzzleSolverPlugin extends Plugin } @Override - public PuzzleSolverOverlay getOverlay() + protected void startUp() throws Exception { - return puzzleSolverOverlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 27bd48f589..d4f7670f8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -33,7 +33,6 @@ import java.text.DecimalFormat; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.ImageIO; @@ -66,7 +65,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.LayoutSolver; import net.runelite.client.plugins.raids.solver.RotationSolver; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @@ -81,7 +80,7 @@ public class RaidsPlugin extends Plugin private static final String LEVEL_COMPLETE_MESSAGE = "level complete!"; private static final String RAID_COMPLETE_MESSAGE = "Congratulations - your raid is complete!"; private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###.##"); - public static final DecimalFormat POINTS_FORMAT = new DecimalFormat("#,###"); + static final DecimalFormat POINTS_FORMAT = new DecimalFormat("#,###"); private static final String SPLIT_REGEX = "\\s*,\\s*"; private static final Pattern ROTATION_REGEX = Pattern.compile("\\[(.*?)\\]"); @@ -103,6 +102,9 @@ public class RaidsPlugin extends Plugin @Inject private RaidsConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private RaidsOverlay overlay; @@ -139,15 +141,12 @@ public class RaidsPlugin extends Plugin binder.bind(RaidsOverlay.class); } - @Override - public List getOverlays() - { - return Arrays.asList(overlay, pointsOverlay); - } - @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(pointsOverlay); + if (client.getGameState() == GameState.LOGGED_IN) { inRaidChambers = client.getVar(Varbits.IN_RAID) == 1; @@ -160,6 +159,9 @@ public class RaidsPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(pointsOverlay); + if (timer != null) { infoBoxManager.removeInfoBox(timer); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java index 52558203b3..52df8e2400 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java @@ -33,15 +33,15 @@ import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Prayer; -import net.runelite.api.VarPlayer; import net.runelite.api.Skill; +import net.runelite.api.VarPlayer; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor(name = "Regeneration Meter") public class RegenMeterPlugin extends Plugin @@ -49,34 +49,27 @@ public class RegenMeterPlugin extends Plugin private static final int SPEC_REGEN_TICKS = 50; private static final int NORMAL_HP_REGEN_TICKS = 100; - @Inject - private RegenMeterOverlay overlay; - @Inject private Client client; @Inject - RegenMeterConfig config; + private OverlayManager overlayManager; + @Inject + private RegenMeterOverlay overlay; - private int ticksSinceHPRegen; - - private boolean wasRapidHeal; + @Inject + private RegenMeterConfig config; @Getter private double hitpointsPercentage; - - private int ticksSinceSpecRegen; - @Getter private double specialPercentage; - @Override - public Overlay getOverlay() - { - return overlay; - } + private int ticksSinceSpecRegen; + private int ticksSinceHPRegen; + private boolean wasRapidHeal; @Provides RegenMeterConfig provideConfig(ConfigManager configManager) @@ -84,6 +77,18 @@ public class RegenMeterPlugin extends Plugin return configManager.getConfig(RegenMeterConfig.class); } + @Override + protected void startUp() throws Exception + { + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); + } + @Subscribe private void onGameStateChanged(GameStateChanged ev) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java index 6fddefcafd..bf6d8401e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java @@ -49,6 +49,7 @@ import net.runelite.api.events.GroundObjectSpawned; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Rogues' Den" @@ -69,12 +70,21 @@ public class RoguesDenPlugin extends Plugin private Client client; @Inject - @Getter + private OverlayManager overlayManager; + + @Inject private RoguesDenOverlay overlay; @Override - protected void shutDown() + protected void startUp() throws Exception { + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); obstaclesHull.clear(); obstaclesTile.clear(); hasGem = false; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index 70cc70f2f4..3e8e64acd2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -26,8 +26,6 @@ package net.runelite.client.plugins.runecraft; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; @@ -35,7 +33,15 @@ import java.util.regex.Pattern; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; -import net.runelite.api.*; +import net.runelite.api.ChatMessageType; +import net.runelite.api.DecorativeObject; +import net.runelite.api.GameState; +import net.runelite.api.InventoryID; +import net.runelite.api.Item; +import net.runelite.api.ItemID; +import net.runelite.api.NPC; +import net.runelite.api.NpcID; +import net.runelite.api.Query; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectDespawned; @@ -47,7 +53,7 @@ import net.runelite.api.queries.NPCQuery; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.QueryRunner; @PluginDescriptor( @@ -66,6 +72,9 @@ public class RunecraftPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private NPC darkMage; + @Inject + private OverlayManager overlayManager; + @Inject private RunecraftOverlay overlay; @@ -87,21 +96,21 @@ public class RunecraftPlugin extends Plugin return configManager.getConfig(RunecraftConfig.class); } - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, bindNeckOverlay, abyssOverlay); - } - @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(bindNeckOverlay); + overlayManager.add(abyssOverlay); abyssOverlay.updateConfig(); } @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(bindNeckOverlay); + overlayManager.remove(abyssOverlay); abyssObjects.clear(); darkMage = null; degradedPouchInInventory = false; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java index 0395186577..537e0a5a1d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java @@ -29,7 +29,7 @@ import javax.inject.Inject; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Rune Pouch" @@ -37,7 +37,7 @@ import net.runelite.client.ui.overlay.Overlay; public class RunepouchPlugin extends Plugin { @Inject - private ConfigManager configManager; + private OverlayManager overlayManager; @Inject private RunepouchOverlay overlay; @@ -49,8 +49,14 @@ public class RunepouchPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java index 8ea03967b6..afd1b73080 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java @@ -36,7 +36,6 @@ import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.time.Instant; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -53,8 +52,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.screenmarkers.ui.ScreenMarkerPluginPanel; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayRenderer; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Screen Markers" @@ -82,10 +80,10 @@ public class ScreenMarkerPlugin extends Plugin private PluginToolbar pluginToolbar; @Inject - private ScreenMarkerCreationOverlay overlay; + private OverlayManager overlayManager; @Inject - private OverlayRenderer overlayRenderer; + private ScreenMarkerCreationOverlay overlay; private ScreenMarkerMouseListener mouseListener; private ScreenMarkerPluginPanel pluginPanel; @@ -98,20 +96,12 @@ public class ScreenMarkerPlugin extends Plugin private boolean creatingScreenMarker = false; private Point startLocation = null; - @Override - public Collection getOverlays() - { - final List overlays = new ArrayList<>(); - overlays.add(overlay); - overlays.addAll(screenMarkers); - return overlays; - } - @Override protected void startUp() throws Exception { + overlayManager.add(overlay); loadConfig(configManager.getConfiguration(CONFIG_GROUP, CONFIG_KEY)).forEach(screenMarkers::add); - overlayRenderer.rebuildOverlays(); + screenMarkers.forEach(overlayManager::add); pluginPanel = injector.getInstance(ScreenMarkerPluginPanel.class); pluginPanel.init(); @@ -137,10 +127,12 @@ public class ScreenMarkerPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.removeIf(ScreenMarkerOverlay.class::isInstance); + screenMarkers.clear();; pluginToolbar.removeNavigation(navigationButton); setMouseListenerEnabled(false); creatingScreenMarker = false; - screenMarkers.clear(); pluginPanel = null; currentMarker = null; @@ -154,7 +146,8 @@ public class ScreenMarkerPlugin extends Plugin if (screenMarkers.isEmpty() && event.getGroup().equals(CONFIG_GROUP) && event.getKey().equals(CONFIG_KEY)) { loadConfig(event.getNewValue()).forEach(screenMarkers::add); - overlayRenderer.rebuildOverlays(); + overlayManager.removeIf(ScreenMarkerOverlay.class::isInstance); + screenMarkers.forEach(overlayManager::add); } } @@ -197,10 +190,10 @@ public class ScreenMarkerPlugin extends Plugin screenMarkerOverlay.setPreferredSize(overlay.getBounds().getSize()); screenMarkers.add(screenMarkerOverlay); + overlayManager.add(screenMarkerOverlay); + overlayManager.saveOverlay(screenMarkerOverlay); pluginPanel.rebuild(); updateConfig(); - overlayRenderer.saveOverlay(screenMarkerOverlay); - overlayRenderer.rebuildOverlays(); } creatingScreenMarker = false; @@ -219,11 +212,11 @@ public class ScreenMarkerPlugin extends Plugin public void deleteMarker(final ScreenMarkerOverlay marker) { - overlayRenderer.resetOverlay(marker); screenMarkers.remove(marker); + overlayManager.remove(marker); + overlayManager.resetOverlay(marker); pluginPanel.rebuild(); updateConfig(); - overlayRenderer.rebuildOverlays(); } void resizeMarker(Point point) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index 36c95e1ec3..19e116adf2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -81,7 +81,7 @@ import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.DrawManager; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.TitleToolbar; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Text; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; @@ -126,6 +126,9 @@ public class ScreenshotPlugin extends Plugin @Inject private ScreenshotConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private ScreenshotOverlay screenshotOverlay; @@ -161,15 +164,10 @@ public class ScreenshotPlugin extends Plugin return configManager.getConfig(ScreenshotConfig.class); } - @Override - public Overlay getOverlay() - { - return screenshotOverlay; - } - @Override protected void startUp() throws Exception { + overlayManager.add(screenshotOverlay); SCREENSHOT_DIR.mkdirs(); keyManager.registerKeyListener(inputListener); @@ -213,6 +211,7 @@ public class ScreenshotPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(screenshotOverlay); titleToolbar.removeNavigation(titleBarButton); keyManager.unregisterKeyListener(inputListener); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 08d65906d9..8949778242 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -69,7 +69,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.QueryRunner; import net.runelite.client.util.Text; @@ -112,6 +112,9 @@ public class SlayerPlugin extends Plugin @Inject private SlayerConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private SlayerOverlay overlay; @@ -142,30 +145,46 @@ public class SlayerPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private Collection slayerItems = Collections.emptyList(); - private String taskName; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int amount; - private TaskCounter counter; - private int streak; - private int points; - private int cachedXp; - private Instant infoTimer; - private boolean loginFlag; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private int expeditiousChargeCount; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private int slaughterChargeCount; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private String taskName; + + @Getter(AccessLevel.PACKAGE) + private int streak; + + @Getter(AccessLevel.PACKAGE) + private int points; + + private TaskCounter counter; + private int cachedXp; + private Instant infoTimer; + private boolean loginFlag; + @Override protected void startUp() throws Exception { + overlayManager.add(overlay); + overlayManager.add(targetClickboxOverlay); + overlayManager.add(targetMinimapOverlay); + if (client.getGameState() == GameState.LOGGED_IN && config.amount() != -1 && !config.taskName().isEmpty()) { - setPoints(config.points()); - setStreak(config.streak()); + points = config.points(); + streak = config.streak(); setExpeditiousChargeCount(config.expeditious()); setSlaughterChargeCount(config.slaughter()); clientThread.invokeLater(() -> setTask(config.taskName(), config.amount())); @@ -175,6 +194,9 @@ public class SlayerPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(targetClickboxOverlay); + overlayManager.remove(targetMinimapOverlay); removeCounter(); } @@ -199,10 +221,10 @@ public class SlayerPlugin extends Plugin case LOGGED_IN: if (config.amount() != -1 && !config.taskName().isEmpty() - && loginFlag == true) + && loginFlag) { - setPoints(config.points()); - setStreak(config.streak()); + points = config.points(); + streak = config.streak(); setExpeditiousChargeCount(config.expeditious()); setSlaughterChargeCount(config.slaughter()); setTask(config.taskName(), config.amount()); @@ -572,53 +594,6 @@ public class SlayerPlugin extends Plugin return composition; } - //Getters - @Override - public Collection getOverlays() - { - return Arrays.asList(overlay, targetClickboxOverlay, targetMinimapOverlay); - } - - public String getTaskName() - { - return taskName; - } - - void setTaskName(String taskName) - { - this.taskName = taskName; - } - - public int getAmount() - { - return amount; - } - - void setAmount(int amount) - { - this.amount = amount; - } - - public int getStreak() - { - return streak; - } - - void setStreak(int streak) - { - this.streak = streak; - } - - public int getPoints() - { - return points; - } - - void setPoints(int points) - { - this.points = points; - } - //Utils private String capsString(String str) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java index 5d2246303e..e928bdcb8b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.teamcapes; +import com.google.inject.Provides; import java.time.temporal.ChronoUnit; import java.util.Comparator; import java.util.HashMap; @@ -32,7 +33,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.inject.Inject; -import com.google.inject.Provides; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; @@ -40,7 +40,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Team Capes", @@ -52,10 +52,10 @@ public class TeamCapesPlugin extends Plugin private Client client; @Inject - private TeamCapesConfig config; + private OverlayManager overlayManager; @Inject - private TeamCapesOverlay teamCapesOverlay; + private TeamCapesOverlay overlay; // Hashmap of team capes: Key is the teamCape #, Value is the count of teamcapes in the area. private Map teams = new HashMap<>(); @@ -67,14 +67,15 @@ public class TeamCapesPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return teamCapesOverlay; + overlayManager.add(overlay); } @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); teams.clear(); } 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 7a0337b43f..73921f84e9 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 @@ -27,6 +27,7 @@ package net.runelite.client.plugins.tileindicators; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; +import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.Perspective; import net.runelite.api.coords.LocalPoint; @@ -41,7 +42,8 @@ public class TileIndicatorsOverlay extends Overlay private final Client client; private final TileIndicatorsConfig config; - TileIndicatorsOverlay(Client client, TileIndicatorsConfig config) + @Inject + private TileIndicatorsOverlay(Client client, TileIndicatorsConfig config) { this.client = client; this.config = config; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java index 1304673a81..488698ac7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java @@ -26,11 +26,10 @@ package net.runelite.client.plugins.tileindicators; import com.google.inject.Provides; import javax.inject.Inject; -import net.runelite.api.Client; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Tile Indicators", @@ -39,12 +38,10 @@ import net.runelite.client.ui.overlay.Overlay; public class TileIndicatorsPlugin extends Plugin { @Inject - private Client client; + private OverlayManager overlayManager; @Inject - private TileIndicatorsConfig config; - - private TileIndicatorsOverlay tileIndicatorsOverlay; + private TileIndicatorsOverlay overlay; @Provides TileIndicatorsConfig provideConfig(ConfigManager configManager) @@ -55,12 +52,12 @@ public class TileIndicatorsPlugin extends Plugin @Override protected void startUp() throws Exception { - tileIndicatorsOverlay = new TileIndicatorsOverlay(client, config); + overlayManager.add(overlay); } @Override - public Overlay getOverlay() + protected void shutDown() throws Exception { - return tileIndicatorsOverlay; + overlayManager.remove(overlay); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java index 9dfa4cc990..93ed21b7d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java @@ -26,8 +26,6 @@ package net.runelite.client.plugins.tithefarm; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; -import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; @@ -41,7 +39,7 @@ import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( @@ -49,6 +47,9 @@ import net.runelite.client.ui.overlay.Overlay; ) public class TitheFarmPlugin extends Plugin { + @Inject + private OverlayManager overlayManager; + @Inject private TitheFarmPlantOverlay titheFarmOverlay; @@ -65,15 +66,18 @@ public class TitheFarmPlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(titheFarmOverlay, titheFarmSackOverlay); + overlayManager.add(titheFarmOverlay); + overlayManager.add(titheFarmSackOverlay); + titheFarmOverlay.updateConfig(); } @Override - public void startUp() throws Exception + protected void shutDown() throws Exception { - titheFarmOverlay.updateConfig(); + overlayManager.remove(titheFarmOverlay); + overlayManager.remove(titheFarmSackOverlay); } @Subscribe 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 01a4167f96..3215a87b63 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 @@ -28,8 +28,6 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.time.Duration; import java.time.Instant; -import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; @@ -52,7 +50,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Woodcutting" @@ -66,6 +64,9 @@ public class WoodcuttingPlugin extends Plugin @Inject private Client client; + @Inject + private OverlayManager overlayManager; + @Inject private WoodcuttingOverlay overlay; @@ -91,14 +92,17 @@ public class WoodcuttingPlugin extends Plugin } @Override - public Collection getOverlays() + protected void startUp() throws Exception { - return Arrays.asList(overlay, treesOverlay); + overlayManager.add(overlay); + overlayManager.add(treesOverlay); } @Override protected void shutDown() throws Exception { + overlayManager.remove(overlay); + overlayManager.remove(treesOverlay); treeObjects.clear(); session = null; axe = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java index 78fdd1223a..bc98545675 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java @@ -43,7 +43,7 @@ import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.task.Schedule; -import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "XP Globes" @@ -62,6 +62,9 @@ public class XpGlobesPlugin extends Plugin @Inject private XpGlobesConfig config; + @Inject + private OverlayManager overlayManager; + @Inject private XpGlobesOverlay overlay; @@ -72,9 +75,15 @@ public class XpGlobesPlugin extends Plugin } @Override - public Overlay getOverlay() + protected void startUp() throws Exception { - return overlay; + overlayManager.add(overlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(overlay); } @Subscribe 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 new file mode 100644 index 0000000000..8ba84c013b --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -0,0 +1,291 @@ +/* + * 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.client.ui.overlay; + +import com.google.common.annotations.VisibleForTesting; +import java.awt.Dimension; +import java.awt.Point; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Predicate; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.Getter; +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.config.RuneLiteConfig; + +/** + * Manages state of all game overlays + */ +@Singleton +public class OverlayManager +{ + private static final String OVERLAY_CONFIG_PREFERRED_LOCATION = "_preferredLocation"; + private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; + private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize"; + private static final String RUNELITE_CONFIG_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).keyName(); + + @Getter + private final List overlays = new CopyOnWriteArrayList<>(); + + @Getter + private final Map> overlayLayers = new ConcurrentHashMap<>(); + + private final ConfigManager configManager; + + @Inject + private OverlayManager(final ConfigManager configManager) + { + this.configManager = configManager; + } + + /** + * Add overlay. + * + * @param overlay the overlay + * @return true if overlay was added + */ + public boolean add(final Overlay overlay) + { + final boolean add = overlays.add(overlay); + + if (add) + { + final Point location = loadOverlayLocation(overlay); + overlay.setPreferredLocation(location); + final Dimension size = loadOverlaySize(overlay); + overlay.setPreferredSize(size); + final OverlayPosition position = loadOverlayPosition(overlay); + overlay.setPreferredPosition(position); + sortOverlays(overlays); + rebuildOverlayLayers(); + } + + return add; + } + + /** + * Remove overlay. + * + * @param overlay the overlay + * @return true if overlay was removed + */ + public boolean remove(final Overlay overlay) + { + final boolean remove = overlays.remove(overlay); + + if (remove) + { + sortOverlays(overlays); + rebuildOverlayLayers(); + } + + return remove; + } + + /** + * Remove if overlay matches filter + * + * @param filter the filter + * @return true if any overlay was removed + */ + public boolean removeIf(Predicate filter) + { + final boolean removeIf = overlays.removeIf(filter); + sortOverlays(overlays); + rebuildOverlayLayers(); + return removeIf; + } + + /** + * Clear all overlays + */ + public void clear() + { + overlays.clear(); + sortOverlays(overlays); + rebuildOverlayLayers(); + } + + /** + * Force save overlay data + * + * @param overlay overlay to save + */ + public void saveOverlay(final Overlay overlay) + { + saveOverlayPosition(overlay); + saveOverlaySize(overlay); + saveOverlayLocation(overlay); + sortOverlays(overlays); + rebuildOverlayLayers(); + } + + /** + * Resets stored overlay position data + * + * @param overlay overlay to reset + */ + public void resetOverlay(final Overlay overlay) + { + final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; + final String positionKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; + final String sizeKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; + configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, locationKey); + configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, positionKey); + configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, sizeKey); + sortOverlays(overlays); + rebuildOverlayLayers(); + } + + private void rebuildOverlayLayers() + { + overlayLayers.clear(); + + for (final Overlay overlay : overlays) + { + OverlayLayer layer = overlay.getLayer(); + + if (overlay.getPreferredLocation() != null && overlay.getPreferredPosition() == null) + { + // When UNDER_WIDGET overlays are in preferred locations, move to + // ABOVE_WIDGETS so that it can draw over interfaces + if (layer == OverlayLayer.UNDER_WIDGETS) + { + layer = OverlayLayer.ABOVE_WIDGETS; + } + } + + overlayLayers.compute(layer, (key, value) -> + { + if (value == null) + { + value = new CopyOnWriteArrayList<>(); + } + + value.add(overlay); + return value; + }); + } + } + + private void saveOverlayLocation(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; + if (overlay.getPreferredLocation() != null) + { + configManager.setConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key, + overlay.getPreferredLocation()); + } + else + { + configManager.unsetConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key); + } + } + + private void saveOverlaySize(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; + if (overlay.getPreferredSize() != null) + { + configManager.setConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key, + overlay.getPreferredSize()); + } + else + { + configManager.unsetConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key); + } + } + + private void saveOverlayPosition(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; + if (overlay.getPreferredPosition() != null) + { + configManager.setConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key, + overlay.getPreferredPosition()); + } + else + { + configManager.unsetConfiguration( + RUNELITE_CONFIG_GROUP_NAME, + key); + } + } + + private Point loadOverlayLocation(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; + return configManager.getConfiguration(RUNELITE_CONFIG_GROUP_NAME, key, Point.class); + } + + private Dimension loadOverlaySize(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; + return configManager.getConfiguration(RUNELITE_CONFIG_GROUP_NAME, key, Dimension.class); + } + + private OverlayPosition loadOverlayPosition(final Overlay overlay) + { + final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; + return configManager.getConfiguration(RUNELITE_CONFIG_GROUP_NAME, locationKey, OverlayPosition.class); + } + + @VisibleForTesting + static void sortOverlays(List overlays) + { + overlays.sort((a, b) -> + { + if (a.getPosition() != b.getPosition()) + { + // This is so non-dynamic overlays render after dynamic + // overlays, which are generally in the scene + return a.getPosition().compareTo(b.getPosition()); + } + + // For dynamic overlays, higher priority means to + // draw *later* so it is on top. + // For non-dynamic overlays, higher priority means + // draw *first* so that they are closer to their + // defined position. + return a.getPosition() == OverlayPosition.DYNAMIC + ? a.getPriority().compareTo(b.getPriority()) + : b.getPriority().compareTo(a.getPriority()); + }); + } +} \ No newline at end of file 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 87fc92d4db..95c7cb996d 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 @@ -29,5 +29,6 @@ public enum OverlayPriority LOW, NONE, MED, - HIGH + HIGH, + HIGHEST } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index fd3627a274..7b1568a9d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -33,14 +33,7 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; -import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; @@ -49,18 +42,13 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.FocusChanged; -import net.runelite.api.events.GameStateChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.events.PluginChanged; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseListener; import net.runelite.client.input.MouseManager; -import net.runelite.client.plugins.PluginManager; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay; import net.runelite.client.ui.overlay.tooltip.TooltipOverlay; @@ -83,19 +71,9 @@ public class OverlayRenderer extends MouseListener implements KeyListener private static final Color SNAP_CORNER_ACTIVE_COLOR = new Color(0, 255, 0, 100); private static final Color MOVING_OVERLAY_COLOR = new Color(255, 255, 0, 100); private static final Color MOVING_OVERLAY_ACTIVE_COLOR = new Color(255, 255, 0, 200); - private static final String OVERLAY_CONFIG_PREFERRED_LOCATION = "_preferredLocation"; - private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; - private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize"; - - private final PluginManager pluginManager; private final Provider clientProvider; - private final InfoBoxOverlay infoBoxOverlay; - private final ConfigManager configManager; + private final OverlayManager overlayManager; private final RuneLiteConfig runeLiteConfig; - private final TooltipOverlay tooltipOverlay; - private final WorldMapOverlay worldMapOverlay; - private final List allOverlays = new CopyOnWriteArrayList<>(); - private final String runeliteGroupName = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).keyName(); // Overlay movement variables private final Point overlayOffset = new Point(); @@ -109,52 +87,28 @@ public class OverlayRenderer extends MouseListener implements KeyListener private boolean chatboxHidden; private boolean isResizeable; private OverlayBounds snapCorners; - private final Map> overlayLayerOverlayMap = Collections - .synchronizedMap(new HashMap<>()); @Inject private OverlayRenderer( final Provider clientProvider, - final PluginManager pluginManager, + final OverlayManager overlayManager, + final RuneLiteConfig runeLiteConfig, final MouseManager mouseManager, final KeyManager keyManager, - final TooltipOverlay tooltipOverlay, final InfoBoxOverlay infoBoxOverlay, - final WorldMapOverlay worldMapOverlay, - final ConfigManager configManager, - final RuneLiteConfig runeLiteConfig) + final TooltipOverlay tooltipOverlay, + final WorldMapOverlay worldMapOverlay) { this.clientProvider = clientProvider; - this.pluginManager = pluginManager; - this.tooltipOverlay = tooltipOverlay; - this.infoBoxOverlay = infoBoxOverlay; - this.worldMapOverlay = worldMapOverlay; - this.configManager = configManager; + this.overlayManager = overlayManager; this.runeLiteConfig = runeLiteConfig; keyManager.registerKeyListener(this); mouseManager.registerMouseListener(this); - } - @Subscribe - public void onGameStateChanged(GameStateChanged event) - { - final Client client = clientProvider.get(); - - if (client == null) - { - return; - } - - if (event.getGameState().equals(GameState.LOGGED_IN)) - { - rebuildOverlays(); - } - } - - @Subscribe - public void onPluginChanged(PluginChanged event) - { - rebuildOverlays(); + // Register core overlays + overlayManager.add(infoBoxOverlay); + overlayManager.add(worldMapOverlay); + overlayManager.add(tooltipOverlay); } @Subscribe @@ -166,129 +120,10 @@ public class OverlayRenderer extends MouseListener implements KeyListener } } - /** - * Force save overlay data - * @param overlay overlay to save - */ - public void saveOverlay(final Overlay overlay) - { - saveOverlayPosition(overlay); - saveOverlaySize(overlay); - saveOverlayLocation(overlay); - } - - /** - * Resets stored overlay position data - * @param overlay overlay to reset - */ - public void resetOverlay(final Overlay overlay) - { - final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; - final String positionKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; - final String sizeKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; - configManager.unsetConfiguration(runeliteGroupName, locationKey); - configManager.unsetConfiguration(runeliteGroupName, positionKey); - configManager.unsetConfiguration(runeliteGroupName, sizeKey); - } - - /** - * Rebuild overlay cache for rendering - */ - public void rebuildOverlays() - { - final List overlays = Stream - .concat( - pluginManager.getPlugins() - .stream() - .filter(pluginManager::isPluginEnabled) - .flatMap(plugin -> plugin.getOverlays().stream()), - Stream.of(infoBoxOverlay, tooltipOverlay, worldMapOverlay)) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - sortOverlays(overlays); - allOverlays.clear(); - allOverlays.addAll(overlays); - - final Client client = clientProvider.get(); - - if (client == null) - { - return; - } - - for (final Overlay overlay : overlays) - { - final Point location = loadOverlayLocation(overlay); - overlay.setPreferredLocation(location); - - final Dimension size = loadOverlaySize(overlay); - overlay.setPreferredSize(size); - - final OverlayPosition position = loadOverlayPosition(overlay); - overlay.setPreferredPosition(position); - } - - rebuildOverlayLayers(); - } - - private void rebuildOverlayLayers() - { - overlayLayerOverlayMap.clear(); - - for (final Overlay overlay : allOverlays) - { - OverlayLayer layer = overlay.getLayer(); - - if (overlay.getPreferredLocation() != null && overlay.getPreferredPosition() == null) - { - // When UNDER_WIDGET overlays are in preferred locations, move to - // ABOVE_WIDGETS so that it can draw over interfaces - if (layer == OverlayLayer.UNDER_WIDGETS) - { - layer = OverlayLayer.ABOVE_WIDGETS; - } - } - - overlayLayerOverlayMap.compute(layer, (key, value) -> - { - if (value == null) - { - value = new CopyOnWriteArrayList<>(); - } - - value.add(overlay); - return value; - }); - } - } - - static void sortOverlays(List overlays) - { - overlays.sort((a, b) -> - { - if (a.getPosition() != b.getPosition()) - { - // This is so non-dynamic overlays render after dynamic - // overlays, which are generally in the scene - return a.getPosition().compareTo(b.getPosition()); - } - - // For dynamic overlays, higher priority means to - // draw *later* so it is on top. - // For non-dynamic overlays, higher priority means - // draw *first* so that they are closer to their - // defined position. - return a.getPosition() == OverlayPosition.DYNAMIC - ? a.getPriority().compareTo(b.getPriority()) - : b.getPriority().compareTo(a.getPriority()); - }); - } - public void render(Graphics2D graphics, final OverlayLayer layer) { final Client client = clientProvider.get(); - final List overlays = overlayLayerOverlayMap.get(layer); + final List overlays = overlayManager.getOverlayLayers().get(layer); if (client == null || overlays == null @@ -410,7 +245,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener final Point mousePoint = mouseEvent.getPoint(); mousePosition.setLocation(mousePoint); - for (Overlay overlay : allOverlays) + for (Overlay overlay : overlayManager.getOverlays()) { if (overlay.getBounds().contains(mousePoint)) { @@ -422,15 +257,20 @@ public class OverlayRenderer extends MouseListener implements KeyListener overlay.setPreferredPosition(null); overlay.setPreferredSize(null); overlay.setPreferredLocation(null); - saveOverlay(overlay); - rebuildOverlayLayers(); + overlayManager.resetOverlay(overlay); } } else { - mousePoint.translate(-overlay.getBounds().x, -overlay.getBounds().y); - overlayOffset.setLocation(mousePoint); + final Point offset = new Point(mousePoint.x, mousePoint.y); + offset.translate(-overlay.getBounds().x, -overlay.getBounds().y); + overlayOffset.setLocation(offset); + + mousePoint.translate(-offset.x, -offset.y); movedOverlay = overlay; + movedOverlay.setPreferredPosition(null); + movedOverlay.setPreferredLocation(mousePoint); + overlayManager.saveOverlay(movedOverlay); } mouseEvent.consume(); @@ -470,7 +310,6 @@ public class OverlayRenderer extends MouseListener implements KeyListener mousePoint.translate(-overlayOffset.x, -overlayOffset.y); movedOverlay.setPreferredPosition(null); movedOverlay.setPreferredLocation(mousePoint); - rebuildOverlayLayers(); mouseEvent.consume(); } @@ -494,11 +333,13 @@ public class OverlayRenderer extends MouseListener implements KeyListener if (snapCorner.contains(mouseEvent.getPoint())) { OverlayPosition position = snapCorners.fromBounds(snapCorner); + if (position == movedOverlay.getPosition()) { // overlay moves back to default position position = null; } + movedOverlay.setPreferredPosition(position); movedOverlay.setPreferredLocation(null); // from dragging break; @@ -506,9 +347,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener } } - saveOverlayPosition(movedOverlay); - saveOverlayLocation(movedOverlay); - rebuildOverlayLayers(); + overlayManager.saveOverlay(movedOverlay); movedOverlay = null; mouseEvent.consume(); } @@ -650,76 +489,4 @@ public class OverlayRenderer extends MouseListener implements KeyListener new Rectangle(bottomRightPoint, SNAP_CORNER_SIZE), new Rectangle(rightChatboxPoint, SNAP_CORNER_SIZE)); } - - private void saveOverlayLocation(final Overlay overlay) - { - final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; - if (overlay.getPreferredLocation() != null) - { - configManager.setConfiguration( - runeliteGroupName, - key, - overlay.getPreferredLocation()); - } - else - { - configManager.unsetConfiguration( - runeliteGroupName, - key); - } - } - - private void saveOverlaySize(final Overlay overlay) - { - final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; - if (overlay.getPreferredSize() != null) - { - configManager.setConfiguration( - runeliteGroupName, - key, - overlay.getPreferredSize()); - } - else - { - configManager.unsetConfiguration( - runeliteGroupName, - key); - } - } - - private void saveOverlayPosition(final Overlay overlay) - { - final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; - if (overlay.getPreferredPosition() != null) - { - configManager.setConfiguration( - runeliteGroupName, - key, - overlay.getPreferredPosition()); - } - else - { - configManager.unsetConfiguration( - runeliteGroupName, - key); - } - } - - private Point loadOverlayLocation(final Overlay overlay) - { - final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; - return configManager.getConfiguration(runeliteGroupName, key, Point.class); - } - - private Dimension loadOverlaySize(final Overlay overlay) - { - final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; - return configManager.getConfiguration(runeliteGroupName, key, Dimension.class); - } - - private OverlayPosition loadOverlayPosition(final Overlay overlay) - { - final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; - return configManager.getConfiguration(runeliteGroupName, locationKey, OverlayPosition.class); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java index 1ebacb7628..7005b32afe 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java @@ -54,13 +54,17 @@ public class InfoBoxOverlay extends Overlay private final RuneLiteConfig config; @Inject - public InfoBoxOverlay(InfoBoxManager infoboxManager, TooltipManager tooltipManager, Provider clientProvider, RuneLiteConfig config) + private InfoBoxOverlay( + InfoBoxManager infoboxManager, + TooltipManager tooltipManager, + Provider clientProvider, + RuneLiteConfig config) { - setPosition(OverlayPosition.TOP_LEFT); this.tooltipManager = tooltipManager; this.infoboxManager = infoboxManager; this.clientProvider = clientProvider; this.config = config; + setPosition(OverlayPosition.TOP_LEFT); } @Override 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 489baa27e0..dbca06dbab 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 @@ -50,12 +50,12 @@ public class TooltipOverlay extends Overlay private final Provider clientProvider; @Inject - public TooltipOverlay(Provider clientProvider, TooltipManager tooltipManager) + private TooltipOverlay(Provider clientProvider, TooltipManager tooltipManager) { this.clientProvider = clientProvider; this.tooltipManager = tooltipManager; setPosition(OverlayPosition.TOOLTIP); - setPriority(OverlayPriority.HIGH); + setPriority(OverlayPriority.HIGHEST); setLayer(OverlayLayer.ALWAYS_ON_TOP); } 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 1289cbc31d..c882689a82 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 @@ -63,13 +63,16 @@ public class WorldMapOverlay extends Overlay private final Provider clientProvider; @Inject - private WorldMapOverlay(Provider clientProvider, WorldMapPointManager worldMapPointManager, - MouseManager mouseManager, WorldMapOverlayMouseListener worldMapOverlayMouseListener) + private WorldMapOverlay( + Provider clientProvider, + WorldMapPointManager worldMapPointManager, + MouseManager mouseManager, + WorldMapOverlayMouseListener worldMapOverlayMouseListener) { this.clientProvider = clientProvider; this.worldMapPointManager = worldMapPointManager; setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(OverlayPriority.HIGHEST); setLayer(OverlayLayer.ALWAYS_ON_TOP); mouseManager.registerMouseListener(worldMapOverlayMouseListener); } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java index e936797698..966269b763 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java @@ -30,13 +30,14 @@ import com.google.inject.testing.fieldbinder.BoundFieldModule; import java.util.Set; import javax.inject.Inject; import net.runelite.api.Client; -import net.runelite.api.VarPlayer; import net.runelite.api.Skill; +import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.ui.overlay.OverlayManager; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; @@ -54,6 +55,10 @@ public class AttackStylesPluginTest @Bind Client client; + @Mock + @Bind + OverlayManager overlayManager; + @Mock @Bind AttackStylesConfig attackConfig; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cerberus/CerberusPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cerberus/CerberusPluginTest.java index ffccb5335a..4f35f7b174 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/cerberus/CerberusPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/cerberus/CerberusPluginTest.java @@ -25,6 +25,7 @@ package net.runelite.client.plugins.cerberus; import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; import java.util.Arrays; import java.util.List; @@ -32,10 +33,12 @@ import javax.inject.Inject; import net.runelite.api.NPC; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.GameTick; +import net.runelite.client.ui.overlay.OverlayManager; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mockito.runners.MockitoJUnitRunner; @@ -43,6 +46,10 @@ import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class CerberusPluginTest { + @Mock + @Bind + OverlayManager overlayManager; + @Inject CerberusPlugin cerberusPlugin; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index 8910365324..46b3372eb0 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -36,6 +36,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.game.ItemManager; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import static org.junit.Assert.assertEquals; import org.junit.Before; @@ -92,6 +93,10 @@ public class SlayerPluginTest @Bind SlayerConfig slayerConfig; + @Mock + @Bind + OverlayManager overlayManager; + @Mock @Bind SlayerOverlay overlay; diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayRendererTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java similarity index 84% rename from runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayRendererTest.java rename to runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java index da4886f855..808d023640 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayRendererTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java @@ -1,89 +1,89 @@ -/* - * Copyright (c) 2016-2017, Adam - * 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.ui.overlay; - -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.util.Arrays; -import java.util.List; -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -class TestOverlay extends Overlay -{ - public TestOverlay(OverlayPosition position, OverlayPriority priority) - { - setPosition(position); - setPriority(priority); - } - - @Override - public Dimension render(Graphics2D graphics) - { - throw new UnsupportedOperationException("Not supported yet."); - } -} - -public class OverlayRendererTest -{ - @Test - 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); - List overlays = Arrays.asList(tlh, tll); - OverlayRenderer.sortOverlays(overlays); - assertEquals(tlh, overlays.get(0)); - assertEquals(tll, overlays.get(1)); - } - - @Test - 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); - List overlays = Arrays.asList(tlh, dyn); - OverlayRenderer.sortOverlays(overlays); - assertEquals(dyn, overlays.get(0)); - assertEquals(tlh, overlays.get(1)); - } - - @Test - 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); - List overlays = Arrays.asList(t, dyn, tlh); - OverlayRenderer.sortOverlays(overlays); - assertEquals(dyn, overlays.get(0)); - assertEquals(tlh, overlays.get(1)); - assertEquals(t, overlays.get(2)); - } - -} +/* + * Copyright (c) 2016-2017, Adam + * 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.ui.overlay; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.util.Arrays; +import java.util.List; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class OverlayManagerTest +{ + class TestOverlay extends Overlay + { + TestOverlay(OverlayPosition position, OverlayPriority priority) + { + setPosition(position); + setPriority(priority); + } + + @Override + public Dimension render(Graphics2D graphics) + { + throw new UnsupportedOperationException("Not supported yet."); + } + } + + @Test + 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); + List overlays = Arrays.asList(tlh, tll); + OverlayManager.sortOverlays(overlays); + assertEquals(tlh, overlays.get(0)); + assertEquals(tll, overlays.get(1)); + } + + @Test + 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); + List overlays = Arrays.asList(tlh, dyn); + OverlayManager.sortOverlays(overlays); + assertEquals(dyn, overlays.get(0)); + assertEquals(tlh, overlays.get(1)); + } + + @Test + 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); + List overlays = Arrays.asList(t, dyn, tlh); + OverlayManager.sortOverlays(overlays); + assertEquals(dyn, overlays.get(0)); + assertEquals(tlh, overlays.get(1)); + assertEquals(t, overlays.get(2)); + } + +}