# The installer and new approaches ## problems today 1. Requires an existing JVM to run 2. Does everything at install time, nothing at runtime, complicating launchers 3. Installs a profile into vanilla launcher only ## what needs to happen to get running neo 1. we need to extract all the extra stuff from client and server and isolate them into -extra and -data jars. 2. we need to get the mojmaps from mojang and transform the vanilla code into mojmap form 3. we need to construct a runtime classpath to feed into BSL 4. BSL launch: 5. we need to apply the binpatches to create the patched overlay classes, or use previously cached one 6. game runs? Currently all steps happen in the installer, except obviously game running. 5 is defintely doable at first launch, because that's something I originally designed for. 1 and 2 may be possible as well. 3 will need some thought. ## launcher api? We need to figure out what parts a launcher is capable of doing, as well as how we can cache the results. ## caching matters any and all artifacts produced by this process should be cached somewhere. Usually, we have put them into the `net/minecraftforge` `libraries` subdirectory of the vanilla install. They are relocatable already, we probably just need to expose a surface to allow launchers to specify this. ## the installer bootstrap problem Any installer needs to run itself. Current solutions 1. Rely on a JVM existing - this is today. 2. a native shim that finds vanilla's JVM and runs the installer from Java - this is how fabric does it. 3. a cleverly crafted script for finding the vanilla JVM - this is how quilt did it? 4. a pure native or CEF/electron UI - This is most launchers today. Each of these has pros and cons. ## Goals installer shouldn't need to be run frequently. Certainly not once per neo version. Perhaps once per minecraft version? neo itself should use the existing FML mechanisms to put itself into the game. This sort of sets the old "FMLOnly" as the base layer that is _installed_ and neo loads as a (complex) mod into that. the goal of this is that a launcher just needs to do the "prep work" the same as the installer (the same code?) to generate the artifacts FML needs to get itself up from nothing.