Skip to content

Yedelo/LegacyLauncher

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This documentation assumes Minecraft 1.8.9.

Launchwrapper currently uses this code to get the URLs of the class loader.

    private Launch() {
        final URLClassLoader ucl = (URLClassLoader) getClass().getClassLoader();
        classLoader = new LaunchClassLoader(ucl.getURLs());

This works for Java 8, but after Java 9 the default class loader is no longer a URLClassLoader and can't be casted to one. To fix this, this fork checks for a URLClassLoader and uses another method to get the URLs.

    private Launch() {
        ClassLoader loader = getClass().getClassLoader();
        URL[] urls;
        if (loader instanceof URLClassLoader) urls = ((URLClassLoader) loader).getURLs();
        else urls = getLoaderURLs();
        classLoader = new LaunchClassLoader(urls);
        blackboard = new HashMap<String,Object>();
        Thread.currentThread().setContextClassLoader(classLoader);
    }
    private URL[] getLoaderURLs() {
        String classpath = System.getProperty("java.class.path");
        String[] classpathEntries = classpath.split(File.pathSeparator);
        URL[] urls = new URL[classpathEntries.length];
        for (int i = 0; i < classpathEntries.length; i++) {
            File file = new File(classpathEntries[i]);
            try {
                urls[i] = file.toURI().toURL();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return urls;
    }

OptiFine uses this solution in their custom launchwrapper, so it can be launched on any java version. However, this isn't enough to fix some issues that older versions of mod loaders have.

Forge

On Java 9:

[11:38:28] [main/INFO] [FML]: There was a problem trying to load the mod dir tweaker \mods\AutoGG-4.1.3 (1.8.9).jar
java.lang.IllegalArgumentException: object is not an instance of declaring class

The above error repeats for any tweakers.

java.lang.RuntimeException: java.lang.NoSuchMethodException: sun.reflect.ReflectionFactory.newFieldAccessor(java.lang.reflect.Field, boolean)

On Java 17:

[11:42:06] [main/INFO] [FML]: There was a problem trying to load the mod dir tweaker \mods\SimpleToggleSprint-2.2.0.jar
java.lang.IllegalAccessException: class net.minecraftforge.fml.relauncher.CoreModManager cannot access a member of class java.net.URLClassLoader (in module java.base) with modifiers "protected"

The above error repeats for most tweakers, with the exception of AutoGG for some reason:

[11:42:06] [main/INFO] [FML]: There was a problem trying to load the mod dir tweaker \mods\AutoGG-4.1.3 (1.8.9).jar
java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @309e345f

On Java 21:

[11:59:58] [main/ERROR] [LaunchWrapper]: Unable to launch
java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release

With -Djava.security.manager=allow:

Exception caught from launcher
java.lang.NoClassDefFoundError: java/util/jar/Pack200

LiteLoader

On Java 9, 17 and 21:

[12:05:08] [main/INFO]: Injecting additional class transformer class 'com.mumfrey.liteloader.transformers.event.EventTransformer'
[12:05:08] [main/ERROR]: A critical problem occurred registering the ASM transformer class com.mumfrey.liteloader.transformers.event.EventTransformer
java.lang.ClassNotFoundException: com.mumfrey.liteloader.transformers.event.EventTransformer
...
Caused by: java.lang.NoClassDefFoundError: javax/annotation/Resource
[12:05:08] [main/INFO]: Injecting additional class transformer class 'com.mumfrey.liteloader.common.transformers.LiteLoaderPacketTransformer'
[12:05:08] [main/ERROR]: Error injecting class transformer class com.mumfrey.liteloader.common.transformers.LiteLoaderPacketTransformer
java.lang.NoClassDefFoundError: com/mumfrey/liteloader/transformers/event/EventTransformer
[12:05:13] [Client thread/ERROR]: Error during LiteLoader INIT: java.lang.NoClassDefFoundError javax/activity/InvalidActivityException
java.lang.NoClassDefFoundError: javax/activity/InvalidActivityException

About

Fork of Launchwrapper/LegacyLauncher with support for Java 9+

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%