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
{
Player getPlayer(int idx);
Player[] getCachedPlayers();
List<Player> getPlayers();
List<NPC> getNpcs();

View File

@@ -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<Player, PlayerQuery>
{
@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);
}
}

View File

@@ -124,21 +124,15 @@ public class DevToolsOverlay extends Overlay
private void renderPlayers(Graphics2D graphics)
{
Player[] players = client.getCachedPlayers();
List<Player> 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);
}
}

View File

@@ -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

View File

@@ -45,9 +45,19 @@ public abstract class RSClientMixin implements RSClient
{
@Inject
@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

View File

@@ -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")