loot tracker: move cox loot value message from raids to loot tracker

Reverts commit bf0ff69e07.
Fixes the bug of double loot messages and adds the ability to use HA for loot value messages.
This commit is contained in:
melkypie
2020-06-28 17:24:06 +03:00
committed by Adam
parent eb251a7e85
commit 1ee41dba5a
6 changed files with 76 additions and 109 deletions

View File

@@ -138,4 +138,14 @@ public interface LootTrackerConfig extends Config
{ {
return false; 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;
}
} }

View File

@@ -547,6 +547,30 @@ public class LootTrackerPlugin extends Plugin
.map(item -> new ItemStack(item.getId(), item.getQuantity(), client.getLocalPlayer().getLocalLocation())) .map(item -> new ItemStack(item.getId(), item.getQuantity(), client.getLocalPlayer().getLocalLocation()))
.collect(Collectors.toList()); .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()) if (items.isEmpty())
{ {
log.debug("No items to find for Event: {} | Container: {}", event, container); log.debug("No items to find for Event: {} | Container: {}", event, container);

View File

@@ -178,17 +178,6 @@ public interface RaidsConfig extends Config
@ConfigItem( @ConfigItem(
position = 13, 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", keyName = "screenshotHotkey",
name = "Scouter screenshot hotkey", name = "Scouter screenshot hotkey",
description = "Hotkey used to screenshot the scouting overlay" description = "Hotkey used to screenshot the scouting overlay"
@@ -199,7 +188,7 @@ public interface RaidsConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 15, position = 14,
keyName = "uploadScreenshot", keyName = "uploadScreenshot",
name = "Upload scouting screenshot", name = "Upload scouting screenshot",
description = "Uploads the scouting screenshot to Imgur or the clipboard" description = "Uploads the scouting screenshot to Imgur or the clipboard"

View File

@@ -51,8 +51,6 @@ import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.InstanceTemplates; import net.runelite.api.InstanceTemplates;
import net.runelite.api.InventoryID;
import net.runelite.api.ItemContainer;
import net.runelite.api.MenuAction; import net.runelite.api.MenuAction;
import net.runelite.api.MessageNode; import net.runelite.api.MessageNode;
import net.runelite.api.NullObjectID; 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.GameStateChanged;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.events.VarbitChanged; 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.callback.ClientThread;
import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatColorType;
import net.runelite.client.chat.ChatCommandManager; 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.events.OverlayMenuClicked;
import net.runelite.client.plugins.raids.events.RaidReset; import net.runelite.client.plugins.raids.events.RaidReset;
import net.runelite.client.plugins.raids.events.RaidScouted; import net.runelite.client.plugins.raids.events.RaidScouted;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
import net.runelite.client.input.KeyManager; import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin; 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.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.HotkeyListener;
import net.runelite.client.util.ImageCapture; import net.runelite.client.util.ImageCapture;
import net.runelite.client.util.QuantityFormatter;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
import static net.runelite.client.util.Text.sanitize; import static net.runelite.client.util.Text.sanitize;
import net.runelite.client.ws.PartyMember; import net.runelite.client.ws.PartyMember;
@@ -173,9 +167,6 @@ public class RaidsPlugin extends Plugin
@Inject @Inject
private ScheduledExecutorService scheduledExecutorService; private ScheduledExecutorService scheduledExecutorService;
@Inject
private ItemManager itemManager;
@Inject @Inject
private KeyManager keyManager; private KeyManager keyManager;
@@ -213,8 +204,6 @@ public class RaidsPlugin extends Plugin
*/ */
@Getter @Getter
private int raidPartyID; private int raidPartyID;
private boolean chestOpened;
private RaidsTimer timer; private RaidsTimer timer;
boolean checkInRaid; boolean checkInRaid;
private boolean loggedIn; private boolean loggedIn;
@@ -269,44 +258,6 @@ public class RaidsPlugin extends Plugin
updateLists(); 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 @Subscribe
public void onVarbitChanged(VarbitChanged event) public void onVarbitChanged(VarbitChanged event)
{ {
@@ -482,7 +433,6 @@ public class RaidsPlugin extends Plugin
updateInfoBoxState(); updateInfoBoxState();
boolean firstSolve = (raid == null); boolean firstSolve = (raid == null);
raid = buildRaid(raid); raid = buildRaid(raid);
chestOpened = false;
if (raid == null) if (raid == null)
{ {
@@ -1014,7 +964,6 @@ public class RaidsPlugin extends Plugin
private void reset() private void reset()
{ {
raid = null; raid = null;
chestOpened = false;
updateInfoBoxState(); updateInfoBoxState();
eventBus.post(new RaidReset()); eventBus.post(new RaidReset());
} }

View File

@@ -37,15 +37,21 @@ import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemComposition; import net.runelite.api.ItemComposition;
import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.IterableHashTable; import net.runelite.api.IterableHashTable;
import net.runelite.api.MessageNode; import net.runelite.api.MessageNode;
import net.runelite.api.Player; import net.runelite.api.Player;
import net.runelite.api.coords.WorldPoint; import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ChatMessage; 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.account.SessionManager;
import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.chat.QueuedMessage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemStack; import net.runelite.client.game.ItemStack;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
@@ -57,9 +63,13 @@ import static org.junit.Assert.assertNull;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyCollection;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
@@ -202,4 +212,35 @@ public class LootTrackerPluginTest
assertNull(lootTrackerPlugin.eventType); 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<QueuedMessage> captor = ArgumentCaptor.forClass(QueuedMessage.class);
verify(chatMessageManager).queue(captor.capture());
QueuedMessage queuedMessage = captor.getValue();
assertEquals("<colNORMAL>Your loot is worth around <colHIGHLIGHT>1,100,000,252<colNORMAL> coins.", queuedMessage.getRuneLiteFormattedMessage());
}
} }

View File

@@ -30,32 +30,20 @@ import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule; import com.google.inject.testing.fieldbinder.BoundFieldModule;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import net.runelite.api.Client; 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.Notifier;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.chat.QueuedMessage;
import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ChatColorConfig;
import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ImageCapture; import net.runelite.client.util.ImageCapture;
import net.runelite.client.ws.PartyService; import net.runelite.client.ws.PartyService;
import net.runelite.http.api.chat.ChatClient; import net.runelite.http.api.chat.ChatClient;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
@@ -78,14 +66,6 @@ public class RaidsPluginTest
@Bind @Bind
RuneLiteConfig runeliteConfig; RuneLiteConfig runeliteConfig;
@Mock
@Bind
ItemManager itemManager;
@Mock
@Bind
ChatMessageManager chatMessageManager;
@Mock @Mock
@Bind @Bind
ImageCapture imageCapture; ImageCapture imageCapture;
@@ -164,30 +144,4 @@ public class RaidsPluginTest
assertFalse(raidsPlugin.getRotationMatches()); 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<QueuedMessage> captor = ArgumentCaptor.forClass(QueuedMessage.class);
verify(chatMessageManager).queue(captor.capture());
QueuedMessage queuedMessage = captor.getValue();
assertEquals("<colNORMAL>Your loot is worth around <colHIGHLIGHT>1,100,000,252<colNORMAL> coins.", queuedMessage.getRuneLiteFormattedMessage());
}
} }