Inceptum/launchwrapper/src/main/java/io/gitlab/jfronny/inceptum/launchwrapper/Main.java

47 lines
1.8 KiB
Java
Raw Normal View History

package io.gitlab.jfronny.inceptum.launchwrapper;
import java.lang.invoke.*;
import java.lang.reflect.Method;
import java.nio.file.*;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws Throwable {
if (args.length == 0) throw new IllegalArgumentException("Missing class argument");
2022-09-18 20:11:06 +02:00
System.out.println("Starting Inceptum launchwrapper");
String forceloadNatives = System.getProperty("inceptum.forceloadNatives");
if (forceloadNatives != null) {
Path p = Paths.get(forceloadNatives);
if (Files.exists(p)) {
try (Stream<Path> paths = Files.list(p)) {
paths.forEach(Main::load);
}
} else {
throw new IllegalArgumentException("Could not find forceloadNatives path");
}
}
Class<?> mainClass = Class.forName(args[0]);
String[] newArgs = new String[args.length - 1];
System.arraycopy(args, 1, newArgs, 0, args.length - 1);
Method mainMethod = mainClass.getMethod("main", String[].class);
MethodHandles.Lookup lookup = MethodHandles.lookup();
@SuppressWarnings("ConfusingArgumentToVarargsMethod") Runnable main = (Runnable) LambdaMetafactory.metafactory(
lookup,
"run",
2022-11-04 16:04:26 +01:00
MethodType.methodType(Runnable.class, String[].class),
MethodType.methodType(Void.TYPE),
MethodHandles.lookup().unreflect(mainMethod),
MethodType.methodType(Void.TYPE)
).getTarget().invokeExact(newArgs);
Thread th = new Thread(main);
th.setName("Minecraft");
th.start();
}
private static void load(Path path) {
System.load(path.toAbsolutePath().normalize().toString());
}
}