From 0febbec254c20f376fdfbe3fed4f2ac31ea59a52 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 8 May 2024 14:26:14 -0400 Subject: [PATCH] loot manager: track TileItems instead of ItemStacks --- .../net/runelite/client/game/LootManager.java | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java index 41f79012f06..9937ce630ba 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; @@ -53,7 +54,6 @@ import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemDespawned; -import net.runelite.api.events.ItemQuantityChanged; import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.NpcChanged; import net.runelite.api.events.NpcDespawned; @@ -74,7 +74,7 @@ public class LootManager private final EventBus eventBus; private final Client client; private final NpcUtil npcUtil; - private final ListMultimap itemSpawns = ArrayListMultimap.create(); + private final ListMultimap itemSpawns = ArrayListMultimap.create(); private final Set killPoints = new HashSet<>(); private WorldPoint playerLocationLastTick; private WorldPoint krakenPlayerLocation; @@ -161,7 +161,9 @@ public void onPlayerDespawned(PlayerDespawned playerDespawned) final int x = location.getSceneX(); final int y = location.getSceneY(); final int packed = x << 8 | y; - final Collection items = itemSpawns.get(packed); + final Collection items = itemSpawns.get(packed).stream() + .map(i -> new ItemStack(i.getId(), i.getQuantity())) + .collect(Collectors.toList()); if (items.isEmpty()) { @@ -179,7 +181,7 @@ public void onItemSpawned(ItemSpawned itemSpawned) final Tile tile = itemSpawned.getTile(); final LocalPoint location = tile.getLocalLocation(); final int packed = location.getSceneX() << 8 | location.getSceneY(); - itemSpawns.put(packed, new ItemStack(item.getId(), item.getQuantity())); + itemSpawns.put(packed, item); log.debug("Item spawn {} ({}) location {}", item.getId(), item.getQuantity(), location); } @@ -191,23 +193,6 @@ public void onItemDespawned(ItemDespawned itemDespawned) log.debug("Item despawn {} ({}) location {}", item.getId(), item.getQuantity(), location); } - @Subscribe - public void onItemQuantityChanged(ItemQuantityChanged itemQuantityChanged) - { - final TileItem item = itemQuantityChanged.getItem(); - final Tile tile = itemQuantityChanged.getTile(); - final LocalPoint location = tile.getLocalLocation(); - final int packed = location.getSceneX() << 8 | location.getSceneY(); - final int diff = itemQuantityChanged.getNewQuantity() - itemQuantityChanged.getOldQuantity(); - - if (diff <= 0) - { - return; - } - - itemSpawns.put(packed, new ItemStack(item.getId(), diff)); - } - @Subscribe public void onAnimationChanged(AnimationChanged e) { @@ -334,8 +319,8 @@ private List getItemStacksFromAreas(final List areas) } final int packed = (x + i) << 8 | (y + j); - final Collection items = itemSpawns.get(packed); - allItems.addAll(items); + final Collection items = itemSpawns.get(packed); + items.forEach(item -> allItems.add(new ItemStack(item.getId(), item.getQuantity()))); } } } @@ -356,7 +341,7 @@ private List getDropLocations(NPC npc) case NpcID.ZULRAH: // Green case NpcID.ZULRAH_2043: // Red case NpcID.ZULRAH_2044: // Blue - for (Map.Entry entry : itemSpawns.entries()) + for (Map.Entry entry : itemSpawns.entries()) { if (entry.getValue().getId() == ItemID.ZULRAHS_SCALES) { @@ -503,8 +488,10 @@ public Collection getItemSpawns(WorldPoint worldPoint) final int sceneX = localPoint.getSceneX(); final int sceneY = localPoint.getSceneY(); final int packed = sceneX << 8 | sceneY; - final List itemStacks = itemSpawns.get(packed); - return Collections.unmodifiableList(itemStacks); + final List itemStacks = itemSpawns.get(packed); + return itemStacks.stream() + .map(ti -> new ItemStack(ti.getId(), ti.getQuantity())) + .collect(Collectors.toList()); } private void clearDelayedLootNpc()