From 4da4979e4847ee17ef94d3090a6ddc2f5d6b9f27 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 00:05:09 -0400 Subject: [PATCH] attackstyles: use script event for hiding attack styltes --- .../main/java/net/runelite/api/ScriptID.java | 6 ++ .../attackstyles/AttackStylesPlugin.java | 31 +++------- .../attackstyles/AttackStylesPluginTest.java | 60 +------------------ 3 files changed, 16 insertions(+), 81 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index 7eecb413b4..2e1146cb25 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -280,4 +280,10 @@ public final class ScriptID */ @ScriptArguments(integer = 1) public static final int PVP_WIDGET_BUILDER = 388; + + /** + * Called to build the combat interface + */ + @ScriptArguments + public static final int COMBAT_INTERFACE_SETUP = 420; } 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 73a26c8e00..6af99c99f5 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 @@ -30,25 +30,23 @@ import com.google.common.collect.Table; import com.google.inject.Provides; import java.util.HashSet; import java.util.Set; -import javax.inject.Inject; import javax.annotation.Nullable; +import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.ScriptID; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.ScriptPostFired; import net.runelite.api.events.VarbitChanged; -import net.runelite.api.events.WidgetHiddenChanged; -import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.Widget; -import static net.runelite.api.widgets.WidgetID.COMBAT_GROUP_ID; import net.runelite.api.widgets.WidgetInfo; -import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING; @@ -138,25 +136,12 @@ public class AttackStylesPlugin extends Plugin } @Subscribe - public void onWidgetHiddenChanged(WidgetHiddenChanged event) + public void onScriptPostFired(ScriptPostFired scriptPostFired) { - if (event.getWidget().isSelfHidden() || TO_GROUP(event.getWidget().getId()) != COMBAT_GROUP_ID) + if (scriptPostFired.getScriptId() == ScriptID.COMBAT_INTERFACE_SETUP) { - return; + processWidgets(); } - - processWidgets(); - } - - @Subscribe - public void onWidgetLoaded(WidgetLoaded event) - { - if (event.getGroupId() != COMBAT_GROUP_ID) - { - return; - } - - processWidgets(); } /** @@ -204,6 +189,8 @@ public class AttackStylesPlugin extends Plugin castingModeVarbit); updateWarning(weaponSwitch); + // this isn't required, but will hide styles 1 tick earlier than the script event, which fires + // 1 tick after the combat options is unhidden if (weaponSwitch) { processWidgets(); 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 3b900c283d..9a1a6be79d 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 @@ -33,22 +33,18 @@ import net.runelite.api.Client; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; -import net.runelite.api.events.WidgetHiddenChanged; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.ui.overlay.OverlayManager; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @@ -173,60 +169,6 @@ public class AttackStylesPluginTest WidgetInfo.COMBAT_STYLE_THREE)); } - /* - * Verify that the defensive style is hidden when switching from bludgeon to bow - */ - @Test - public void testHiddenLongrange() - { - final ArgumentCaptor captor = ArgumentCaptor.forClass(Boolean.class); - final ConfigChanged warnForAttackEvent = new ConfigChanged(); - warnForAttackEvent.setGroup("attackIndicator"); - warnForAttackEvent.setKey("warnForDefensive"); - warnForAttackEvent.setNewValue("true"); - attackPlugin.onConfigChanged(warnForAttackEvent); - - // verify there is a warned skill - Set warnedSkills = attackPlugin.getWarnedSkills(); - assertTrue(warnedSkills.contains(Skill.DEFENCE)); - - // Set up mock widget for strength and longrange - final Widget widget = mock(Widget.class); - when(client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR)).thenReturn(widget); - - // Set up hidden changed event - final WidgetHiddenChanged widgetHiddenChanged = new WidgetHiddenChanged(); - widgetHiddenChanged.setWidget(widget); - when(widget.getId()).thenReturn(WidgetInfo.COMBAT_STYLE_FOUR.getPackedId()); - - // Enable hiding widgets - final ConfigChanged hideWidgetEvent = new ConfigChanged(); - hideWidgetEvent.setGroup("attackIndicator"); - hideWidgetEvent.setKey("removeWarnedStyles"); - hideWidgetEvent.setNewValue("true"); - attackPlugin.onConfigChanged(hideWidgetEvent); - when(attackConfig.removeWarnedStyles()).thenReturn(true); - - // equip bludgeon on player - when(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE)).thenReturn(WeaponType.TYPE_26.ordinal()); - attackPlugin.onVarbitChanged(new VarbitChanged()); - attackPlugin.onWidgetHiddenChanged(widgetHiddenChanged); - - // verify that the agressive style style widget is showing - verify(widget, atLeastOnce()).setHidden(captor.capture()); - assertFalse(captor.getValue()); - - // equip bow on player - // the equipped weaopn varbit will change after the hiddenChanged event has been dispatched - attackPlugin.onWidgetHiddenChanged(widgetHiddenChanged); - when(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE)).thenReturn(WeaponType.TYPE_3.ordinal()); - attackPlugin.onVarbitChanged(new VarbitChanged()); - - // verify that the longrange attack style widget is now hidden - verify(widget, atLeastOnce()).setHidden(captor.capture()); - assertTrue(captor.getValue()); - } - private boolean isAtkHidden() { if (attackPlugin.getHiddenWidgets().size() == 0)