From 297cf7614a8e7277744bdb565ec3a1c4da65be6e Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Mon, 15 Jul 2019 01:26:43 +0200 Subject: [PATCH] Wintertodt selective eventbus listening --- .../plugins/wintertodt/WintertodtPlugin.java | 81 +++++++++++++------ 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index b3b66ecea7..b98fe9fdc6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -37,6 +37,7 @@ import lombok.extern.slf4j.Slf4j; import static net.runelite.api.AnimationID.*; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import static net.runelite.api.GameState.LOADING; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; @@ -49,6 +50,7 @@ import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.client.Notifier; @@ -114,6 +116,8 @@ public class WintertodtPlugin extends Plugin private WintertodtNotifyMode notifyCondition; private Color damageNotificationColor; + private boolean subscribed; + @Provides WintertodtConfig getConfig(ConfigManager configManager) { @@ -130,12 +134,15 @@ public class WintertodtPlugin extends Plugin reset(); overlayManager.add(overlay); + + handleWintertodtRegion(); } @Override protected void shutDown() throws Exception { - super.shutDown(); + eventBus.unregister(this); + eventBus.unregister("inside-wintertodt"); overlayManager.remove(overlay); reset(); @@ -144,11 +151,23 @@ public class WintertodtPlugin extends Plugin private void addSubscriptions() { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); + eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); + } + + private void wintertodtSubscriptions(boolean subscribe) + { + if (subscribe) + { + eventBus.subscribe(GameTick.class, "inside-wintertodt", this::onGameTick); + eventBus.subscribe(ChatMessage.class, "inside-wintertodt", this::onChatMessage); + eventBus.subscribe(AnimationChanged.class, "inside-wintertodt", this::onAnimationChanged); + eventBus.subscribe(ItemContainerChanged.class, "inside-wintertodt", this::onItemContainerChanged); + } + else + { + eventBus.unregister("inside-wintertodt"); + } } private void onConfigChanged(ConfigChanged event) @@ -180,9 +199,24 @@ public class WintertodtPlugin extends Plugin return false; } - private void onGameTick(GameTick gameTick) + private void handleWintertodtRegion() { - if (!isInWintertodtRegion()) + if (isInWintertodtRegion()) + { + if (!isInWintertodt) + { + reset(); + log.debug("Entered Wintertodt!"); + } + isInWintertodt = true; + + if (!subscribed) + { + wintertodtSubscriptions(true); + subscribed = true; + } + } + else { if (isInWintertodt) { @@ -191,16 +225,25 @@ public class WintertodtPlugin extends Plugin } isInWintertodt = false; - return; - } - if (!isInWintertodt) + if (subscribed) + { + wintertodtSubscriptions(false); + subscribed = false; + } + } + } + + private void onGameStateChanged(GameStateChanged event) + { + if (event.getGameState() == LOADING) { - reset(); - log.debug("Entered Wintertodt!"); + handleWintertodtRegion(); } - isInWintertodt = true; + } + private void onGameTick(GameTick gameTick) + { checkActionTimeout(); } @@ -252,11 +295,6 @@ public class WintertodtPlugin extends Plugin private void onChatMessage(ChatMessage chatMessage) { - if (!isInWintertodt) - { - return; - } - ChatMessageType chatMessageType = chatMessage.getType(); if (chatMessageType != ChatMessageType.GAMEMESSAGE && chatMessageType != ChatMessageType.SPAM) @@ -395,11 +433,6 @@ public class WintertodtPlugin extends Plugin private void onAnimationChanged(final AnimationChanged event) { - if (!isInWintertodt) - { - return; - } - final Player local = client.getLocalPlayer(); if (event.getActor() != local) @@ -445,7 +478,7 @@ public class WintertodtPlugin extends Plugin { final ItemContainer container = event.getItemContainer(); - if (!isInWintertodt || container != client.getItemContainer(InventoryID.INVENTORY)) + if (container != client.getItemContainer(InventoryID.INVENTORY)) { return; }