Use player indices to iterate local players

This commit is contained in:
Adam
2017-10-17 11:59:58 -04:00
parent 10a494a2b7
commit 6792f2570a
6 changed files with 30 additions and 25 deletions

View File

@@ -32,9 +32,7 @@ import net.runelite.api.widgets.WidgetInfo;
public interface Client public interface Client
{ {
Player getPlayer(int idx); List<Player> getPlayers();
Player[] getCachedPlayers();
List<NPC> getNpcs(); List<NPC> getNpcs();

View File

@@ -27,17 +27,13 @@ package net.runelite.api.queries;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.Player; import net.runelite.api.Player;
import java.util.Arrays;
import java.util.Objects;
public class PlayerQuery extends ActorQuery<Player, PlayerQuery> public class PlayerQuery extends ActorQuery<Player, PlayerQuery>
{ {
@Override @Override
public Player[] result(Client client) public Player[] result(Client client)
{ {
return Arrays.stream(client.getCachedPlayers()) return client.getPlayers().stream()
.filter(Objects::nonNull) .filter(predicate)
.filter(predicate) .toArray(Player[]::new);
.toArray(Player[]::new);
} }
} }

View File

@@ -124,21 +124,15 @@ public class DevToolsOverlay extends Overlay
private void renderPlayers(Graphics2D graphics) private void renderPlayers(Graphics2D graphics)
{ {
Player[] players = client.getCachedPlayers(); List<Player> players = client.getPlayers();
Player local = client.getLocalPlayer(); 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) String text = p.getName() + " (A: " + p.getAnimation() + ") (G: " + p.getGraphic() + ")";
{ OverlayUtil.renderActorOverlay(graphics, p, text, BLUE);
if (!p.getName().equals(local.getName()))
{
String text = p.getName() + " (A: " + p.getAnimation() + ") (G: " + p.getGraphic() + ")";
OverlayUtil.renderActorOverlay(graphics, p, text, BLUE);
}
}
} }
} }

View File

@@ -30,6 +30,7 @@ import java.awt.image.BufferedImage;
import net.runelite.api.Actor; import net.runelite.api.Actor;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.Perspective; import net.runelite.api.Perspective;
import net.runelite.api.Player;
import net.runelite.api.Point; import net.runelite.api.Point;
import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Mixin;
@@ -65,7 +66,8 @@ public abstract class RSActorMixin implements RSActor
} }
i -= 0x8000; i -= 0x8000;
return client.getPlayer(i); Player[] players = client.getCachedPlayers();
return players[i];
} }
@Inject @Inject

View File

@@ -45,9 +45,19 @@ public abstract class RSClientMixin implements RSClient
{ {
@Inject @Inject
@Override @Override
public Player getPlayer(int idx) public List<Player> getPlayers()
{ {
return getCachedPlayers()[idx]; int validPlayerIndexes = getPlayerIndexesCount();
int[] playerIndexes = getPlayerIndices();
Player[] cachedPlayers = getCachedPlayers();
List<Player> players = new ArrayList<Player>(validPlayerIndexes);
for (int i = 0; i < validPlayerIndexes; ++i)
{
players.add(cachedPlayers[playerIndexes[i]]);
}
return players;
} }
@Inject @Inject

View File

@@ -129,8 +129,13 @@ public interface RSClient extends RSGameEngine, Client
@Import("collisionMaps") @Import("collisionMaps")
RSCollisionData[] getCollisionMaps(); RSCollisionData[] getCollisionMaps();
@Import("playerIndexesCount")
int getPlayerIndexesCount();
@Import("playerIndices")
int[] getPlayerIndices();
@Import("cachedPlayers") @Import("cachedPlayers")
@Override
RSPlayer[] getCachedPlayers(); RSPlayer[] getCachedPlayers();
@Import("groundItemDeque") @Import("groundItemDeque")