1.7.0 test7

This commit is contained in:
Morlok8k 2012-07-09 15:31:39 -07:00
parent 71b4bef098
commit 3b59258a6e
5 changed files with 159 additions and 70 deletions

View File

@ -108,7 +108,7 @@ public class MLG_WorldVerify {
File level = new File(Main.worldPath + Main.fileSeparator + "level.dat");
if (!level.exists() || !level.isFile()) {
Main.err("The currently-configured world does not exist. Please launch the server once, first.");
Main.err("The currently-configured world does not exist.");
return;
}

View File

@ -42,7 +42,7 @@ public class Main {
public static boolean testing = false; // display more output when debugging
public static final String PROG_NAME = "Minecraft Land Generator"; // Program Name
public static final String VERSION = "1.6.99 (1.7.0 test3)"; // Version Number!
public static final String VERSION = "1.7.0 test7"; // Version Number!
public static final String AUTHORS = "Corrodias, Morlok8k, pr0f1x"; // Authors
public static final String fileSeparator = System.getProperty("file.separator");
@ -120,6 +120,9 @@ public class Main {
public static final String github_MLG_BuildID_URL = github_URL + buildIDFile;
public static final String github_MLG_jar_URL = github_URL + MLG_JarFile;
public static int resumeX = 0; //resume data, if needed.
public static int resumeZ = 0;
//
//
//Private Vars:
@ -443,6 +446,16 @@ public class Main {
try {
xRange = Integer.parseInt(args[0]);
zRange = Integer.parseInt(args[1]);
if ((xRange < 1000) && (xRange != 0)) {
xRange = 1000; //if less than 1000, (and not 0) set to 1000 (Calculations don't work well on very small maps)
err("X size too small - Changing X to 1000");
}
if ((zRange < 1000) && (zRange != 0)) {
zRange = 1000;
err("Z size too small - Changing Z to 1000");
}
} catch (NumberFormatException ex) {
err("Invalid X or Z argument.");
err("Please Enter the size of world you want. Example: X:1000 Z:1000");
@ -511,14 +524,33 @@ public class Main {
{
File backupLevel = new File(worldPath + fileSeparator + "level_backup.dat");
if (backupLevel.exists()) {
err("There is a level_backup.dat file left over from a previous attempt that failed. You should go determine whether to keep the current level.dat"
+ " or restore the backup.");
err("You most likely will want to restore the backup!");
MLG_Time.waitTenSec(false);
//err("There is a level_backup.dat file left over from a previous attempt that failed. You should go determine whether to keep the current level.dat"
// + " or restore the backup.");
//err("You most likely will want to restore the backup!");
//MLG_Time.waitTenSec(false);
//TODO: use resume data
err("There is a level_backup.dat file left over from a previous attempt that failed.");
out("Resuming...");
//use resume data
File serverLevel = new File(worldPath + fileSeparator + "level.dat");
try {
MLG_Misc.copyFile(backupLevel, serverLevel);
} catch (IOException e) {
e.printStackTrace();
}
backupLevel.delete();
//return;
MLG_FileRead.readArrayListCoordLog(worldPath + fileSeparator
+ "MinecraftLandGenerator.log"); // we read the .log just for any resume data, if any.
System.gc(); //run the garbage collector - hopefully free up some memory!
xRange = resumeX;
zRange = resumeZ;
return;
}
}
@ -543,20 +575,25 @@ public class Main {
long generationStartTimeTracking = System.currentTimeMillis(); //Start of time remaining calculations.
MLG_Server.runMinecraft(alternate);
boolean serverLaunch = MLG_Server.runMinecraft(alternate);
if (!(serverLaunch)) {
System.exit(1); // we got a warning or severe error
}
if ((xRange == 0) & (zRange == 0)) { //If the server is launched with an X and a Z of zero, then we just shutdown MLG after the initial launch.
return;
}
xRange = (int) (Math.ceil(((double) xRange) / ((double) 16))) * 16; //say xRange was entered as 1000. this changes it to be 1008, a multiple of 16. (the size of a chunk)
zRange = (int) (Math.ceil(((double) zRange) / ((double) 16))) * 16; //say zRange was entered as 2000. there is no change, as it already is a multiple of 16.
MLG_FileWrite.AppendTxtFile(
worldPath + fileSeparator + "MinecraftLandGenerator.log",
"# " + PROG_NAME + " " + VERSION + " - " + MLG_SelfAware.JVMinfo() + newLine
+ "# " + MC_Server_Version + newLine + "# Started: "
+ dateFormat.format(generationStartTimeTracking) + newLine);
xRange = (int) (Math.ceil(((double) xRange) / ((double) 16))) * 16; //say xRange was entered as 1000. this changes it to be 1008, a multiple of 16. (the size of a chunk)
zRange = (int) (Math.ceil(((double) zRange) / ((double) 16))) * 16; //say zRange was entered as 2000. there is no change, as it already is a multiple of 16.
+ dateFormat.format(generationStartTimeTracking) + newLine
+ "##Size: X" + xRange + "Z" + zRange + newLine);
out("");
@ -593,6 +630,10 @@ public class Main {
out("");
double xLoops, zLoops;
int curXloops = 0;
int curZloops = 0;
int xRangeAdj = 0;
int zRangeAdj = 0;
// have main loop make an arraylist of spawnpoints
// read from a file if MLG has run before on this world. save to arraylist
@ -602,27 +643,27 @@ public class Main {
// X
xLoops = ((double) xRange / (double) increment); //How many loops do we need?
xLoops = Math.ceil(xLoops); //round up to find out!
xRangeAdj = (int) (xLoops * increment);
xLoops = xLoops + 1;
// Z
zLoops = ((double) zRange / (double) increment); //How many loops do we need?
zLoops = Math.ceil(zLoops); //round up to find out!
zRangeAdj = (int) (zLoops * increment);
zLoops = zLoops + 1;
out("Calculating Spawn Points...");
int totalIterations = (int) (xLoops * zLoops);
int currentIteration = 0;
int curXloops = 0;
int curZloops = 0;
long differenceTime = System.currentTimeMillis();
Long timeTracking = 0L;
ArrayList<Coordinates> launchList = new ArrayList<Coordinates>(totalIterations);
for (int currentX = (int) ((Math.ceil((((0 - xRange) / 2) / increment))) * increment); currentX <= (xRange / 2); currentX +=
increment) {
for (int currentX = 0; currentX <= (xRangeAdj / 2); currentX += increment) {
curXloops++;
if (curXloops == 1) {
currentX = (((0 - xRange) / 2) + (increment / 2) + 16);
@ -630,9 +671,7 @@ public class Main {
currentX = (xRange / 2) - (increment / 2);
}
for (int currentZ =
(int) ((Math.ceil((((0 - zRange) / 2) / increment))) * increment); currentZ <= (zRange / 2); currentZ +=
increment) {
for (int currentZ = 0; currentZ <= (zRangeAdj / 2); currentZ += increment) {
currentIteration++;
curZloops++;
@ -642,20 +681,25 @@ public class Main {
currentZ = (zRange / 2) - (increment / 2);
}
// add coords to arraylist here
{
// add Coordinates to arraylist here
Coordinates tempCoords =
new Coordinates(currentX + xOffset, 64, currentZ + zOffset);
launchList.add(tempCoords);
//TODO: remove this before release:
System.out.println(tempCoords);
}
if (curZloops == 1) {
currentZ =
(int) ((Math.ceil((((0 - zRange) / 2) / increment))) * increment);
(int) ((Math.ceil((((0 - zRangeAdj) / 2) / increment))) * increment);
}
}
curZloops = 0;
if (curXloops == 1) {
currentX = (int) ((Math.ceil((((0 - xRange) / 2) / increment))) * increment);
currentX = (int) ((Math.ceil((((0 - xRangeAdj) / 2) / increment))) * increment);
}
}
@ -668,11 +712,6 @@ public class Main {
MLG_ArrayList.arrayListRemove(launchList, removeList);
}
int numRemoved = totalIterations - launchList.size();
if (numRemoved > 0) {
out("Reduced number of server launches by: " + numRemoved);
}
removeList.clear(); // we are done with this now.
System.gc(); //run the garbage collector - hopefully free up some memory!
@ -738,12 +777,12 @@ public class Main {
MLG_Misc.copyFile(backupLevel, serverLevel);
backupLevel.delete();
out("Restored original level.dat.");
//finishedImage(); //disabled, because I didn't care for it - it didn't flow well with MLG
out("Generation complete in: "
+ MLG_Time.displayTime(startTime, System.currentTimeMillis()));
MLG_Time.waitTenSec(false);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
}
}

View File

@ -94,31 +94,58 @@ public class Coordinates {
int x = 0, y = 0, z = 0;
//TODO: add validity checks:
//TODO: add short version... (Y = 0)
//TODO: add short version... (Y = 64)
int start = 0, end = 0, firstComma = 0, secComma = 0;
String sX = "", sY = "", sZ = "";
boolean shortMode = false, notCoords = false;
start = StringOfCoords.indexOf("[");
end = StringOfCoords.indexOf("]");
if ((start == -1) || (end == -1)) {
start = StringOfCoords.indexOf("(");
end = StringOfCoords.indexOf(")");
if ((start != -1) || (end != -1)) {
shortMode = true;
} else {
notCoords = true;
}
}
if (notCoords) { return new Coordinates(0, 0, 0); }
if (shortMode) {
StringOfCoords = StringOfCoords.substring(start, end);
firstComma = StringOfCoords.indexOf(",");
sX = StringOfCoords.substring(start + 1, firstComma);
sY = "64";
sZ = StringOfCoords.substring(firstComma + 1, end);
} else {
StringOfCoords = StringOfCoords.substring(start, end);
firstComma = StringOfCoords.indexOf(",");
secComma = StringOfCoords.lastIndexOf(",");
//System.out.println(start + " " + end + " " + firstComma + " " + secComma);
sX = StringOfCoords.substring(start + 1, firstComma);
sY = StringOfCoords.substring(firstComma + 1, secComma);
sZ = StringOfCoords.substring(secComma + 1, end);
//System.out.println(sX + " " + sY + " " + sZ);
}
try {
x = Integer.parseInt(sX);
y = Integer.parseInt(sY);
z = Integer.parseInt(sZ);
} catch (NumberFormatException e) {
return new Coordinates(0, 0, 0);
}
return new Coordinates(x, y, z);
}

View File

@ -20,6 +20,9 @@ public class MLG_FileRead {
String line = "";
while ((line = in.readLine()) != null) {
line = line.trim();
int end = line.indexOf('#'); // comments, ignored lines
boolean ignoreLine = false;
Coordinates c = new Coordinates();
@ -35,10 +38,19 @@ public class MLG_FileRead {
if (!(ignoreLine)) {
c = Coordinates.parseString(line.substring(0, end));
Return.add(c);
} /* else {
// other future stuff may go here.
} else {
if (line.startsWith("##Size:")) { // Potential Resume data.
int xx = 0;
int zz = 0;
xx = line.indexOf('X');
zz = line.indexOf('Z');
Main.resumeX = Integer.parseInt(line.substring(xx + 1, zz));
Main.resumeZ = Integer.parseInt(line.substring(zz + 1));
}
}
*/
}
in.close();

View File

@ -14,11 +14,22 @@ public class MLG_input_CLI {
*/
public static int getInt(String msg) {
int Return = 0;
while (!(Main.sc.hasNextInt())) {
Main.sc.nextLine();
Main.outP(Main.MLG + "Invalid Input. " + msg);
}
return Main.sc.nextInt();
Return = Main.sc.nextInt();
if (Return < 1000) {
Main.out("Input must be 1000 or larger.");
Main.outP(Main.MLG + msg);
Return = getInt(msg);
}
return Return;
}