package io.github.jordandoyle.mcinject; import io.github.jordandoyle.mcinject.asm.TransformerManager; import io.github.jordandoyle.mcinject.handler.HandlerManager; import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtils; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.model.FileHeader; import net.minecraft.src.Minecraft; public class Main { private static Main instance = null; public static final String VERSION = "Alpha 2"; public static File minecraft; public void start() { TransformerManager.runTransformers(); HandlerManager.registerHandlers(); } public static Main downloadDependencies(File f) { System.out.println("[mcinject] Downloading dependencies"); minecraft = f; try { URL font = new URL("https://cdn.jsdelivr.net/npm/roboto-font@0.1.0/fonts/Roboto/roboto-thin-webfont.ttf"); File localFont = new File(f, "mcinject"); localFont.mkdirs(); FileUtils.copyURLToFile(font, new File(localFont, "font.ttf")); URL u = new URL("http://mcinject.uphero.com/deps.zip"); String tmp = System.getProperty("java.io.tempdir"); String path = tmp + "injection_deps.zip"; File c = new File(path); c.deleteOnExit(); FileUtils.copyURLToFile(u, c); ZipFile file = new ZipFile(c); File folder = new File(minecraft, "mcinject/deps"); file.extractAll(folder.getPath()); URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class sysclass = URLClassLoader.class; Method method = sysclass.getDeclaredMethod("addURL", new Class[] { URL.class }); method.setAccessible(true); for (Object entry : file.getFileHeaders()) { FileHeader h = (FileHeader) entry; File jar = new File(folder, h.getFileName()); System.out.println("[mcinject] Injected " + h.getFileName() + " into system class loader"); method.invoke(sysloader, new Object[] { jar.toURI().toURL() }); } } catch(Exception e) { e.printStackTrace(); } return Main.getInstance(); } public static Main getInstance() { if(instance == null) instance = new Main(); return instance; } }