Commit f25498417fa3102d6ca7a8f45fa2d03c4423ab44

Authored by Mumfrey
1 parent 792cf5b9

removing jarfile.ref functionality since it's no longer needed

java/common/com/mumfrey/liteloader/launch/LiteLoaderTweaker.java
1 package com.mumfrey.liteloader.launch; 1 package com.mumfrey.liteloader.launch;
2 2
3 import java.io.File; 3 import java.io.File;
4 -import java.io.IOException;  
5 -import java.io.InputStream;  
6 -import java.io.InputStreamReader;  
7 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Constructor;
8 import java.lang.reflect.Method; 5 import java.lang.reflect.Method;
9 import java.net.URL; 6 import java.net.URL;
@@ -26,9 +23,6 @@ import net.minecraft.launchwrapper.Launch; @@ -26,9 +23,6 @@ import net.minecraft.launchwrapper.Launch;
26 import net.minecraft.launchwrapper.LaunchClassLoader; 23 import net.minecraft.launchwrapper.LaunchClassLoader;
27 24
28 import com.google.common.base.Throwables; 25 import com.google.common.base.Throwables;
29 -import com.google.gson.Gson;  
30 -import com.google.gson.JsonIOException;  
31 -import com.google.gson.JsonSyntaxException;  
32 import com.mumfrey.liteloader.util.SortableValue; 26 import com.mumfrey.liteloader.util.SortableValue;
33 import com.mumfrey.liteloader.util.log.LiteLoaderLogger; 27 import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
34 28
@@ -52,7 +46,7 @@ public class LiteLoaderTweaker implements ITweaker @@ -52,7 +46,7 @@ public class LiteLoaderTweaker implements ITweaker
52 */ 46 */
53 enum StartupState 47 enum StartupState
54 { 48 {
55 - CONSTRUCT, 49 + PREPARE,
56 PREINIT, 50 PREINIT,
57 BEGINGAME, 51 BEGINGAME,
58 INIT, 52 INIT,
@@ -62,7 +56,7 @@ public class LiteLoaderTweaker implements ITweaker @@ -62,7 +56,7 @@ public class LiteLoaderTweaker implements ITweaker
62 /** 56 /**
63 * Current state 57 * Current state
64 */ 58 */
65 - private static StartupState currentState = StartupState.CONSTRUCT.gotoState(); 59 + private static StartupState currentState = StartupState.PREPARE.gotoState();
66 60
67 /** 61 /**
68 * Whether this state is active 62 * Whether this state is active
@@ -102,7 +96,7 @@ public class LiteLoaderTweaker implements ITweaker @@ -102,7 +96,7 @@ public class LiteLoaderTweaker implements ITweaker
102 if (otherState.canGotoState(this)) 96 if (otherState.canGotoState(this))
103 otherState.leaveState(); 97 otherState.leaveState();
104 else 98 else
105 - throw new IllegalStateException(String.format("Cannot go to state \"%s\" as %s %s", this.name(), otherState, otherState.getNextState() == this ? "" : "and expects \"" + otherState.getNextState().name() + "\" instead"), LiteLoaderLogger.getLastThrowable()); 99 + throw new IllegalStateException(String.format("Cannot go to state <%s> as %s %s", this.name(), otherState, otherState.getNextState() == this ? "" : "and expects \"" + otherState.getNextState().name() + "\" instead"), LiteLoaderLogger.getLastThrowable());
106 } 100 }
107 } 101 }
108 102
@@ -121,7 +115,7 @@ public class LiteLoaderTweaker implements ITweaker @@ -121,7 +115,7 @@ public class LiteLoaderTweaker implements ITweaker
121 @Override 115 @Override
122 public String toString() 116 public String toString()
123 { 117 {
124 - return String.format("\"%s\" is %s %s", this.name(), this.inState ? "[ACTIVE]" : "[INACTIVE]", this.completed ? "and [COMPLETED]" : "but [INCOMPLETE]"); 118 + return String.format("<%s> is %s %s", this.name(), this.inState ? "[ACTIVE]" : "[INACTIVE]", this.completed ? "and [COMPLETED]" : "but [INCOMPLETE]");
125 } 119 }
126 120
127 /** 121 /**
@@ -181,7 +175,6 @@ public class LiteLoaderTweaker implements ITweaker @@ -181,7 +175,6 @@ public class LiteLoaderTweaker implements ITweaker
181 private List<String> singularLaunchArgs = new ArrayList<String>(); 175 private List<String> singularLaunchArgs = new ArrayList<String>();
182 private Map<String, String> launchArgs; 176 private Map<String, String> launchArgs;
183 177
184 - private ArgumentAcceptingOptionSpec<String> jarOption;  
185 private ArgumentAcceptingOptionSpec<String> modsOption; 178 private ArgumentAcceptingOptionSpec<String> modsOption;
186 private ArgumentAcceptingOptionSpec<String> apisOption; 179 private ArgumentAcceptingOptionSpec<String> apisOption;
187 private OptionSet parsedOptions; 180 private OptionSet parsedOptions;
@@ -216,30 +209,11 @@ public class LiteLoaderTweaker implements ITweaker @@ -216,30 +209,11 @@ public class LiteLoaderTweaker implements ITweaker
216 LiteLoaderTweaker.instance = this; 209 LiteLoaderTweaker.instance = this;
217 210
218 this.initArgs(args, gameDirectory, assetsDirectory); 211 this.initArgs(args, gameDirectory, assetsDirectory);
219 - 212 +
220 List<String> modsToLoad = this.getModFilterList(); 213 List<String> modsToLoad = this.getModFilterList();
221 List<String> apisToLoad = this.getAPIsToLoad(); 214 List<String> apisToLoad = this.getAPIsToLoad();
222 215
223 - this.registerCoreAPIs(apisToLoad);  
224 -  
225 - if (this.parsedOptions.has(this.jarOption))  
226 - {  
227 - this.initJarUsing(this.jarOption.value(this.parsedOptions));  
228 - }  
229 - else  
230 - {  
231 - this.initJar();  
232 - }  
233 -  
234 - LiteLoaderLogger.info("Bootstrapping LiteLoader " + LiteLoaderTweaker.VERSION);  
235 -  
236 - this.bootstrap = this.spawnBootstrap(LiteLoaderTweaker.bootstrapClassName, Launch.classLoader, gameDirectory, assetsDirectory, profile, apisToLoad);  
237 - this.properties = this.bootstrap instanceof LoaderProperties ? (LoaderProperties)this.bootstrap : null;  
238 -  
239 - this.transformerManager = new ClassTransformerManager(this.bootstrap.getRequiredTransformers());  
240 - this.transformerManager.injectTransformers(this.bootstrap.getPacketTransformers());  
241 -  
242 - StartupState.CONSTRUCT.completed(); 216 + this.prepare(gameDirectory, assetsDirectory, profile, apisToLoad);
243 217
244 this.preInit(modsToLoad); 218 this.preInit(modsToLoad);
245 } 219 }
@@ -272,79 +246,13 @@ public class LiteLoaderTweaker implements ITweaker @@ -272,79 +246,13 @@ public class LiteLoaderTweaker implements ITweaker
272 apisToLoad.add(0, "com.mumfrey.liteloader.client.api.LiteLoaderCoreAPIClient"); 246 apisToLoad.add(0, "com.mumfrey.liteloader.client.api.LiteLoaderCoreAPIClient");
273 } 247 }
274 248
275 - /**  
276 - *  
277 - */  
278 - private void initJarUsing(String jarPath) 249 + private void initJar()
279 { 250 {
280 - try  
281 - {  
282 - if (jarPath.matches("^[0-9\\.]+$")) jarPath = String.format("versions/%1$s/%1$s.jar", jarPath);  
283 - LiteLoaderLogger.info("Version jar '%s' was specified on the command line", jarPath);  
284 - File jarFile = new File(jarPath);  
285 - this.jarUrl = jarFile.toURI().toURL();  
286 - this.injectVersionJar(jarFile);  
287 - }  
288 - catch (Exception ex)  
289 - {  
290 - ex.printStackTrace();  
291 - }  
292 - }  
293 -  
294 - /**  
295 - * @throws JsonSyntaxException  
296 - * @throws JsonIOException  
297 - */  
298 - private void initJar() throws JsonSyntaxException, JsonIOException  
299 - {  
300 - String resource = "/jarfile.ref";  
301 - InputStream refResource = LiteLoaderTweaker.class.getResourceAsStream(resource);  
302 - File refContainer = ClassPathUtilities.getPathToResource(LiteLoaderTweaker.class, resource);  
303 - if (refResource != null && refContainer != null)  
304 - {  
305 - InputStreamReader refReader = new InputStreamReader(refResource);  
306 -  
307 - try  
308 - {  
309 - @SuppressWarnings("unchecked")  
310 - Map<String, String> refMap = new Gson().fromJson(refReader, HashMap.class);  
311 - if (refMap.containsKey("jarfile"))  
312 - {  
313 - String jarPath = refMap.get("jarfile");  
314 - LiteLoaderLogger.info("Version jar '%s' specified via jarfile.ref", jarPath);  
315 - File jarFile = new File(refContainer.getParentFile(), jarPath);  
316 - this.jarUrl = jarFile.toURI().toURL();  
317 - this.injectVersionJar(jarFile);  
318 - return;  
319 - }  
320 - }  
321 - catch (IOException ex) {}  
322 - finally  
323 - {  
324 - try  
325 - {  
326 - refReader.close();  
327 - refResource.close();  
328 - }  
329 - catch (IOException ex) {}  
330 - }  
331 - }  
332 -  
333 URL[] urls = Launch.classLoader.getURLs(); 251 URL[] urls = Launch.classLoader.getURLs();
334 this.jarUrl = urls[urls.length - 1]; // probably? 252 this.jarUrl = urls[urls.length - 1]; // probably?
335 } 253 }
336 254
337 /** 255 /**
338 - * @param jarFile  
339 - */  
340 - private void injectVersionJar(File jarFile)  
341 - {  
342 - LiteLoaderLogger.info("Injecting version jar '%s'", jarFile.getAbsolutePath());  
343 - Launch.classLoader.addURL(this.jarUrl);  
344 - LiteLoaderTweaker.addURLToParentClassLoader(this.jarUrl);  
345 - }  
346 -  
347 - /**  
348 * @param args 256 * @param args
349 * @param gameDirectory 257 * @param gameDirectory
350 * @param assetsDirectory 258 * @param assetsDirectory
@@ -353,7 +261,6 @@ public class LiteLoaderTweaker implements ITweaker @@ -353,7 +261,6 @@ public class LiteLoaderTweaker implements ITweaker
353 public void initArgs(List<String> args, File gameDirectory, File assetsDirectory) 261 public void initArgs(List<String> args, File gameDirectory, File assetsDirectory)
354 { 262 {
355 OptionParser optionParser = new OptionParser(); 263 OptionParser optionParser = new OptionParser();
356 - this.jarOption = optionParser.accepts("versionJar", "Minecraft version jar to use").withRequiredArg().ofType(String.class);  
357 this.modsOption = optionParser.accepts("mods", "Comma-separated list of mods to load").withRequiredArg().ofType(String.class).withValuesSeparatedBy(','); 264 this.modsOption = optionParser.accepts("mods", "Comma-separated list of mods to load").withRequiredArg().ofType(String.class).withValuesSeparatedBy(',');
358 this.apisOption = optionParser.accepts("api", "Additional API classes to load").withRequiredArg().ofType(String.class); 265 this.apisOption = optionParser.accepts("api", "Additional API classes to load").withRequiredArg().ofType(String.class);
359 optionParser.allowsUnrecognizedOptions(); 266 optionParser.allowsUnrecognizedOptions();
@@ -580,7 +487,7 @@ public class LiteLoaderTweaker implements ITweaker @@ -580,7 +487,7 @@ public class LiteLoaderTweaker implements ITweaker
580 487
581 protected LoaderBootstrap spawnBootstrap(String bootstrapClassName, ClassLoader classLoader, File gameDirectory, File assetsDirectory, String profile, List<String> apisToLoad) 488 protected LoaderBootstrap spawnBootstrap(String bootstrapClassName, ClassLoader classLoader, File gameDirectory, File assetsDirectory, String profile, List<String> apisToLoad)
582 { 489 {
583 - if (!StartupState.CONSTRUCT.isInState()) 490 + if (!StartupState.PREPARE.isInState())
584 { 491 {
585 throw new IllegalStateException("spawnBootstrap is not valid outside constructor"); 492 throw new IllegalStateException("spawnBootstrap is not valid outside constructor");
586 } 493 }
@@ -608,6 +515,35 @@ public class LiteLoaderTweaker implements ITweaker @@ -608,6 +515,35 @@ public class LiteLoaderTweaker implements ITweaker
608 } 515 }
609 516
610 /** 517 /**
  518 + * @param gameDirectory
  519 + * @param assetsDirectory
  520 + * @param profile
  521 + * @param apisToLoad
  522 + */
  523 + private void prepare(File gameDirectory, File assetsDirectory, String profile, List<String> apisToLoad)
  524 + {
  525 + LiteLoaderLogger.info("Bootstrapping LiteLoader " + LiteLoaderTweaker.VERSION);
  526 +
  527 + try
  528 + {
  529 + this.registerCoreAPIs(apisToLoad);
  530 + this.initJar();
  531 +
  532 + this.bootstrap = this.spawnBootstrap(LiteLoaderTweaker.bootstrapClassName, Launch.classLoader, gameDirectory, assetsDirectory, profile, apisToLoad);
  533 + this.properties = this.bootstrap instanceof LoaderProperties ? (LoaderProperties)this.bootstrap : null;
  534 +
  535 + this.transformerManager = new ClassTransformerManager(this.bootstrap.getRequiredTransformers());
  536 + this.transformerManager.injectTransformers(this.bootstrap.getPacketTransformers());
  537 +
  538 + StartupState.PREPARE.completed();
  539 + }
  540 + catch (Throwable th)
  541 + {
  542 + LiteLoaderLogger.severe(th, "Error during LiteLoader PREPARE: %s %s", th.getClass().getName(), th.getMessage());
  543 + }
  544 + }
  545 +
  546 + /**
611 * Do the first stage of loader startup, which enumerates mod sources and finds tweakers 547 * Do the first stage of loader startup, which enumerates mod sources and finds tweakers
612 */ 548 */
613 private void preInit(List<String> modsToLoad) 549 private void preInit(List<String> modsToLoad)