Add brimstone chest support to loot tracker
This commit is contained in:
@@ -25,6 +25,9 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.loottracker;
|
package net.runelite.client.plugins.loottracker;
|
||||||
|
|
||||||
|
import com.google.common.collect.HashMultiset;
|
||||||
|
import com.google.common.collect.Multiset;
|
||||||
|
import com.google.common.collect.Multisets;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -55,8 +58,7 @@ import net.runelite.api.SpriteID;
|
|||||||
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.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
import net.runelite.client.events.SessionClose;
|
import net.runelite.api.events.ItemContainerChanged;
|
||||||
import net.runelite.client.events.SessionOpen;
|
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.widgets.WidgetID;
|
import net.runelite.api.widgets.WidgetID;
|
||||||
import net.runelite.client.account.AccountSession;
|
import net.runelite.client.account.AccountSession;
|
||||||
@@ -66,6 +68,8 @@ import net.runelite.client.config.ConfigManager;
|
|||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.events.NpcLootReceived;
|
import net.runelite.client.events.NpcLootReceived;
|
||||||
import net.runelite.client.events.PlayerLootReceived;
|
import net.runelite.client.events.PlayerLootReceived;
|
||||||
|
import net.runelite.client.events.SessionClose;
|
||||||
|
import net.runelite.client.events.SessionOpen;
|
||||||
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;
|
||||||
@@ -93,6 +97,10 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
private static final Pattern CLUE_SCROLL_PATTERN = Pattern.compile("You have completed [0-9]+ ([a-z]+) Treasure Trails.");
|
private static final Pattern CLUE_SCROLL_PATTERN = Pattern.compile("You have completed [0-9]+ ([a-z]+) Treasure Trails.");
|
||||||
private static final int THEATRE_OF_BLOOD_REGION = 12867;
|
private static final int THEATRE_OF_BLOOD_REGION = 12867;
|
||||||
|
|
||||||
|
// Brimstone loot handling
|
||||||
|
private static final String BRIMSTONE_CHEST_MESSAGE = "You find some treasure in the chest!";
|
||||||
|
private static final String BRIMSTONE_CHEST_EVENT_TYPE = "Brimstone Chest";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientToolbar clientToolbar;
|
private ClientToolbar clientToolbar;
|
||||||
|
|
||||||
@@ -123,6 +131,8 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
|
|
||||||
private List<String> ignoredItems = new ArrayList<>();
|
private List<String> ignoredItems = new ArrayList<>();
|
||||||
|
|
||||||
|
private Multiset<Integer> inventorySnapshot;
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private LootTrackerClient lootTrackerClient;
|
private LootTrackerClient lootTrackerClient;
|
||||||
|
|
||||||
@@ -363,8 +373,25 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String message = event.getMessage();
|
||||||
|
|
||||||
|
if (message.equals(BRIMSTONE_CHEST_MESSAGE))
|
||||||
|
{
|
||||||
|
eventType = BRIMSTONE_CHEST_EVENT_TYPE;
|
||||||
|
|
||||||
|
final ItemContainer itemContainer = client.getItemContainer(InventoryID.INVENTORY);
|
||||||
|
if (itemContainer != null)
|
||||||
|
{
|
||||||
|
inventorySnapshot = HashMultiset.create();
|
||||||
|
Arrays.stream(itemContainer.getItems())
|
||||||
|
.forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if message is for a clue scroll reward
|
// Check if message is for a clue scroll reward
|
||||||
final Matcher m = CLUE_SCROLL_PATTERN.matcher(Text.removeTags(event.getMessage()));
|
final Matcher m = CLUE_SCROLL_PATTERN.matcher(Text.removeTags(message));
|
||||||
if (m.find())
|
if (m.find())
|
||||||
{
|
{
|
||||||
final String type = m.group(1).toLowerCase();
|
final String type = m.group(1).toLowerCase();
|
||||||
@@ -389,6 +416,50 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onItemContainerChanged(ItemContainerChanged event)
|
||||||
|
{
|
||||||
|
if (eventType == null || !eventType.equals(BRIMSTONE_CHEST_EVENT_TYPE))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
processBrimstoneChestLoot(event.getItemContainer());
|
||||||
|
eventType = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processBrimstoneChestLoot(ItemContainer inventoryContainer)
|
||||||
|
{
|
||||||
|
if (inventorySnapshot != null)
|
||||||
|
{
|
||||||
|
Multiset<Integer> currentInventory = HashMultiset.create();
|
||||||
|
Arrays.stream(inventoryContainer.getItems())
|
||||||
|
.forEach(item -> currentInventory.add(item.getId(), item.getQuantity()));
|
||||||
|
|
||||||
|
final Multiset<Integer> diff = Multisets.difference(currentInventory, inventorySnapshot);
|
||||||
|
|
||||||
|
List<ItemStack> items = diff.entrySet().stream()
|
||||||
|
.map(e -> new ItemStack(e.getElement(), e.getCount(), client.getLocalPlayer().getLocalLocation()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
final LootTrackerItem[] entries = buildEntries(stack(items));
|
||||||
|
SwingUtilities.invokeLater(() -> panel.add(BRIMSTONE_CHEST_EVENT_TYPE, -1, entries));
|
||||||
|
|
||||||
|
if (lootTrackerClient != null && config.saveLoot())
|
||||||
|
{
|
||||||
|
LootRecord lootRecord = new LootRecord(BRIMSTONE_CHEST_EVENT_TYPE, LootRecordType.EVENT, toGameItems(items), Instant.now());
|
||||||
|
lootTrackerClient.submit(lootRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
inventorySnapshot = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void toggleItem(String name, boolean ignore)
|
void toggleItem(String name, boolean ignore)
|
||||||
{
|
{
|
||||||
final Set<String> ignoredItemSet = new HashSet<>(ignoredItems);
|
final Set<String> ignoredItemSet = new HashSet<>(ignoredItems);
|
||||||
|
|||||||
Reference in New Issue
Block a user