Hey all,
This is a really simple tutorial for adding shift drop into your stock Project Insanity (PI) client.
It's a cool feature, loved by all RuneScape players.
In your Client.java (inside src, under models.players)
Add the following code
public static boolean shiftPressed = false;
What are we doing here? (For newcomers)
Here, we are creating a boolean that we can refer back to later to check if the shift key is currently pressed. This variable will be changed by key event listeners as seen later on in this tutorial.
Then use CTRL+F or your IDE search tool to find the following condition:
if (j == 1 && menuActionRow > 0) {
And you should see something like this (although it may vary if you are not using a fresh/stock PI):
if(j == 1 && menuActionRow > 0) {
int i1 = menuActionID[menuActionRow - 1];
if(i1 == 632 || i1 == 78 || i1 == 867 || i1 == 431 || i1 == 53 || i1 == 74 || i1 == 454 || i1 == 539 || i1 == 493 || i1 == 847 || i1 == 447 || i1 == 1125) {
int l1 = menuActionCmd2[menuActionRow - 1];
int j2 = menuActionCmd3[menuActionRow - 1];
RSInterface class9 = RSInterface.interfaceCache[j2];
Underneath RSInterface class9 = RSInterface.interfaceCache[j2]; add:
if (shiftPressed){
boolean hasDrop = false;
int dropId = 0;
for (int i = 0; i < menuActionName.length; i++){
if (menuActionName[i] == null) {
continue;
}
// To check for destroyable items too
if (menuActionName[i].contains("Drop") || menuActionName[i].contains("Destroy") || menuActionName[i].contains("Release")) {
hasDrop = true;
dropId = i;
}
}
if (hasDrop) {
doAction(dropId);
return;
}
}
What are we doing here? (For newcomers)
Here, we are using the boolean shiftPressed to: firstly, check if the shift key has been pressed (which is set by the below event listeners) and we are then executing code based on the answer. If the shift key is pressed, then we are checking that the item has a drop, destroy or release option and dropping it.
Now close your client.java, as we are done with this class and are moving onto another.
Open RSApplet.java and search for:
public final void keyPressed(KeyEvent keyevent) {
And you should see:
public final void keyPressed(KeyEvent keyevent) {
idleTime = 0;
int i = keyevent.getKeyCode();
int j = keyevent.getKeyChar();
Under this, add:
if(keyevent.isShiftDown()){
client.shiftPressed = true;
}
Please note, if your client.java file has a capital c (Client.java), you will need to change this to Client.shiftPressed = true;
What are we doing here? (For newcomers)
Here we are inside the keyPressed method which deals with keys that are pressed, we are identifying the character that has been pressed and in this case, int i represents the key code of the character. So we are comparing it to KeyEvent.VK_SHIFT (the shift key), and if their codes match and we are telling the client that the shift key has been pressed and storing the answer into a boolean that we can refer back to and check on.
Now search for:
public final void keyReleased(KeyEvent keyevent) {
You should see:
public final void keyReleased(KeyEvent keyevent) {
idleTime = 0;
int i = keyevent.getKeyCode();
char c = keyevent.getKeyChar();
Under the last line of the above, add:
if (i == KeyEvent.VK_SHIFT) {
client.shiftPressed = false;
}
Again, please note, if your client.java file has a capital c (Client.java), you will need to change this to Client.shiftPressed = true; What are we doing here? (For newcomers)
Here we are inside the keyReleased method which deals with keys that are released (unpressed), we are identifying the character that has been released and in this case, int i represents the key code of the character. So we are comparing it to KeyEvent.VK_SHIFT (the shift key), and if their codes match and we are telling the client that the shift key is no longer pressed and storing the answer into a boolean that we can refer back to and check on.
_______________________________________
Now save and build your source and you will be good to go. Any questions, feel free to ask!