Extract native libs in the launcher part.

This commit is contained in:
Petr Mrázek
2014-01-22 02:20:09 +01:00
parent b182f12c20
commit c46c508fc6
5 changed files with 137 additions and 49 deletions

View File

@ -18,6 +18,7 @@ package org.multimc.onesix;
import org.multimc.*;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@ -34,6 +35,7 @@ public class OneSixLauncher implements Launcher
{
// get and process the launch script params
List<String> libraries;
List<String> extlibs;
List<String> mcparams;
List<String> mods;
String mainClass;
@ -43,10 +45,12 @@ public class OneSixLauncher implements Launcher
try
{
libraries = params.all("cp");
extlibs = params.all("ext");
mcparams = params.all("param");
mainClass = params.first("mainClass");
mods = params.allSafe("mods", new ArrayList<String>());
natives = params.first("natives");
windowTitle = params.first("windowTitle");
// windowParams = params.first("windowParams");
} catch (NotFoundException e)
@ -66,23 +70,14 @@ public class OneSixLauncher implements Launcher
return -1;
}
String property = System.getProperty("os.arch");
List<String> allNativePaths = new ArrayList<String>();
boolean is_64 = property.equalsIgnoreCase("x86_64") || property.equalsIgnoreCase("amd64");
allNativePaths.add(natives);
allNativePaths.add(natives + "/" + (is_64 ? "64" : "32"));
// print the pretty things
{
Utils.log("Main Class:");
Utils.log(" " + mainClass);
Utils.log();
Utils.log("Native paths:");
for (String s : allNativePaths)
{
Utils.log(" " + s);
}
Utils.log("Native path:");
Utils.log(" " + natives);
Utils.log();
Utils.log("Libraries:");
@ -107,11 +102,28 @@ public class OneSixLauncher implements Launcher
Utils.log();
}
final ClassLoader cl = ClassLoader.getSystemClassLoader();
// set up the natives path(s).
String libpath = Utils.join(allNativePaths, String.valueOf(File.pathSeparatorChar));
System.setProperty("java.library.path", libpath);
Utils.log("Preparing native libraries...");
String property = System.getProperty("os.arch");
boolean is_64 = property.equalsIgnoreCase("x86_64") || property.equalsIgnoreCase("amd64");
for(String extlib: extlibs)
{
try
{
String cleanlib = extlib.replace("${arch}", is_64 ? "64" : "32");
File cleanlibf = new File(cleanlib);
Utils.log("Extracting " + cleanlibf.getName());
Utils.unzip(cleanlibf, new File(natives));
} catch (IOException e)
{
System.err.println("Failed to extract native library:");
e.printStackTrace(System.err);
return -1;
}
}
Utils.log();
System.setProperty("java.library.path", natives);
Field fieldSysPath;
try
{
@ -126,6 +138,7 @@ public class OneSixLauncher implements Launcher
}
// Get the Minecraft Class.
final ClassLoader cl = ClassLoader.getSystemClassLoader();
Class<?> mc;
try
{