import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.Method;
import javax.swing.*;
import org.rsbot.script.*;
import org.rsbot.script.methods.Game;
import org.rsbot.script.methods.Skills;
import org.rsbot.script.wrappers.*;
import org.rsbot.event.events.MessageEvent;
import org.rsbot.event.listeners.*;
import javax.imageio.ImageIO;
@ScriptManifest(authors = { "Conderoga" }, keywords = "Mining", name = "Conderoga's Cavern Miner", version = 1.03,description = "Mines and banks gold and coal in the LRC."

/*UpdateLog:
v1.00 - initial release
v1.01 - Fixed logout bug and deathwalking bugs
v1.02 - Added inferno adze, fixed coal path, fixed deprecation warnings (Thanks to Rawr =D)
v1.03 - Fixed all deathwalking bugs (Hopefully)
*/
public class CCMine extends Script implements PaintListener, MessageListener, MouseListener{
//GUI stuff
private String version = "1.03";
public CCMineGUI gui;
private boolean guiWait = true;
private boolean guiExit = true;
private String rockType;
private boolean quickDeposit = false;
private boolean evade = false;
private boolean fastBank = false;
//IDS and such
private int bankID = 45079;
private int goldID = 444;
private int coalID = 453;
private int rockPrice = 1;
private int [] picks = {1265,1267,1269,1271,1273,1275,15259};
private int closedCoalRock = 5990;
private int closedGoldRock = 45075;
private int openGoldRock = 45076;
private int openCoalRock = 5999;
private int openID;
private int closedID;
private RSTile bankTile = new RSTile(3653,5113);
private RSTile [][] bankToRocks;
private RSTile [][] rocksToBank;
private RSTile [][] rocksToRocks;
private boolean isDead = false;
//Timers Stuff
private RSTile [] rocks;
private boolean [] rockStatus = new boolean [3];
private long [] rockTimeDead = new long [3];
private long [] rockDeadTime = new long [3];
private long [] rockTimeAlive = new long [3];
private long [] rockAliveTime = new long [3];
private int nextRock = 0;
int safety = 0;
//Paint Stuff
private String status = "";
private int numGold;
private int numCoal;
private boolean full = false;
private int startLevel;
private int startExp;
private int expGained;
private int lvlsGained;
private long startTime;
private double startTimeDbl;
private Point [] rockPoints;
private final Image img1 = getImage("http://www.conderogascripts.99k.org/CCMine.png"

;
private final Image img2 = getImage("http://i263.photobucket.com/albums/ii158/zpogo/Bar.png");
private final Image img4 = getImage("http://i263.photobucket.com/albums/ii158/zpogo/EXPback-1copy.png");
private boolean showPaint = true;
private boolean fancyPaint = true;
private Point p;
private Color mouseColor = Color.RED;
public boolean onStart() {
startTime = System.currentTimeMillis();
startTimeDbl = System.currentTimeMillis();
//Credits to Zombieknight for this:-----------------
final int welcome = JOptionPane.showConfirmDialog(null,"Before using my script, would you like to thank me\nby clicking some adverts?","Welcome", JOptionPane.YES_NO_OPTION);
if (welcome == 0) {
final String message = "Thank you for your support!";
JOptionPane.showMessageDialog(null, message);
openURL("http://adf.ly/AgSn");
}
//=------------------------------------------------------*/
gui = new CCMineGUI();
gui.setVisible(true);
while(guiWait)
{
sleep(100);
}
env.disableRandom("InterfaceCloser");
return !guiExit;
}
public void setUp(){
status = "Setting Up";
if(rockType.equals("Gold")){
openID = openGoldRock;
closedID = closedGoldRock;
status = "Looking up Prices";
rockPrice = getGEValue("Gold ore",goldID);
log("Gold ore price: "+rockPrice);
rocks = new RSTile [2];
rocks[0] = new RSTile(3668,5076);
rocks[1] = new RSTile(3638,5095);
bankToRocks = new RSTile[2][];
rocksToBank = new RSTile[2][];
rocksToRocks = new RSTile [1][];
RSTile [] bankToRock1 = {new RSTile(3654,5114),new RSTile(3658,5101),new RSTile(3662,5090),new RSTile(3666,5080),new RSTile(3669,5077),new RSTile(3669,5075)};
bankToRocks[0] = bankToRock1;
rocksToBank[0] = walking.newTilePath(bankToRock1).reverse().toArray();
RSTile [] bankToRock2 = {new RSTile(3654,5114),new RSTile(3657,5105),new RSTile(3651,5096),new RSTile(3639,5096)};
bankToRocks[1] = bankToRock2;
rocksToBank[1] = walking.newTilePath(bankToRock2).reverse().toArray();
RSTile [] rock2ToRock1 = {new RSTile(3639,5094),new RSTile(3648,5092),new RSTile(3658,508

,new RSTile(3666,5082),new RSTile(3669,5077)};
rocksToRocks[0] = rock2ToRock1;
rockPoints = new Point [2];
}
if(rockType.equals("Coal")){
openID = openCoalRock;
closedID = closedCoalRock;
status = "Looking up Prices";
rockPrice = getGEValue("Coal",coalID);
log("Coal price: "+rockPrice);
rocks = new RSTile[3];
rocks[0] = new RSTile(3665,5091);
rocks[1] = new RSTile(3675,5099);
rocks[2] = new RSTile(3688,510

;
rockPoints = new Point [3];
bankToRocks = new RSTile[3][];
rocksToBank = new RSTile[3][];
rocksToRocks = new RSTile[3][];
RSTile[] bankToRock1 ={new RSTile(3654,5114),new RSTile(3660,5104),new RSTile(3661,5095),new RSTile(3665,5092)};
RSTile[] bankToRock2 ={new RSTile(3654,5114),new RSTile(3660,5114),new RSTile(3667,5111),new RSTile(3673,5104),new RSTile(3674,5101)};
RSTile[] bankToRock3 ={new RSTile(3654,5114),new RSTile(3662,5114),new RSTile(3671,5112),new RSTile(3678,5107),new RSTile(3686,5108),new RSTile(3689,5106)};
bankToRocks[0] = bankToRock1;
bankToRocks[1] = bankToRock2;
bankToRocks[2] = bankToRock3;
rocksToBank[0] = walking.newTilePath(bankToRock1).reverse().toArray();
rocksToBank[1] = walking.newTilePath(bankToRock2).reverse().toArray();
rocksToBank[2] = walking.newTilePath(bankToRock3).reverse().toArray();
RSTile [] rock1ToRock2 = {new RSTile(3665,5092),new RSTile(3670,5095),new RSTile(3673,5098)};
RSTile [] rock1ToRock3 = {new RSTile(3665,5092),new RSTile(3670,5097),new RSTile(3675,5102),new RSTile(3680,5105),new RSTile(3686,5108),new RSTile(3689,5106)};
RSTile [] rock2ToRock3 = {new RSTile(3673,5098),new RSTile(3675,5102),new RSTile(3680,5105),new RSTile(3686,5108),new RSTile(3689,5106)};
rocksToRocks[0] = rock1ToRock2;
rocksToRocks[1] = rock1ToRock3;
rocksToRocks[2] = rock2ToRock3;
}
}
public boolean mineCheck(){
for(int i = 0; i0){
status = "Equipping items.";
for(int i = 0; i1)
mouse.move(new Point((int)temp.getX(),(int)temp.getY()-10),1,1);
else
mouse.move(new Point((int)temp.getX(),(int)temp.getY()),1,1);
}catch(Exception e){};
}
}
public void walkToBank(){
long startTime = System.currentTimeMillis();
status = "Walking to bank.";
mouse.setSpeed(random(5,8));
if(random(1,3)==2)
camera.setPitch(true);
int lastTileToWalkTo = -1;
int tempTileToWalkTo = 0;
RSTile [] path = new RSTile [0];
if(playerIsNear(rocks[0],5))
path = rocksToBank[0];
else if(playerIsNear(rocks[1],5))
path = rocksToBank[1];
else if(rocks.length>2&&playerIsNear(rocks[2],5))
path = rocksToBank[2];
else
path = rocksToBank[0];
path = fixPath(path);
while(!playerIsNear(bankTile,6)&&System.currentTimeMillis()-startTime20){
walking.setRun(true);
sleep(random(600,800));
}
status = "Walking to bank..";
if(!getMyPlayer().isMoving()){
sleep(random(600,800));
if(!getMyPlayer().isMoving())
lastTileToWalkTo=-1;
}
boolean clicked = false;
tempTileToWalkTo = walkPath(path);
if(tempTileToWalkTo>lastTileToWalkTo){
if(walking.walkTileMM(path[tempTileToWalkTo],1,1))
clicked = true;
sleep(random(400,500));
if(getMyPlayer().isMoving())
clicked = true;
}
if(clicked){
lastTileToWalkTo = tempTileToWalkTo;
}
sleep(random(200, 300));
}
}
public boolean compareTiles(RSTile t1, RSTile t2){
if(t1==null||t2==null)
return false;
return t1.getX()==t2.getX()&&t1.getY()==t2.getY();
}
public int walkPath(RSTile [] path){
int temp = 0;
boolean nearSomething = false;
for(int i = 0; i