This isn't right.. That sounds more like a "Packet" bot sending a packet with a click flag in it. SMART's reflection is
exactly like any other Java bots'. They all set fields accessible and read them. SMART's mouse click is similar to that of other bots' as well.
The difference is that other bots remove the mouse listeners from the canvas and add their own listeners. They then invoke their virtual click using this. SMART instead sends messages using an eventDispatch. Now not all Javabots remove the listeners and replace it with their own. It is the quickest way and easiest and probably also the laziest way.
The difference?
Java bots (Old way, not sure if they do it different now.. I doubt powerbot does this):
Java Code:
//Within the custom event listener..@Override
public void mouseClicked
(MouseEvent e
) { if (e.
getSource() == bot.
getApplet()) { e.
setSource(canvas
); for (MouseListener Listener
: MouseListeners
) { Listener.
mouseClicked(e
); } } else if (InputEnabled
) { for (MouseListener Listener
: MouseListeners
) { Listener.
mouseClicked(e
); } } }//Within your input manager..MouseInputListener.
mousePressed(new MouseEvent(bot.
getApplet(),
MouseEvent.
MOUSE_PRESSED,
System.
currentTimeMillis(), Mask, MousePosition.
x, MousePosition.
y,
1,
false,
Button));
SMART:
Java Code:
//within custom EventQueueprotected void dispatchEvent
(AWTEvent event
) { if (event
instanceof UnblockedEvent
) { AWTEvent e
= ((UnblockedEvent
)event
).
getEvent(); ((Component)e.
getSource()).
dispatchEvent(e
); } else if (blockedComponents.
contains(event.
getSource()) && blocking.
get(event.
getSource())) { if (event
instanceof MouseEvent || event
instanceof KeyEvent || event
instanceof WindowEvent || event
instanceof FocusEvent) { redirects.
get(event.
getSource()).
dispatched(event
); return; } super.
dispatchEvent(event
); } else { super.
dispatchEvent(event
); } }//Within your input manager..Queue.
sendUnblocked(new MouseEvent(comp,
MouseEvent.
MOUSE_PRESSED,
System.
currentTimeMillis(),btnMask,cx,cy,
1,
false,btn
));
That is the only difference. Even then, I've seen java-bots use event dispatching as well..
Other than that, the reflection is the exact same as SMART's. SMART just has a method that makes it easier to use strings to represent chained fields and classes.. 'hs.z' instead of loadClass("hs").getDeclaredField("z").
SMART also
Xboot's the canvas where other bots inject into the canvas for painting/debugging.
SMART is probably no less detectable than any other bot IMO. Anyway, detectability shouldn't matter. Once something is detectable, it's detectable.
But still, maybe one of the above is why SMART isn't being picked up or Jagex is just lazy.