From 1ee41dba5abf57c79ce582ca55c27bc323ee7f25 Mon Sep 17 00:00:00 2001 From: melkypie <5113962+melkypie@users.noreply.github.com> Date: Sun, 28 Jun 2020 17:24:06 +0300 Subject: [PATCH] loot tracker: move cox loot value message from raids to loot tracker Reverts commit bf0ff69e07eaebd12ada127ae55113456c19209d. Fixes the bug of double loot messages and adds the ability to use HA for loot value messages. --- .../loottracker/LootTrackerConfig.java | 10 ++++ .../loottracker/LootTrackerPlugin.java | 24 +++++++++ .../client/plugins/raids/RaidsConfig.java | 13 +---- .../client/plugins/raids/RaidsPlugin.java | 51 ------------------- .../loottracker/LootTrackerPluginTest.java | 41 +++++++++++++++ .../client/plugins/raids/RaidsPluginTest.java | 46 ----------------- 6 files changed, 76 insertions(+), 109 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java index a33534d975..368d06fa4c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java @@ -138,4 +138,14 @@ public interface LootTrackerConfig extends Config { return false; } + + @ConfigItem( + keyName = "showRaidsLootValue", + name = "Show chat message for raids loot", + description = "Adds a chat message that displays the value of your loot at the end of the raid." + ) + default boolean showRaidsLootValue() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 6707251dd7..6d31251008 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -547,6 +547,30 @@ public class LootTrackerPlugin extends Plugin .map(item -> new ItemStack(item.getId(), item.getQuantity(), client.getLocalPlayer().getLocalLocation())) .collect(Collectors.toList()); + if (config.showRaidsLootValue() && event.equals("Chambers of Xeric")) + { + long totalValue = items.stream() + .filter(item -> item.getId() > -1) + .mapToLong(item -> (long) (config.priceType() == LootTrackerPriceType.GRAND_EXCHANGE ? + itemManager.getItemPrice(item.getId()) * item.getQuantity() : + itemManager.getItemComposition(item.getId()).getHaPrice() * item.getQuantity())) + .sum(); + + String chatMessage = new ChatMessageBuilder() + .append(ChatColorType.NORMAL) + .append("Your loot is worth around ") + .append(ChatColorType.HIGHLIGHT) + .append(QuantityFormatter.formatNumber(totalValue)) + .append(ChatColorType.NORMAL) + .append(" coins.") + .build(); + + chatMessageManager.queue(QueuedMessage.builder() + .type(ChatMessageType.FRIENDSCHATNOTIFICATION) + .runeLiteFormattedMessage(chatMessage) + .build()); + } + if (items.isEmpty()) { log.debug("No items to find for Event: {} | Container: {}", event, container); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java index 25f8062fd8..5a1a81bf7e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java @@ -178,17 +178,6 @@ public interface RaidsConfig extends Config @ConfigItem( position = 13, - keyName = "showLootValue", - name = "Show Loot Value", - description = "Shows the value of your loot at the end of a raid" - ) - default boolean showLootValue() - { - return true; - } - - @ConfigItem( - position = 14, keyName = "screenshotHotkey", name = "Scouter screenshot hotkey", description = "Hotkey used to screenshot the scouting overlay" @@ -199,7 +188,7 @@ public interface RaidsConfig extends Config } @ConfigItem( - position = 15, + position = 14, keyName = "uploadScreenshot", name = "Upload scouting screenshot", description = "Uploads the scouting screenshot to Imgur or the clipboard" 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 57b74bd469..e251d701f6 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 @@ -51,8 +51,6 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.InstanceTemplates; -import net.runelite.api.InventoryID; -import net.runelite.api.ItemContainer; import net.runelite.api.MenuAction; import net.runelite.api.MessageNode; import net.runelite.api.NullObjectID; @@ -67,8 +65,6 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; -import net.runelite.api.events.WidgetLoaded; -import net.runelite.api.widgets.WidgetID; import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatCommandManager; @@ -84,7 +80,6 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.raids.events.RaidReset; import net.runelite.client.plugins.raids.events.RaidScouted; -import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -95,7 +90,6 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.ImageCapture; -import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.Text; import static net.runelite.client.util.Text.sanitize; import net.runelite.client.ws.PartyMember; @@ -173,9 +167,6 @@ public class RaidsPlugin extends Plugin @Inject private ScheduledExecutorService scheduledExecutorService; - @Inject - private ItemManager itemManager; - @Inject private KeyManager keyManager; @@ -213,8 +204,6 @@ public class RaidsPlugin extends Plugin */ @Getter private int raidPartyID; - - private boolean chestOpened; private RaidsTimer timer; boolean checkInRaid; private boolean loggedIn; @@ -269,44 +258,6 @@ public class RaidsPlugin extends Plugin updateLists(); } - @Subscribe - public void onWidgetLoaded(WidgetLoaded event) - { - if (event.getGroupId() != WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID || - !config.showLootValue() || - chestOpened) - { - return; - } - - chestOpened = true; - - ItemContainer rewardItemContainer = client.getItemContainer(InventoryID.CHAMBERS_OF_XERIC_CHEST); - if (rewardItemContainer == null) - { - return; - } - - long totalValue = Arrays.stream(rewardItemContainer.getItems()) - .filter(item -> item.getId() > -1) - .mapToLong(item -> (long) itemManager.getItemPrice(item.getId()) * item.getQuantity()) - .sum(); - - String chatMessage = new ChatMessageBuilder() - .append(ChatColorType.NORMAL) - .append("Your loot is worth around ") - .append(ChatColorType.HIGHLIGHT) - .append(QuantityFormatter.formatNumber(totalValue)) - .append(ChatColorType.NORMAL) - .append(" coins.") - .build(); - - chatMessageManager.queue(QueuedMessage.builder() - .type(ChatMessageType.FRIENDSCHATNOTIFICATION) - .runeLiteFormattedMessage(chatMessage) - .build()); - } - @Subscribe public void onVarbitChanged(VarbitChanged event) { @@ -482,7 +433,6 @@ public class RaidsPlugin extends Plugin updateInfoBoxState(); boolean firstSolve = (raid == null); raid = buildRaid(raid); - chestOpened = false; if (raid == null) { @@ -1014,7 +964,6 @@ public class RaidsPlugin extends Plugin private void reset() { raid = null; - chestOpened = false; updateInfoBoxState(); eventBus.post(new RaidReset()); } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java index c6f54cb2b6..43d554ea3e 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/loottracker/LootTrackerPluginTest.java @@ -37,15 +37,21 @@ import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import net.runelite.api.InventoryID; +import net.runelite.api.Item; import net.runelite.api.ItemComposition; +import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.IterableHashTable; import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.widgets.WidgetID; import net.runelite.client.account.SessionManager; import net.runelite.client.chat.ChatMessageManager; +import net.runelite.client.chat.QueuedMessage; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemStack; import net.runelite.client.game.SpriteManager; @@ -57,9 +63,13 @@ import static org.junit.Assert.assertNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyCollection; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; import org.mockito.Mock; +import org.mockito.Mockito; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -202,4 +212,35 @@ public class LootTrackerPluginTest assertNull(lootTrackerPlugin.eventType); } } + + @Test + public void testCoXRaidsLootValue() + { + when(lootTrackerConfig.showRaidsLootValue()).thenReturn(true); + when(lootTrackerConfig.priceType()).thenReturn(LootTrackerPriceType.GRAND_EXCHANGE); + + LootTrackerPlugin spyPlugin = Mockito.spy(lootTrackerPlugin); + // Make sure we don't execute addLoot, so we don't have to mock LootTrackerPanel and everything else also + doNothing().when(spyPlugin).addLoot(anyString(), anyInt(), any(LootRecordType.class), anyCollection()); + + ItemContainer itemContainer = mock(ItemContainer.class); + when(itemContainer.getItems()).thenReturn(new Item[]{ + new Item(ItemID.TWISTED_BOW, 1), + new Item(ItemID.PURE_ESSENCE, 42) + }); + when(client.getItemContainer(InventoryID.CHAMBERS_OF_XERIC_CHEST)).thenReturn(itemContainer); + + when(itemManager.getItemPrice(ItemID.TWISTED_BOW)).thenReturn(1_100_000_000); + when(itemManager.getItemPrice(ItemID.PURE_ESSENCE)).thenReturn(6); + + WidgetLoaded widgetLoaded = new WidgetLoaded(); + widgetLoaded.setGroupId(WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID); + spyPlugin.onWidgetLoaded(widgetLoaded); + + ArgumentCaptor captor = ArgumentCaptor.forClass(QueuedMessage.class); + verify(chatMessageManager).queue(captor.capture()); + + QueuedMessage queuedMessage = captor.getValue(); + assertEquals("Your loot is worth around 1,100,000,252 coins.", queuedMessage.getRuneLiteFormattedMessage()); + } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java index 3bb07bf9a3..d687d98e5b 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java @@ -30,32 +30,20 @@ import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; import java.util.concurrent.ScheduledExecutorService; import net.runelite.api.Client; -import net.runelite.api.InventoryID; -import net.runelite.api.Item; -import net.runelite.api.ItemContainer; -import net.runelite.api.ItemID; -import net.runelite.api.events.WidgetLoaded; -import net.runelite.api.widgets.WidgetID; import net.runelite.client.Notifier; -import net.runelite.client.chat.ChatMessageManager; -import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ImageCapture; import net.runelite.client.ws.PartyService; import net.runelite.http.api.chat.ChatClient; -import static org.junit.Assert.assertEquals; 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.mock; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @@ -78,14 +66,6 @@ public class RaidsPluginTest @Bind RuneLiteConfig runeliteConfig; - @Mock - @Bind - ItemManager itemManager; - - @Mock - @Bind - ChatMessageManager chatMessageManager; - @Mock @Bind ImageCapture imageCapture; @@ -164,30 +144,4 @@ public class RaidsPluginTest assertFalse(raidsPlugin.getRotationMatches()); } - - @Test - public void testLootValue() - { - when(raidsConfig.showLootValue()).thenReturn(true); - - ItemContainer itemContainer = mock(ItemContainer.class); - when(itemContainer.getItems()).thenReturn(new Item[]{ - new Item(ItemID.TWISTED_BOW, 1), - new Item(ItemID.PURE_ESSENCE, 42) - }); - when(client.getItemContainer(InventoryID.CHAMBERS_OF_XERIC_CHEST)).thenReturn(itemContainer); - - when(itemManager.getItemPrice(ItemID.TWISTED_BOW)).thenReturn(1_100_000_000); - when(itemManager.getItemPrice(ItemID.PURE_ESSENCE)).thenReturn(6); - - WidgetLoaded widgetLoaded = new WidgetLoaded(); - widgetLoaded.setGroupId(WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID); - raidsPlugin.onWidgetLoaded(widgetLoaded); - - ArgumentCaptor captor = ArgumentCaptor.forClass(QueuedMessage.class); - verify(chatMessageManager).queue(captor.capture()); - - QueuedMessage queuedMessage = captor.getValue(); - assertEquals("Your loot is worth around 1,100,000,252 coins.", queuedMessage.getRuneLiteFormattedMessage()); - } }