From 92f4ec1c54d75cd8cbf82ea5c5c6243bd5c28950 Mon Sep 17 00:00:00 2001 From: Septron Date: Sun, 8 Apr 2018 17:49:45 -0400 Subject: [PATCH 1/2] Add player index to api --- .../src/main/java/net/runelite/api/Player.java | 2 ++ .../net/runelite/mixins/RSClientMixin.java | 18 ++++++++++++++++++ .../net/runelite/mixins/RSPlayerMixin.java | 17 +++++++++++++++++ .../java/net/runelite/rs/api/RSPlayer.java | 5 +++++ 4 files changed, 42 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java index 6ea285b3d1..26943e4a08 100644 --- a/runelite-api/src/main/java/net/runelite/api/Player.java +++ b/runelite-api/src/main/java/net/runelite/api/Player.java @@ -40,4 +40,6 @@ public interface Player extends Actor boolean isClanMember(); boolean isFriend(); + + int getIndex(); } 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 a30822d80a..71efb4aae0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -84,6 +84,7 @@ import net.runelite.rs.api.RSIndexedSprite; import net.runelite.rs.api.RSItemContainer; import net.runelite.rs.api.RSNPC; import net.runelite.rs.api.RSName; +import net.runelite.rs.api.RSPlayer; import net.runelite.rs.api.RSWidget; @Mixin(RSClient.class) @@ -616,6 +617,23 @@ public abstract class RSClientMixin implements RSClient } } + @FieldHook("cachedPlayers") + @Inject + public static void cachedPlayersChanged(int idx) + { + RSPlayer[] cachedPlayers = client.getCachedPlayers(); + if (idx < 0 || idx >= cachedPlayers.length) + { + return; + } + + RSPlayer player = cachedPlayers[idx]; + if (player != null) + { + player.setIndex(idx); + } + } + @Inject @FieldHook("grandExchangeOffers") public static void onGrandExchangeOffersChanged(int idx) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java index 4981d760f5..69a33d0674 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -45,6 +45,9 @@ public abstract class RSPlayerMixin implements RSPlayer @Shadow("clientInstance") private static RSClient client; + @Inject + private int playerIndex; + @Inject @Override public String getName() @@ -141,4 +144,18 @@ public abstract class RSPlayerMixin implements RSPlayer } return rotatedTriangles; } + + @Inject + @Override + public int getIndex() + { + return playerIndex; + } + + @Inject + @Override + public void setIndex(int index) + { + this.playerIndex = index; + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java index 1bdf085e49..8e8d5a9d9f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java @@ -54,4 +54,9 @@ public interface RSPlayer extends RSActor, Player @Import("isFriend") @Override boolean isFriend(); + + @Override + int getIndex(); + + void setIndex(int id); } From fa7b50161cf2b48d7155089df26c4cfb2a3ac869 Mon Sep 17 00:00:00 2001 From: Septron Date: Sun, 8 Apr 2018 17:58:40 -0400 Subject: [PATCH 2/2] 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(); }