package net.technicpack.launchercore.modpacks;
import net.technicpack.launchercore.launch.java.IJavaVersion;
import net.technicpack.launchercore.launch.java.JavaVersionRepository;
import net.technicpack.utilslib.Memory;
public class RunData {
private String java;
private String memory;
public RunData() {}
public String getJava() { return java; }
public long getMemory() {
try {
return Long.parseLong(memory);
} catch (NumberFormatException ex) {
return 0;
}
}
public Memory getMemoryObject() {
return getMemorySetting(getMemory());
}
public static boolean isJavaVersionAtLeast(String testString, String compareString) {
String[] compareVersion = compareString.split("[._]");
String[] testVersion = testString.split("[._]");
int compareLength = Math.min(compareVersion.length, testVersion.length);
for (int i = 0; i < compareLength; i++) {
int compare = compareVersion[i].compareTo(testVersion[i]);
if (compare == 0)
continue;
return compare < 0;
}
if (compareVersion.length == testVersion.length)
return true;
return compareVersion.length < testVersion.length;
}
public boolean isJavaValid(String testString) {
String compareString = java;
if (compareString == null || compareString.length() == 0)
compareString = "1.6";
return isJavaVersionAtLeast(testString, compareString);
}
public boolean isMemoryValid(long memory) {
return getMemory() <= memory;
}
public boolean isRunDataValid(long memory, String java) {
return isMemoryValid(memory) && isJavaValid(java);
}
public IJavaVersion getValidJavaVersion(JavaVersionRepository repository) {
boolean requires64Bit = getMemory() > Memory.MAX_32_BIT_MEMORY;
IJavaVersion best64Bit = repository.getBest64BitVersion();
if (best64Bit != null && isJavaValid(best64Bit.getVersionNumber()))
return best64Bit;
else if (best64Bit == null && requires64Bit)
return null;
IJavaVersion bestVersion = null;
for (IJavaVersion version : repository.getVersions()) {
if (isJavaValid(version.getVersionNumber()) && (!requires64Bit || version.is64Bit()))
bestVersion = version;
}
return bestVersion;
}
public Memory getValidMemory(JavaVersionRepository repository) {
boolean can64Bit = (repository.getBest64BitVersion() != null);
Memory required = getMemorySetting(getMemory());
Memory available = Memory.getClosestAvailableMemory(required, can64Bit);
if (available.getMemoryMB() < required.getMemoryMB())
return null;
return available;
}
private Memory getMemorySetting(long memory) {
for (Memory setting : Memory.memoryOptions) {
if (setting.getMemoryMB() >= memory)
return setting;
}
return null;
}
}