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 ba2069498b..4904233aa0 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 @@ -31,13 +31,8 @@ import java.awt.Image; import javax.inject.Inject; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; -import net.runelite.api.EquipmentInventorySlot; -import net.runelite.api.InventoryID; -import net.runelite.api.Item; -import net.runelite.api.ItemID; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.Widget; @@ -115,13 +110,38 @@ public class BarbarianAssaultPlugin extends Plugin @Subscribe public void onWidgetLoaded(WidgetLoaded event) { - if (event.getGroupId() == WidgetID.BA_REWARD_GROUP_ID) + switch (event.getGroupId()) { - Widget rewardWidget = client.getWidget(WidgetInfo.BA_REWARD_TEXT); - - if (config.waveTimes() && rewardWidget != null && rewardWidget.getText().contains(ENDGAME_REWARD_NEEDLE_TEXT) && gameTime != null) + case WidgetID.BA_REWARD_GROUP_ID: { - announceTime("Game finished, duration: ", gameTime.getTime(false)); + Widget rewardWidget = client.getWidget(WidgetInfo.BA_REWARD_TEXT); + + if (config.waveTimes() && rewardWidget != null && rewardWidget.getText().contains(ENDGAME_REWARD_NEEDLE_TEXT) && gameTime != null) + { + announceTime("Game finished, duration: ", gameTime.getTime(false)); + } + + break; + } + case WidgetID.BA_ATTACKER_GROUP_ID: + { + setOverlayRound(Role.ATTACKER); + break; + } + case WidgetID.BA_DEFENDER_GROUP_ID: + { + setOverlayRound(Role.DEFENDER); + break; + } + case WidgetID.BA_HEALER_GROUP_ID: + { + setOverlayRound(Role.HEALER); + break; + } + case WidgetID.BA_COLLECTOR_GROUP_ID: + { + setOverlayRound(Role.COLLECTOR); + break; } } } @@ -146,44 +166,6 @@ public class BarbarianAssaultPlugin extends Plugin } } - @Subscribe - public void onItemContainerChanged(final ItemContainerChanged event) - { - if (event.getItemContainer() != client.getItemContainer(InventoryID.EQUIPMENT)) - { - return; - } - - if (overlay.getCurrentRound() != null) - { - return; - } - - final Item[] items = event.getItemContainer().getItems(); - - // Check that the local player is wearing enough items to be wearing a cape. - if (items == null || items.length <= EquipmentInventorySlot.CAPE.getSlotIdx()) - { - return; - } - - switch (items[EquipmentInventorySlot.CAPE.getSlotIdx()].getId()) - { - case ItemID.ATTACKER_ICON: - overlay.setCurrentRound(new Round(Role.ATTACKER)); - break; - case ItemID.COLLECTOR_ICON: - overlay.setCurrentRound(new Round(Role.COLLECTOR)); - break; - case ItemID.DEFENDER_ICON: - overlay.setCurrentRound(new Round(Role.DEFENDER)); - break; - case ItemID.HEALER_ICON: - overlay.setCurrentRound(new Round(Role.HEALER)); - break; - } - } - @Subscribe public void onVarbitChanged(VarbitChanged event) { @@ -205,6 +187,19 @@ public class BarbarianAssaultPlugin extends Plugin inGameBit = inGame; } + private void setOverlayRound(Role role) + { + // Prevent changing roles when a role is already set, as widgets can be + // loaded multiple times in game from eg. opening and closing the horn + // of glory. + if (overlay.getCurrentRound() != null) + { + return; + } + + overlay.setCurrentRound(new Round(role)); + } + private void announceTime(String preText, String time) { final String chatMessage = new ChatMessageBuilder()