22
22
import java .lang .reflect .Method ;
23
23
import java .util .ArrayList ;
24
24
import java .util .Arrays ;
25
+ import java .util .concurrent .atomic .AtomicReference ;
25
26
26
27
import com .projectjava .winrune .JClassLoader ;
27
28
import com .projectjava .winrune .WinRune ;
28
29
29
30
public class Reflection {
30
31
32
+ private static final AtomicReference <String > GAME_SHELL = new AtomicReference <String >();
33
+
31
34
// Method descriptions
32
- private static final String MOUSE_MOVE =
33
- "public synchronized boolean a.a.GameShell.mouseMove(java.awt.Event,int,int)" ;
34
- private static final String MOUSE_DRAG =
35
- "public synchronized boolean a.a.GameShell.mouseDrag(java.awt.Event,int,int)" ;
36
- private static final String MOUSE_UP =
37
- "public synchronized boolean a.a.GameShell.mouseUp(java.awt.Event,int,int)" ;
38
- private static final String MOUSE_DOWN =
39
- "public synchronized boolean a.a.GameShell.mouseDown(java.awt.Event,int,int)" ;
35
+ private static final AtomicReference < String > MOUSE_MOVE = new AtomicReference < String >();
36
+ // "public synchronized boolean a.a.GameShell.mouseMove(java.awt.Event,int,int)";
37
+ private static final AtomicReference < String > MOUSE_DRAG = new AtomicReference < String >();
38
+ // "public synchronized boolean a.a.GameShell.mouseDrag(java.awt.Event,int,int)";
39
+ private static final AtomicReference < String > MOUSE_UP = new AtomicReference < String >();
40
+ // "public synchronized boolean a.a.GameShell.mouseUp(java.awt.Event,int,int)";
41
+ private static final AtomicReference < String > MOUSE_DOWN = new AtomicReference < String >();
42
+ // "public synchronized boolean a.a.GameShell.mouseDown(java.awt.Event,int,int)";
40
43
41
- private static final String KEY_UP =
42
- "public synchronized boolean a.a.GameShell.keyUp(java.awt.Event,int)" ;
43
- private static final String KEY_DOWN =
44
- "public synchronized boolean a.a.GameShell.keyDown(java.awt.Event,int)" ;
44
+ private static final AtomicReference < String > KEY_UP = new AtomicReference < String >();
45
+ // "public synchronized boolean a.a.GameShell.keyUp(java.awt.Event,int)";
46
+ private static final AtomicReference < String > KEY_DOWN = new AtomicReference < String >();
47
+ // "public synchronized boolean a.a.GameShell.keyDown(java.awt.Event,int)";
45
48
46
- private static final String MEMBERS = "members" ;
47
- private static final String ADDRESS = "address" ;
48
- private static final String PORT = "port" ;
49
- private static final String RSAEXPONENT = "rsaExponent" ;
50
- private static final String RSAMODULUS = "rsaModulus" ;
51
- private static final String SOMEBOOLEAN = "field_8" ;
49
+ private static final AtomicReference <String > MEMBERS = new AtomicReference <String >();
50
+ //"members";
51
+ private static final AtomicReference <String > ADDRESS = new AtomicReference <String >();
52
+ //"address";
53
+ private static final AtomicReference <String > PORT = new AtomicReference <String >();
54
+ //"port";
55
+ private static final AtomicReference <String > RSAEXPONENT = new AtomicReference <String >();
56
+ //"rsaExponent";
57
+ private static final AtomicReference <String > RSAMODULUS = new AtomicReference <String >();
58
+ //"rsaModulus";
59
+ private static final AtomicReference <String > SOMEBOOLEAN = new AtomicReference <String >();
60
+ //"field_8";
52
61
53
- private static final String GAME_FRAME = "public java.awt.Frame jagex.client.k.ij()" ;
62
+ private static final AtomicReference <String > GAME_FRAME = new AtomicReference <String >();
63
+ //"public java.awt.Frame jagex.client.k.ij()";
54
64
55
65
public static Method mouseMove = null ;
56
66
public static Method mouseDrag = null ;
@@ -66,89 +76,124 @@ public class Reflection {
66
76
public static Field rsaExponent = null ;
67
77
public static Field rsaModulus = null ;
68
78
public static Field someBoolean = null ;
79
+
80
+ public static void setConstants (int version ) {
81
+ switch (version ) {
82
+ case 2001 :
83
+ GAME_SHELL .set ("jagex.client.k" );
84
+ MOUSE_MOVE .set ("public synchronized boolean jagex.client.k.mouseMove(java.awt.Event,int,int)" );
85
+ MOUSE_DRAG .set ("public synchronized boolean jagex.client.k.mouseDrag(java.awt.Event,int,int)" );
86
+ MOUSE_UP .set ("public synchronized boolean jagex.client.k.mouseUp(java.awt.Event,int,int)" );
87
+ MOUSE_DOWN .set ("public synchronized boolean jagex.client.k.mouseDown(java.awt.Event,int,int)" );
88
+ KEY_UP .set ("public synchronized boolean jagex.client.k.keyUp(java.awt.Event,int)" );
89
+ KEY_DOWN .set ("public synchronized boolean jagex.client.k.keyDown(java.awt.Event,int)" );
90
+ MEMBERS .set ("members" );
91
+ ADDRESS .set ("yc" );
92
+ PORT .set ("ad" );
93
+ SOMEBOOLEAN .set ("op" );
94
+ break ;
95
+ default :
96
+ GAME_SHELL .set ("a.a.GameShell" );
97
+ MOUSE_MOVE .set ("public synchronized boolean a.a.GameShell.mouseMove(java.awt.Event,int,int)" );
98
+ MOUSE_DRAG .set ("public synchronized boolean a.a.GameShell.mouseDrag(java.awt.Event,int,int)" );
99
+ MOUSE_UP .set ("public synchronized boolean a.a.GameShell.mouseUp(java.awt.Event,int,int)" );
100
+ MOUSE_DOWN .set ("public synchronized boolean a.a.GameShell.mouseDown(java.awt.Event,int,int)" );
101
+ KEY_UP .set ("public synchronized boolean a.a.GameShell.keyUp(java.awt.Event,int)" );
102
+ KEY_DOWN .set ("public synchronized boolean a.a.GameShell.keyDown(java.awt.Event,int)" );
103
+ MEMBERS .set ("members" );
104
+ ADDRESS .set ("address" );
105
+ PORT .set ("port" );
106
+ RSAEXPONENT .set ("rsaExponent" );
107
+ RSAMODULUS .set ("rsaModulus" );
108
+ SOMEBOOLEAN .set ("field_8" );
109
+ break ;
110
+ }
111
+ }
69
112
70
- public static void Load () {
113
+ public static void Load (int version ) {
71
114
try {
72
115
JClassLoader classLoader = WinRune .getInstance ().loader ;
73
116
ArrayList leftFields =
74
117
new ArrayList (); // expected virtual methods to find in given class
118
+
119
+ setConstants (version );
75
120
76
- Class c = classLoader .loadClass ("a.a.GameShell" );
121
+ Class c = classLoader .loadClass (GAME_SHELL . get () );
77
122
Method [] methods = c .getDeclaredMethods ();
78
123
Method method ;
79
124
for (int i = 0 ; i < methods .length ; i ++) {
80
125
method = methods [i ];
81
- if (methods [i ].toGenericString ().equals (MOUSE_MOVE )) {
126
+ if (methods [i ].toGenericString ().equals (MOUSE_MOVE . get () )) {
82
127
mouseMove = method ;
83
- } else if (method .toGenericString ().equals (MOUSE_DRAG )) {
128
+ } else if (method .toGenericString ().equals (MOUSE_DRAG . get () )) {
84
129
mouseDrag = method ;
85
- } else if (method .toGenericString ().equals (MOUSE_UP )) {
130
+ } else if (method .toGenericString ().equals (MOUSE_UP . get () )) {
86
131
mouseUp = method ;
87
- } else if (method .toGenericString ().equals (MOUSE_DOWN )) {
132
+ } else if (method .toGenericString ().equals (MOUSE_DOWN . get () )) {
88
133
mouseDown = method ;
89
- } else if (method .toGenericString ().equals (KEY_UP )) {
134
+ } else if (method .toGenericString ().equals (KEY_UP . get () )) {
90
135
keyUp = method ;
91
- } else if (method .toGenericString ().equals (KEY_DOWN )) {
136
+ } else if (method .toGenericString ().equals (KEY_DOWN . get () )) {
92
137
keyDown = method ;
93
- } else if (method .toGenericString ().equals (GAME_FRAME )) {
138
+ } else if (method .toGenericString ().equals (GAME_FRAME . get () )) {
94
139
gameFrame = method ;
95
140
}
96
141
}
97
142
98
143
c = classLoader .loadClass ("mudclient" );
99
144
leftFields .addAll (
100
145
Arrays .asList (new String []{
101
- MEMBERS ,
102
- ADDRESS ,
103
- PORT ,
104
- RSAEXPONENT ,
105
- RSAMODULUS ,
106
- SOMEBOOLEAN }));
146
+ MEMBERS . get () ,
147
+ ADDRESS . get () ,
148
+ PORT . get () ,
149
+ RSAEXPONENT . get () ,
150
+ RSAMODULUS . get () ,
151
+ SOMEBOOLEAN . get () }));
107
152
while (c != null && leftFields .size () > 0 ) {
108
153
Field [] fields = c .getDeclaredFields ();
109
154
Field field ;
110
155
for (int i = 0 ; i < fields .length ; i ++) {
111
156
field = fields [i ];
112
- if (leftFields .contains (MEMBERS )
113
- && field .getName ().equals (MEMBERS )) {
157
+ if (leftFields .contains (MEMBERS . get () )
158
+ && field .getName ().equals (MEMBERS . get () )) {
114
159
members = field ;
115
160
System .out .println ("Found members" );
116
- leftFields .remove (MEMBERS );
161
+ leftFields .remove (MEMBERS . get () );
117
162
continue ;
118
163
}
119
- if (leftFields .contains (ADDRESS )
120
- && field .getName ().equals (ADDRESS )) {
164
+ if (leftFields .contains (ADDRESS . get () )
165
+ && field .getName ().equals (ADDRESS . get () )) {
121
166
address = field ;
122
167
System .out .println ("Found address" );
123
- leftFields .remove (ADDRESS );
168
+ leftFields .remove (ADDRESS . get () );
124
169
continue ;
125
170
}
126
- if (leftFields .contains (PORT )
127
- && field .getName ().equals (PORT )) {
171
+ if (leftFields .contains (PORT . get () )
172
+ && field .getName ().equals (PORT . get () )) {
128
173
port = field ;
129
174
System .out .println ("Found port" );
130
- leftFields .remove (PORT );
175
+ leftFields .remove (PORT . get () );
131
176
continue ;
132
177
}
133
- if (leftFields .contains (RSAEXPONENT )
134
- && field .getName ().equals (RSAEXPONENT )) {
178
+ if (leftFields .contains (RSAEXPONENT . get () )
179
+ && field .getName ().equals (RSAEXPONENT . get () )) {
135
180
rsaExponent = field ;
136
181
System .out .println ("Found rsaExponent" );
137
- leftFields .remove (RSAEXPONENT );
182
+ leftFields .remove (RSAEXPONENT . get () );
138
183
continue ;
139
184
}
140
- if (leftFields .contains (RSAMODULUS )
141
- && field .getName ().equals (RSAMODULUS )) {
185
+ if (leftFields .contains (RSAMODULUS . get () )
186
+ && field .getName ().equals (RSAMODULUS . get () )) {
142
187
rsaModulus = field ;
143
188
System .out .println ("Found rsaModulus" );
144
- leftFields .remove (RSAMODULUS );
189
+ leftFields .remove (RSAMODULUS . get () );
145
190
continue ;
146
191
}
147
- if (leftFields .contains (SOMEBOOLEAN )
148
- && field .getName ().equals (SOMEBOOLEAN )) {
192
+ if (leftFields .contains (SOMEBOOLEAN . get () )
193
+ && field .getName ().equals (SOMEBOOLEAN . get () )) {
149
194
someBoolean = field ;
150
195
System .out .println ("Found someBoolean" );
151
- leftFields .remove (SOMEBOOLEAN );
196
+ leftFields .remove (SOMEBOOLEAN . get () );
152
197
continue ;
153
198
}
154
199
}
0 commit comments