LootTracker: track ground items in addition to inventory
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user