Custom ClassLoader (attempt fix Forge and Fabric)

This commit is contained in:
Duy Tran Khanh committed 2021-02-18 15:57:24 +07:00
1 parent a4a5abba09
commit 7a62c8e1af
3 files changed
+33 -1

No files matched your search

@@ -0,0 +1,20 @@
package net.kdt.pojavlaunch;
import java.net.*;
/**
* This class loader is used as system class loader
* as a workaround to modded libraries for Java 8
* compatibility that safety casting to URLClassLoader:
* ((URLClassLoader) ClassLoader.getSystemClassLoader())
*/
public class PojavClassLoader extends URLClassLoader {
public PojavClassLoader(ClassLoader parent) {
super(new URL[0], parent);
}
@Override
public void addURL(URL url) {
super.addURL(url);
}
}
@@ -102,17 +102,28 @@ public final class Tools
bw.close();
*/
/*
final List<URL> urlList = new ArrayList<>();
for (String s : launchClassPath.split(":")) {
if (!s.isEmpty()) {
urlList.add(new File(s).toURI().toURL());
}
}
*/
new Thread(() -> { try {
System.out.println("Args init finished. Now starting game");
URLClassLoader loader = new URLClassLoader(urlList.toArray(new URL[0]), ClassLoader.getSystemClassLoader());
// URLClassLoader loader = new URLClassLoader(urlList.toArray(new URL[0]), ClassLoader.getSystemClassLoader());
PojavClassLoader loader = (PojavClassLoader) ClassLoader.getSystemClassLoader();
for (String s : launchClassPath.split(":")) {
if (!s.isEmpty()) {
loader.addURL(new File(s).toURI().toURL());
}
}
Class<?> clazz = loader.loadClass(versionInfo.mainClass);
Method method = clazz.getMethod("main", String[].class);
method.invoke(null, new Object[]{launchArgs});