diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLCommonLaunchHandler.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLCommonLaunchHandler.java index 0c3d1a45c..0fb188ace 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLCommonLaunchHandler.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLCommonLaunchHandler.java @@ -68,8 +68,8 @@ public abstract class FMLCommonLaunchHandler public void configureTransformationClassLoader(final ITransformingClassLoaderBuilder builder) { builder.addTransformationPath(FMLLoader.getForgePath()); - for (Path path : FMLLoader.getMCPaths()) - builder.addTransformationPath(path); + Arrays.stream(FMLLoader.getMCPaths()).forEach(builder::addTransformationPath); + FMLLoader.getLanguageLoadingProvider().getLibraries().forEach(builder::addTransformationPath); builder.setClassBytesLocator(getClassLoaderLocatorFunction()); builder.setManifestLocator(getClassLoaderManifestLocatorFunction()); } diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java index 52c1e8674..43d01a14b 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java @@ -51,6 +51,7 @@ public class LanguageLoadingProvider private final List languageProviders = new ArrayList<>(); private final ServiceLoader serviceLoader; private final Map languageProviderMap = new HashMap<>(); + private List languagePaths = new ArrayList<>(); public void forEach(final Consumer consumer) { @@ -60,13 +61,13 @@ public class LanguageLoadingProvider private static class ModLanguageWrapper { private final IModLanguageProvider modLanguageProvider; + private final ArtifactVersion version; public ModLanguageWrapper(IModLanguageProvider modLanguageProvider, ArtifactVersion version) { this.modLanguageProvider = modLanguageProvider; this.version = version; } - public ArtifactVersion getVersion() { return version; @@ -77,14 +78,15 @@ public class LanguageLoadingProvider return modLanguageProvider; } + } private static class LanguageClassLoader extends URLClassLoader { - public LanguageClassLoader() { super(new URL[0]); } - @Override + + @Override public void addURL(final URL url) { LOGGER.debug(CORE, "Adding {} to languageloader classloader", url); super.addURL(url); @@ -96,7 +98,6 @@ public class LanguageLoadingProvider serviceLoader = ServiceLoader.load(IModLanguageProvider.class, languageClassLoader); loadLanguageProviders(); } - private void loadLanguageProviders() { LOGGER.debug(CORE, "Found {} language providers", ServiceLoaderStreamUtils.toList(serviceLoader).size()); serviceLoader.forEach(languageProviders::add); @@ -133,7 +134,7 @@ public class LanguageLoadingProvider private void addLanguagePaths(final Stream langPaths) { languageProviders.clear(); languageProviderMap.clear(); - langPaths.map(Path::toFile).map(File::toURI).map(rethrowFunction(URI::toURL)).forEach(languageClassLoader::addURL); + langPaths.peek(languagePaths::add).map(Path::toFile).map(File::toURI).map(rethrowFunction(URI::toURL)).forEach(languageClassLoader::addURL); } public void addAdditionalLanguages(List modFiles) @@ -145,6 +146,10 @@ public class LanguageLoadingProvider loadLanguageProviders(); } + Stream getLibraries() { + return languagePaths.stream(); + } + public IModLanguageProvider findLanguage(ModFile mf, String modLoader, VersionRange modLoaderVersion) { final String languageFileName = mf.getLocator() instanceof ExplodedDirectoryLocator ? "in-development" : mf.getFileName(); final ModLanguageWrapper mlw = languageProviderMap.get(modLoader);