From 57f60a36e40ed1e901b85250930476c38d93ef2d Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 2 Jun 2019 20:02:11 -0400 Subject: [PATCH] api: modify Widget.getWidgetItem to return widget items when no item exists This allows plugins to get the canvas bounds of where items would be if they existed. Update existing usages to account for the new behavior. --- .../client/plugins/devtools/DevToolsOverlay.java | 1 + .../client/plugins/examine/ExaminePlugin.java | 2 +- .../java/net/runelite/mixins/RSWidgetMixin.java | 13 ++++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index fd96de011c..fbc132b90f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -457,6 +457,7 @@ class DevToolsOverlay extends Overlay WidgetItem widgetItem = widget.getWidgetItem(itemIndex); if (widgetItem == null + || widgetItem.getId() < 0 || widgetItem.getId() == ITEM_EMPTY || widgetItem.getId() == ITEM_FILLED) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 1f78bddb9f..888a25c08e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -120,7 +120,7 @@ public class ExaminePlugin extends Plugin int widgetChild = TO_CHILD(widgetId); Widget widget = client.getWidget(widgetGroup, widgetChild); WidgetItem widgetItem = widget.getWidgetItem(event.getActionParam()); - quantity = widgetItem != null ? widgetItem.getQuantity() : 1; + quantity = widgetItem != null && widgetItem.getId() >= 0 ? widgetItem.getQuantity() : 1; break; } case EXAMINE_ITEM_BANK_EQ: diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java index 3b8ab87c99..60ec7821cb 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java @@ -258,6 +258,11 @@ public abstract class RSWidgetMixin implements RSWidget for (int i = 0; i < itemIds.length; ++i) { + if (itemIds[i] <= 0) + { + continue; + } + WidgetItem item = getWidgetItem(i); if (item != null) @@ -287,17 +292,15 @@ public abstract class RSWidgetMixin implements RSWidget int itemId = itemIds[index]; int itemQuantity = itemQuantities[index]; - Point widgetCanvasLocation = getCanvasLocation(); - - if (itemId <= 0 || itemQuantity <= 0 || columns <= 0) + if (columns <= 0) { return null; } int row = index / columns; int col = index % columns; - int itemX = widgetCanvasLocation.getX() + ((ITEM_SLOT_SIZE + xPitch) * col); - int itemY = widgetCanvasLocation.getY() + ((ITEM_SLOT_SIZE + yPitch) * row); + int itemX = rl$x + ((ITEM_SLOT_SIZE + xPitch) * col); + int itemY = rl$y + ((ITEM_SLOT_SIZE + yPitch) * row); Rectangle bounds = new Rectangle(itemX, itemY, ITEM_SLOT_SIZE, ITEM_SLOT_SIZE); return new WidgetItem(itemId - 1, itemQuantity, index, bounds, this);