From 6792f2570a8b6b939d1953ac42b620215d6ede96 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 17 Oct 2017 11:59:58 -0400 Subject: [PATCH] Use player indices to iterate local players --- .../src/main/java/net/runelite/api/Client.java | 4 +--- .../net/runelite/api/queries/PlayerQuery.java | 10 +++------- .../client/plugins/devtools/DevToolsOverlay.java | 16 +++++----------- .../java/net/runelite/mixins/RSActorMixin.java | 4 +++- .../java/net/runelite/mixins/RSClientMixin.java | 14 ++++++++++++-- .../main/java/net/runelite/rs/api/RSClient.java | 7 ++++++- 6 files changed, 30 insertions(+), 25 deletions(-) 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 83be8b3818..348c296fef 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -32,9 +32,7 @@ import net.runelite.api.widgets.WidgetInfo; public interface Client { - Player getPlayer(int idx); - - Player[] getCachedPlayers(); + List getPlayers(); List getNpcs(); diff --git a/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java index 5e5b2e1781..31ad1de1b2 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java @@ -27,17 +27,13 @@ package net.runelite.api.queries; import net.runelite.api.Client; import net.runelite.api.Player; -import java.util.Arrays; -import java.util.Objects; - public class PlayerQuery extends ActorQuery { @Override public Player[] result(Client client) { - return Arrays.stream(client.getCachedPlayers()) - .filter(Objects::nonNull) - .filter(predicate) - .toArray(Player[]::new); + return client.getPlayers().stream() + .filter(predicate) + .toArray(Player[]::new); } } 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 cd6f8a338a..88b1ca0a97 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 @@ -124,21 +124,15 @@ public class DevToolsOverlay extends Overlay private void renderPlayers(Graphics2D graphics) { - Player[] players = client.getCachedPlayers(); + List players = client.getPlayers(); Player local = client.getLocalPlayer(); - if (players != null && (players.length - 1) > 0) + for (Player p : players) { - for (Player p : players) + if (p != local) { - if (p != null) - { - if (!p.getName().equals(local.getName())) - { - String text = p.getName() + " (A: " + p.getAnimation() + ") (G: " + p.getGraphic() + ")"; - OverlayUtil.renderActorOverlay(graphics, p, text, BLUE); - } - } + String text = p.getName() + " (A: " + p.getAnimation() + ") (G: " + p.getGraphic() + ")"; + OverlayUtil.renderActorOverlay(graphics, p, text, BLUE); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java index 76e623ff5e..60ce77b5a8 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -30,6 +30,7 @@ import java.awt.image.BufferedImage; import net.runelite.api.Actor; import net.runelite.api.NPC; import net.runelite.api.Perspective; +import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; @@ -65,7 +66,8 @@ public abstract class RSActorMixin implements RSActor } i -= 0x8000; - return client.getPlayer(i); + Player[] players = client.getCachedPlayers(); + return players[i]; } @Inject 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 24c0fa00f8..5923815905 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -45,9 +45,19 @@ public abstract class RSClientMixin implements RSClient { @Inject @Override - public Player getPlayer(int idx) + public List getPlayers() { - return getCachedPlayers()[idx]; + int validPlayerIndexes = getPlayerIndexesCount(); + int[] playerIndexes = getPlayerIndices(); + Player[] cachedPlayers = getCachedPlayers(); + List players = new ArrayList(validPlayerIndexes); + + for (int i = 0; i < validPlayerIndexes; ++i) + { + players.add(cachedPlayers[playerIndexes[i]]); + } + + return players; } @Inject 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 5116ea7e96..ba739f0c91 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 @@ -128,9 +128,14 @@ public interface RSClient extends RSGameEngine, Client @Import("collisionMaps") RSCollisionData[] getCollisionMaps(); + + @Import("playerIndexesCount") + int getPlayerIndexesCount(); + + @Import("playerIndices") + int[] getPlayerIndices(); @Import("cachedPlayers") - @Override RSPlayer[] getCachedPlayers(); @Import("groundItemDeque")