Add the language providers to the main classloader as well, so

their resources are available to other classes..

Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
cpw 2019-02-14 21:25:10 -05:00
parent 2ec74e5c22
commit 78455ac3c0
No known key found for this signature in database
GPG Key ID: 8EB3DF749553B1B7
2 changed files with 12 additions and 7 deletions

View File

@ -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());
}

View File

@ -51,6 +51,7 @@ public class LanguageLoadingProvider
private final List<IModLanguageProvider> languageProviders = new ArrayList<>();
private final ServiceLoader<IModLanguageProvider> serviceLoader;
private final Map<String, ModLanguageWrapper> languageProviderMap = new HashMap<>();
private List<Path> languagePaths = new ArrayList<>();
public void forEach(final Consumer<IModLanguageProvider> 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<Path> 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<ModFile> modFiles)
@ -145,6 +146,10 @@ public class LanguageLoadingProvider
loadLanguageProviders();
}
Stream<Path> 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);