LootTracker: track ground items in addition to inventory

This commit is contained in:
leejt
2020-06-14 18:04:37 -07:00
parent bd116e99e6
commit fba6d7fcf6
2 changed files with 35 additions and 3 deletions

View File

@@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ListMultimap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -403,4 +404,25 @@ public class LootManager
return new WorldPoint(x, y, worldLocation.getPlane());
}
/**
* Get the list of items present at the provided WorldPoint that spawned this tick.
*
* @param worldPoint the location in question
* @return the list of item stacks
*/
public Collection<ItemStack> getItemSpawns(WorldPoint worldPoint)
{
LocalPoint localPoint = LocalPoint.fromWorld(client, worldPoint);
if (localPoint == null)
{
return Collections.emptyList();
}
final int sceneX = localPoint.getSceneX();
final int sceneY = localPoint.getSceneY();
final int packed = sceneX << 8 | sceneY;
final List<ItemStack> itemStacks = itemSpawns.get(packed);
return Collections.unmodifiableList(itemStacks);
}
}

View File

@@ -96,6 +96,7 @@ import net.runelite.client.events.SessionClose;
import net.runelite.client.events.SessionOpen;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemStack;
import net.runelite.client.game.LootManager;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@@ -199,6 +200,9 @@ public class LootTrackerPlugin extends Plugin
@Inject
private ChatMessageManager chatMessageManager;
@Inject
private LootManager lootManager;
private LootTrackerPanel panel;
private NavigationButton navButton;
@VisibleForTesting
@@ -635,7 +639,10 @@ public class LootTrackerPlugin extends Plugin
|| SEEDPACK_EVENT.equals(eventType)
|| lootRecordType == LootRecordType.PICKPOCKET)
{
processInventoryLoot(eventType, lootRecordType, event.getItemContainer());
WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
Collection<ItemStack> groundItems = lootManager.getItemSpawns(playerLocation);
processInventoryLoot(eventType, lootRecordType, event.getItemContainer(), groundItems);
eventType = null;
lootRecordType = null;
}
@@ -702,11 +709,11 @@ public class LootTrackerPlugin extends Plugin
{
inventorySnapshot = HashMultiset.create();
Arrays.stream(itemContainer.getItems())
.forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity()));
.forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity()));
}
}
private void processInventoryLoot(String event, LootRecordType lootRecordType, ItemContainer inventoryContainer)
private void processInventoryLoot(String event, LootRecordType lootRecordType, ItemContainer inventoryContainer, Collection<ItemStack> groundItems)
{
if (inventorySnapshot != null)
{
@@ -714,6 +721,9 @@ public class LootTrackerPlugin extends Plugin
Arrays.stream(inventoryContainer.getItems())
.forEach(item -> currentInventory.add(item.getId(), item.getQuantity()));
groundItems.stream()
.forEach(item -> currentInventory.add(item.getId(), item.getQuantity()));
final Multiset<Integer> diff = Multisets.difference(currentInventory, inventorySnapshot);
List<ItemStack> items = diff.entrySet().stream()