scape2code 0 Share Posted May 9, 2019 Just started learning about reflection and was trying to use it to get an array of players that are logged in a 718 rsps. In the client.class I found a field which I thougth would contain this called aClass365_Sub1_Sub1_Sub2_Sub2Array8805 when I try to access this variable I get 2048 null values no mater how many people are logged into the client. After I get this to work would like to find the field for the players usernames and then print those out instead of the reference to the player but I need to get this part working first. My current code is import java.net.MalformedURLException; import java.util.ArrayList; public class test { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, MalformedURLException { for(Player2 player : getLoaded()) { System.out.println(player); } } public static Player2[] getLoaded() throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, MalformedURLException { ArrayList<Player2> players = new ArrayList<Player2>(); Object[] oPlayers = Reflection1.getPlayerArray(); //Assuming the player array method is stored in the class client // System.out.println(oPlayers.length); int i = 0; for(Object o : oPlayers) { if(o != null) { System.out.println("o != null"); Player2 cur = new Player2(o); System.out.println(cur); players.add(cur); } System.out.println( i + " " + "o = null"); i++; } return players.toArray(new Player2[players.size()]); } } import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class Reflection1 { public static Object[] getPlayerArray() throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, MalformedURLException { File file = new File("C:\\Users\\accen\\Desktop\\718\\Matrix Package\\Matrix Client\\bin"); URL url = file.toURI().toURL(); URL[] urls = {url}; ClassLoader loader = new URLClassLoader(urls); Class myClass = loader.loadClass("client"); System.out.println(myClass.getName()); Field field1 = myClass.getDeclaredField("aClass365_Sub1_Sub1_Sub2_Sub2Array8805");//Believe this holds the players that are logged into server field1.setAccessible(true); Object[] players = (Object[]) field1.get(null); System.out.println(players.length); // it is set to 2048 in the client class // should return a player Object return (Object[]) field1.get(null);// returns 2048 null value*/ } } import java.io.File; import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; public class Player2 { private Object player; public Player2(Object player){ this.player = player; } /* * Not sure what field is username yet just guessing aString10197 * currently not implemented will try and use later when everything else works */ public String getUserName() throws IllegalArgumentException, IllegalAccessException, MalformedURLException, ClassNotFoundException, NoSuchFieldException, SecurityException { File file = new File("C:\\Users\\accen\\Desktop\\718\\Matrix Package\\Matrix Client\\bin"); URL url = file.toURI().toURL(); URL[] urls = {url}; ClassLoader loader = new URLClassLoader(urls); Class myClass = loader.loadClass("Player"); Field f = myClass.getDeclaredField("aString10195"); f.setAccessible(true); System.out.println(f.get(player)); return (String) f.get(player); } } Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.