From ef268ebc7f63866b26ff538f0969f530b44d0046 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 22 Jun 2022 16:37:01 -0400 Subject: [PATCH 1/3] tooltip: don't set overlay bounds when rendering The overlay was storing the previous frames tooltip width and height in the overlay bounds, to use for the next frame to position the overlay correctly so that it did not get pushed off canvas. This requires the tooltip overlay to have a non-empty bounds, which is not something dynamic/tooltip overlays usually support. The overlay renderer translates the g2d to the given bounds prior to rendering. The reason this worked was it always kept x/y=0, causing the translation to not happen. However this incorrectly caused the overlay to be picked when testing overlay bounds against the mouse position when up near the corner of the screen. This would then cause the player to pick the tooltip overlay, despite the overlay not being rendered there. --- .../ui/overlay/tooltip/TooltipOverlay.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java index 81a1142e08..24c1ef704b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java @@ -27,7 +27,6 @@ package net.runelite.client.ui.overlay.tooltip; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Point; -import java.awt.Rectangle; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; @@ -52,6 +51,8 @@ public class TooltipOverlay extends Overlay private final Client client; private final RuneLiteConfig runeLiteConfig; + private int prevWidth, prevHeight; + @Inject private TooltipOverlay(Client client, TooltipManager tooltipManager, final RuneLiteConfig runeLiteConfig) { @@ -91,15 +92,13 @@ public class TooltipOverlay extends Overlay final int canvasWidth = client.getCanvasWidth(); final int canvasHeight = client.getCanvasHeight(); final net.runelite.api.Point mouseCanvasPosition = client.getMouseCanvasPosition(); - final Rectangle prevBounds = getBounds(); - final int tooltipX = Math.min(canvasWidth - prevBounds.width, mouseCanvasPosition.getX()); + final int tooltipX = Math.min(canvasWidth - prevWidth, mouseCanvasPosition.getX()); final int tooltipY = runeLiteConfig.tooltipPosition() == TooltipPositionType.ABOVE_CURSOR - ? Math.max(0, mouseCanvasPosition.getY() - prevBounds.height) - : Math.min(canvasHeight - prevBounds.height, mouseCanvasPosition.getY() + UNDER_OFFSET); - - final Rectangle newBounds = new Rectangle(tooltipX, tooltipY, 0, 0); + ? Math.max(0, mouseCanvasPosition.getY() - prevHeight) + : Math.min(canvasHeight - prevHeight, mouseCanvasPosition.getY() + UNDER_OFFSET); + int width = 0, height = 0; for (Tooltip tooltip : tooltips) { final LayoutableRenderableEntity entity; @@ -121,14 +120,16 @@ public class TooltipOverlay extends Overlay entity = tooltipComponent; } - entity.setPreferredLocation(new Point(tooltipX, tooltipY + newBounds.height)); + entity.setPreferredLocation(new Point(tooltipX, tooltipY + height)); final Dimension dimension = entity.render(graphics); // Create incremental tooltip newBounds - newBounds.height += dimension.height + PADDING; - newBounds.width = Math.max(newBounds.width, dimension.width); + height += dimension.height + PADDING; + width = Math.max(width, dimension.width); } - return newBounds.getSize(); + prevWidth = width; + prevHeight = height; + return null; } } From 004a52159f622fdf1d3197471125649215bc03d9 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 22 Jun 2022 17:09:38 -0400 Subject: [PATCH 2/3] spec counter: make SpecialWeapon public This is included in the party event which is public --- .../runelite/client/plugins/specialcounter/SpecialWeapon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java index 6d546b02a1..36df44a255 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java @@ -31,7 +31,7 @@ import net.runelite.api.ItemID; @AllArgsConstructor @Getter -enum SpecialWeapon +public enum SpecialWeapon { DRAGON_WARHAMMER("Dragon Warhammer", new int[]{ItemID.DRAGON_WARHAMMER}, false, SpecialCounterConfig::dragonWarhammerThreshold), ARCLIGHT("Arclight", new int[]{ItemID.ARCLIGHT}, false, SpecialCounterConfig::arclightThreshold), From 003a92fb7b4641560569470b1e3431336284db94 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 22 Jun 2022 20:18:32 -0400 Subject: [PATCH 3/3] antidrag: add cox private chest Co-authored-by: MoreBuchus <107762640+MoreBuchus@users.noreply.github.com> --- .../src/main/java/net/runelite/api/ScriptID.java | 3 +++ .../java/net/runelite/api/widgets/WidgetID.java | 5 +++++ .../java/net/runelite/api/widgets/WidgetInfo.java | 2 ++ .../client/plugins/antidrag/AntiDragPlugin.java | 14 ++++++++++++++ 4 files changed, 24 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index d001581390..c9ca055d81 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -389,4 +389,7 @@ public final class ScriptID */ @ScriptArguments(string = 1) public static final int TOB_HUD_SOTETSEG_FADE = 2308; + + @ScriptArguments(integer = 3) + public static final int RAIDS_STORAGE_PRIVATE_ITEMS = 1607; } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 7f0ea9eb78..fda10ae3df 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -655,6 +655,11 @@ public final class WidgetID static final int POINTS_INFOBOX = 3; } + static class ChambersOfXericStorageUnitPrivate + { + static final int PRIVATE_CHEST_ITEM_CONTAINER = 6; + } + static class Tob { static final int PARTY_INTERFACE = 5; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 87a4f0da93..8503f10c62 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -435,6 +435,8 @@ public enum WidgetInfo RAIDS_POINTS_INFOBOX(WidgetID.RAIDS_GROUP_ID, WidgetID.Raids.POINTS_INFOBOX), + RAIDS_PRIVATE_STORAGE_ITEM_CONTAINER(WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_PRIVATE_GROUP_ID, WidgetID.ChambersOfXericStorageUnitPrivate.PRIVATE_CHEST_ITEM_CONTAINER), + TOB_PARTY_INTERFACE(WidgetID.TOB_GROUP_ID, WidgetID.Tob.PARTY_INTERFACE), TOB_PARTY_STATS(WidgetID.TOB_GROUP_ID, WidgetID.Tob.PARTY_STATS), TOB_HEALTH_BAR(WidgetID.TOB_GROUP_ID, WidgetID.Tob.HEALTHBAR_CONTAINER), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java index b12bd9cb9f..ccfd3b1700 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java @@ -220,6 +220,10 @@ public class AntiDragPlugin extends Plugin implements KeyListener } } } + else if (ev.getScriptId() == ScriptID.RAIDS_STORAGE_PRIVATE_ITEMS) + { + setCoxDragDelay(config.dragDelay()); + } } private static void applyDragDelay(Widget widget, int delay) @@ -238,10 +242,12 @@ public class AntiDragPlugin extends Plugin implements KeyListener final Widget bankItemContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER); final Widget bankInventoryItemsContainer = client.getWidget(WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER); final Widget bankDepositContainer = client.getWidget(WidgetInfo.DEPOSIT_BOX_INVENTORY_ITEMS_CONTAINER); + final Widget coxPrivateChest = client.getWidget(WidgetInfo.RAIDS_PRIVATE_STORAGE_ITEM_CONTAINER); applyDragDelay(bankItemContainer, delay); applyDragDelay(bankInventoryItemsContainer, delay); applyDragDelay(bankDepositContainer, delay); + applyDragDelay(coxPrivateChest, delay); } private void setInvDragDelay(int delay) @@ -250,6 +256,12 @@ public class AntiDragPlugin extends Plugin implements KeyListener applyDragDelay(inventory, delay); } + private void setCoxDragDelay(int delay) + { + final Widget coxChest = client.getWidget(WidgetInfo.RAIDS_PRIVATE_STORAGE_ITEM_CONTAINER); + applyDragDelay(coxChest, delay); + } + private void setDragDelay() { final int delay = config.dragDelay(); @@ -257,6 +269,7 @@ public class AntiDragPlugin extends Plugin implements KeyListener client.setInventoryDragDelay(delay); setInvDragDelay(delay); setBankDragDelay(delay); + setCoxDragDelay(delay); } private void resetDragDelay() @@ -265,6 +278,7 @@ public class AntiDragPlugin extends Plugin implements KeyListener client.setInventoryDragDelay(DEFAULT_DELAY); setInvDragDelay(DEFAULT_DELAY); setBankDragDelay(DEFAULT_DELAY); + setCoxDragDelay(DEFAULT_DELAY); } }