From fa7b50161cf2b48d7155089df26c4cfb2a3ac869 Mon Sep 17 00:00:00 2001 From: Septron Date: Sun, 8 Apr 2018 17:58:40 -0400 Subject: [PATCH] Add hint arrows to api --- .../main/java/net/runelite/api/Client.java | 11 +++++ .../java/net/runelite/api/HintArrowType.java | 40 ++++++++++++++++++ .../net/runelite/mixins/RSClientMixin.java | 41 +++++++++++++++++++ .../java/net/runelite/rs/api/RSClient.java | 30 ++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 runelite-api/src/main/java/net/runelite/api/HintArrowType.java diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index bfe6afc3e6..59948a5806 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import javax.annotation.Nullable; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.coords.WorldPoint; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -358,4 +359,14 @@ public interface Client extends GameEngine SpritePixels drawInstanceMap(int z); void runScript(int id, Object... args); + + boolean hasHintArrow(); + + void clearHintArrow(); + + void setHintArrow(WorldPoint point); + + void setHintArrow(Player player); + + void setHintArrow(NPC npc); } diff --git a/runelite-api/src/main/java/net/runelite/api/HintArrowType.java b/runelite-api/src/main/java/net/runelite/api/HintArrowType.java new file mode 100644 index 0000000000..6c83bc2e3a --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/HintArrowType.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.api; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum HintArrowType +{ + NONE(0), + PLAYER(10), + NPC(1), + WORLD_POSITION(2); + + @Getter + private final int value; +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 71efb4aae0..532d0e44c0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -31,6 +31,7 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.ClanMember; import net.runelite.api.GameState; import net.runelite.api.GrandExchangeOffer; +import net.runelite.api.HintArrowType; import net.runelite.api.IndexedSprite; import net.runelite.api.InventoryID; import net.runelite.api.MenuAction; @@ -55,6 +56,7 @@ import net.runelite.api.SpritePixels; import net.runelite.api.Varbits; import net.runelite.api.WidgetNode; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.DraggingWidgetChanged; @@ -694,4 +696,43 @@ public abstract class RSClientMixin implements RSClient event.setMenuEntries(client.getMenuEntries()); eventBus.post(event); } + + @Inject + @Override + public boolean hasHintArrow() + { + return client.getHintArrowTargetType() == HintArrowType.NONE.getValue(); + } + + @Inject + @Override + public void clearHintArrow() + { + client.setHintArrowTargetType(HintArrowType.NONE.getValue()); + } + + @Inject + @Override + public void setHintArrow(NPC npc) + { + client.setHintArrowTargetType(HintArrowType.NPC.getValue()); + client.setHintArrowNpcTargetIdx(npc.getIndex()); + } + + @Inject + @Override + public void setHintArrow(Player player) + { + client.setHintArrowTargetType(HintArrowType.PLAYER.getValue()); + client.setHintArrowPlayerTargetIdx(player.getIndex()); + } + + @Inject + @Override + public void setHintArrow(WorldPoint point) + { + client.setHintArrowTargetType(HintArrowType.WORLD_POSITION.getValue()); + client.setHintArrowX(point.getX()); + client.setHintArrowY(point.getY()); + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index b8fde65f8a..079a13d326 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -564,4 +564,34 @@ public interface RSClient extends RSGameEngine, Client @Import("runScript") void runScript(RSScriptEvent ev, int ex); + + @Import("hintArrowTargetType") + void setHintArrowTargetType(int value); + + @Import("hintArrowTargetType") + int getHintArrowTargetType(); + + @Import("hintArrowX") + void setHintArrowX(int value); + + @Import("hintArrowX") + int getHintArrowX(); + + @Import("hintArrowY") + void setHintArrowY(int value); + + @Import("hintArrowY") + int getHintArrowY(); + + @Import("hintArrowNpcTargetIdx") + void setHintArrowNpcTargetIdx(int value); + + @Import("hintArrowNpcTargetIdx") + int getHintArrowNpcTargetIdx(); + + @Import("hintArrowPlayerTargetIdx") + void setHintArrowPlayerTargetIdx(int value); + + @Import("hintArrowPlayerTargetIdx") + int getHintArrowPlayerTargetIdx(); }