@@ -23,6 +23,8 @@ public class MCScanner {
2323 private static int offsetJ = 0 ;
2424 private static int offsetK = 0 ;
2525 private static int offsetL = 0 ;
26+ private static boolean stopping = false ;
27+
2628 public static void main (String [] var0 ) {
2729 AtomicInteger threads = new AtomicInteger (1024 );
2830 int timeout = 1000 ;
@@ -72,17 +74,22 @@ public static void main(String[] var0) {
7274 frame .addWindowListener (new java .awt .event .WindowAdapter () {
7375 @ Override
7476 public void windowClosing (java .awt .event .WindowEvent windowEvent ) {
77+ stopping = true ;
7578 logger .log (Level .INFO , "Stopping threads..." );
7679 for (Thread nextThread : threadList ) {
77- nextThread .interrupt ();
80+ try {
81+ nextThread .join ();
82+ } catch (InterruptedException timeouter ) {
83+ // Timeout or something idk
84+ }
7885 }
79- logger .log (Level .INFO , "Making an 'offset.mcscan '..." );
86+ logger .log (Level .INFO , "Making an '.resumescan '..." );
8087 try {
81- BufferedWriter writer = new BufferedWriter (new FileWriter ("offset.mcscan " ));
88+ BufferedWriter writer = new BufferedWriter (new FileWriter (".resumescan " ));
8289 writer .write (String .valueOf (offsetI + "\n " + offsetJ + "\n " + offsetK + "\n " + offsetL ));
8390 writer .close ();
8491 } catch (IOException e ) {
85- logger .log (Level .SEVERE , "Failed to write 'offset.mcscan '!" );
92+ logger .log (Level .SEVERE , "Failed to write '.resumescan '!" );
8693 }
8794 logger .log (Level .INFO , "Exiting..." );
8895 System .exit (0 );
@@ -105,10 +112,10 @@ public void windowClosing(java.awt.event.WindowEvent windowEvent) {
105112
106113 frame .setVisible (true );
107114
108- File offsetFile = new File ("offset.mcscan " );
115+ File offsetFile = new File (".resumescan " );
109116 if (offsetFile .exists ()) {
110117 try {
111- logger .log (Level .INFO , "Found 'offset.mcscan '!" );
118+ logger .log (Level .INFO , "Found '.resumescan '!" );
112119 BufferedReader reader = new BufferedReader (new FileReader (offsetFile ));
113120 offsetI = Integer .parseInt (reader .readLine ());
114121 offsetJ = Integer .parseInt (reader .readLine ());
@@ -117,7 +124,7 @@ public void windowClosing(java.awt.event.WindowEvent windowEvent) {
117124 logger .log (Level .INFO , "Continuing from " + offsetI + "." + offsetJ + "." + offsetK + "." + offsetL + "..." );
118125 reader .close ();
119126 } catch (IOException e ) {
120- logger .log (Level .SEVERE , "Failed to read 'offset.mcscan '!" );
127+ logger .log (Level .SEVERE , "Failed to read '.resumescan '!" );
121128 }
122129 }
123130
@@ -126,26 +133,42 @@ public void windowClosing(java.awt.event.WindowEvent windowEvent) {
126133 int thisOffsetK = offsetK ;
127134 int thisOffsetL = offsetL ;
128135 for (int i = thisOffsetI ; i <= maxRange ; ++i ) {
129- offsetI = i ;
136+ if (stopping ) {
137+ break ;
138+ } else {
139+ offsetI = i ;
140+ }
130141 for (int j = thisOffsetJ ; j <= 255 ; ++j ) {
131- offsetJ = j ;
142+ if (stopping ) {
143+ break ;
144+ } else {
145+ offsetJ = j ;
146+ }
132147 for (int k = thisOffsetK ; k <= 255 ; ++k ) {
133- offsetK = k ;
148+ if (stopping ) {
149+ break ;
150+ } else {
151+ offsetK = k ;
152+ }
134153 for (int l = thisOffsetL ; l <= 255 ; ++l ) {
135- offsetL = l ;
136- String ip = i + "." + j + "." + k + "." + l ;
137-
138- ScannerThread scannerThread = new ScannerThread (ip , port , timeout , databaseHandler );
139- Thread scanThread = new Thread (scannerThread );
140- threadList .add (scanThread );
141- scanThread .start ();
154+ if (stopping ) {
155+ break ;
156+ } else {
157+ offsetL = l ;
158+ String ip = i + "." + j + "." + k + "." + l ;
159+
160+ ScannerThread scannerThread = new ScannerThread (ip , port , timeout , databaseHandler );
161+ Thread scanThread = new Thread (scannerThread );
162+ threadList .add (scanThread );
163+ scanThread .start ();
164+ }
142165
143166 if (threadList .size () >= threads .get ()) {
144167 for (Thread nextThread : threadList ) {
145168 try {
146169 nextThread .join ();
147170 ++scanned ;
148- scannedLabel .setText ("Scanned: " + scanned + "/" + progressThing * 256 + " (" + Math .round ((scanned / (progressThing * 256 )) * 100 ) / 100 + "%) (" + ip + ") " );
171+ scannedLabel .setText ("Scanned: " + scanned + "/" + progressThing * 256 + " (" + Math .round ((scanned / (progressThing * 256 )) * 100 ) / 100 + "%)" );
149172 } catch (InterruptedException timeout2 ) {
150173 // Timed out or smth
151174 }
0 commit comments