1.7.0 test7
This commit is contained in:
parent
71b4bef098
commit
3b59258a6e
@ -15,14 +15,14 @@ public class MLG_WorldVerify {
|
||||
*/
|
||||
static void verifyWorld() {
|
||||
//TODO: element comment
|
||||
|
||||
|
||||
// verify that we ended up with a good server path, either from the file or from an argument.
|
||||
File file = new File(Main.serverPath);
|
||||
if (!file.exists() || !file.isDirectory()) {
|
||||
Main.err("The server directory is invalid: " + Main.serverPath);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
// read the name of the current world from the server.properties file
|
||||
BufferedReader props =
|
||||
@ -32,25 +32,25 @@ public class MLG_WorldVerify {
|
||||
while ((line = props.readLine()) != null) {
|
||||
String property = "";
|
||||
String value = "";
|
||||
|
||||
|
||||
int pos = line.indexOf('=');
|
||||
|
||||
|
||||
int end = line.lastIndexOf('#'); // comments, ignored lines
|
||||
|
||||
|
||||
if (end == -1) { // If we have no hash sign, then we read till the end of the line
|
||||
end = line.length();
|
||||
|
||||
|
||||
}
|
||||
if (end <= (pos + 1)) { // If hash is before the '=', we may have an issue... it should be fine, cause we check for issues next, but lets make sure.
|
||||
end = line.length();
|
||||
pos = -1;
|
||||
}
|
||||
|
||||
|
||||
if (end == 0) { //hash is first char, meaning entire line is a comment
|
||||
end = line.length();
|
||||
pos = 0;
|
||||
}
|
||||
|
||||
|
||||
if (pos != -1) {
|
||||
if (line.length() == 0) {
|
||||
property = "";
|
||||
@ -59,14 +59,14 @@ public class MLG_WorldVerify {
|
||||
property = line.substring(0, pos).toLowerCase();
|
||||
value = line.substring(pos + 1);
|
||||
}
|
||||
|
||||
|
||||
if (property.equals("level-name")) {
|
||||
Main.worldPath = Main.serverPath + Main.fileSeparator + value;
|
||||
Main.worldName = value;
|
||||
}
|
||||
if (Main.useRCON) {
|
||||
if (property.equals("enable-rcon")) {
|
||||
|
||||
|
||||
if (value.contains("true")) {
|
||||
Main.rcon_Enabled = true;
|
||||
Main.out("RCON is set to be Enabled on the server.");
|
||||
@ -91,13 +91,13 @@ public class MLG_WorldVerify {
|
||||
IP = "0.0.0.0";
|
||||
}
|
||||
Main.rcon_IPaddress = IP;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (FileNotFoundException ex) {
|
||||
Main.err("Could not open " + Main.serverPath + Main.fileSeparator + "server.properties");
|
||||
return;
|
||||
@ -105,13 +105,13 @@ public class MLG_WorldVerify {
|
||||
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,10 +39,10 @@ public class Main {
|
||||
//
|
||||
//
|
||||
// Public Vars:
|
||||
public static boolean testing = false; // display more output when debugging
|
||||
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:
|
||||
@ -142,7 +145,7 @@ public class Main {
|
||||
public static boolean useRCON = false; //use RCON to communicate with server. ***Experimental***
|
||||
public static boolean rcon_Enabled = false; //is server is set to use RCON?
|
||||
public static String rcon_IPaddress = "0.0.0.0"; //default is 0.0.0.0
|
||||
public static String rcon_Port = "25575"; //default is 25575, we are just initializing here.
|
||||
public static String rcon_Port = "25575"; //default is 25575, we are just initializing here.
|
||||
public static String rcon_Password = "test"; //default is "", but a password must be entered.
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
@ -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
|
||||
@ -601,28 +642,28 @@ public class Main {
|
||||
|
||||
// X
|
||||
xLoops = ((double) xRange / (double) increment); //How many loops do we need?
|
||||
xLoops = Math.ceil(xLoops); //round up to find out!
|
||||
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!
|
||||
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
|
||||
Coordinates tempCoords =
|
||||
new Coordinates(currentX + xOffset, 64, currentZ + zOffset);
|
||||
launchList.add(tempCoords);
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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("]");
|
||||
|
||||
StringOfCoords = StringOfCoords.substring(start, end);
|
||||
if ((start == -1) || (end == -1)) {
|
||||
start = StringOfCoords.indexOf("(");
|
||||
end = StringOfCoords.indexOf(")");
|
||||
|
||||
firstComma = StringOfCoords.indexOf(",");
|
||||
secComma = StringOfCoords.lastIndexOf(",");
|
||||
if ((start != -1) || (end != -1)) {
|
||||
shortMode = true;
|
||||
} else {
|
||||
notCoords = true;
|
||||
}
|
||||
}
|
||||
|
||||
//System.out.println(start + " " + end + " " + firstComma + " " + secComma);
|
||||
if (notCoords) { return new Coordinates(0, 0, 0); }
|
||||
|
||||
sX = StringOfCoords.substring(start + 1, firstComma);
|
||||
sY = StringOfCoords.substring(firstComma + 1, secComma);
|
||||
sZ = StringOfCoords.substring(secComma + 1, end);
|
||||
if (shortMode) {
|
||||
|
||||
//System.out.println(sX + " " + sY + " " + sZ);
|
||||
StringOfCoords = StringOfCoords.substring(start, end);
|
||||
|
||||
x = Integer.parseInt(sX);
|
||||
y = Integer.parseInt(sY);
|
||||
z = Integer.parseInt(sZ);
|
||||
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(",");
|
||||
|
||||
sX = StringOfCoords.substring(start + 1, firstComma);
|
||||
sY = StringOfCoords.substring(firstComma + 1, secComma);
|
||||
sZ = StringOfCoords.substring(secComma + 1, end);
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user