fixes ItemContainerChanged event

This commit is contained in:
Zeruth
2019-07-11 00:28:53 -04:00
parent 7ba7bb64dd
commit a017961e99
2 changed files with 28 additions and 8 deletions

View File

@@ -82,4 +82,16 @@ public enum InventoryID
{ {
return id; return id;
} }
public static InventoryID getValue(int value)
{
for (InventoryID e: InventoryID.values())
{
if (e.id == value)
{
return e;
}
}
return null;
}
} }

View File

@@ -24,11 +24,13 @@
*/ */
package net.runelite.mixins; package net.runelite.mixins;
import net.runelite.api.InventoryID;
import net.runelite.api.Item; import net.runelite.api.Item;
import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Mixin;
import net.runelite.api.mixins.Replace;
import net.runelite.api.mixins.Shadow; import net.runelite.api.mixins.Shadow;
import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSGroundItem; import net.runelite.rs.api.RSGroundItem;
@@ -41,7 +43,7 @@ public abstract class RSItemContainerMixin implements RSItemContainer
private static RSClient client; private static RSClient client;
@Inject @Inject
private int rl$lastCycle; static private int rl$lastCycle;
@Inject @Inject
@Override @Override
@@ -62,21 +64,27 @@ public abstract class RSItemContainerMixin implements RSItemContainer
return items; return items;
} }
@FieldHook("quantities") @Copy("itemContainerSetItem")
@Inject static void rs$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
public void stackSizesChanged(int containerID)
{ {
}
@Replace("itemContainerSetItem")
static void rl$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
{
rs$itemContainerSetItem(itemContainerId, index, itemId, itemQuantity);
int cycle = client.getGameCycle(); int cycle = client.getGameCycle();
if (rl$lastCycle == cycle) if (rl$lastCycle == cycle)
{ {
// Limit item container updates to one per cycle // Limit item container updates to one per cycle
// No need to repeatedly update. The game just needs to know that containers changed once per cycle
return; return;
} }
rl$lastCycle = cycle; rl$lastCycle = cycle;
ItemContainerChanged event = new ItemContainerChanged(itemContainerId, client.getItemContainer(InventoryID.getValue(itemContainerId)));
ItemContainerChanged event = new ItemContainerChanged(containerID, this);
client.getCallbacks().postDeferred(event); client.getCallbacks().postDeferred(event);
} }
} }