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;
}
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;
import net.runelite.api.InventoryID;
import net.runelite.api.Item;
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.Mixin;
import net.runelite.api.mixins.Replace;
import net.runelite.api.mixins.Shadow;
import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSGroundItem;
@@ -41,7 +43,7 @@ public abstract class RSItemContainerMixin implements RSItemContainer
private static RSClient client;
@Inject
private int rl$lastCycle;
static private int rl$lastCycle;
@Inject
@Override
@@ -62,21 +64,27 @@ public abstract class RSItemContainerMixin implements RSItemContainer
return items;
}
@FieldHook("quantities")
@Inject
public void stackSizesChanged(int containerID)
@Copy("itemContainerSetItem")
static void rs$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
{
}
@Replace("itemContainerSetItem")
static void rl$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
{
rs$itemContainerSetItem(itemContainerId, index, itemId, itemQuantity);
int cycle = client.getGameCycle();
if (rl$lastCycle == 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;
}
rl$lastCycle = cycle;
ItemContainerChanged event = new ItemContainerChanged(containerID, this);
ItemContainerChanged event = new ItemContainerChanged(itemContainerId, client.getItemContainer(InventoryID.getValue(itemContainerId)));
client.getCallbacks().postDeferred(event);
}
}