Tidy up some output and also add libraries from the modfile detection into the transforming classloader.
Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
parent
3ba78225c3
commit
cfc53c939e
4 changed files with 26 additions and 2 deletions
|
@ -23,6 +23,7 @@ import cpw.mods.modlauncher.api.IEnvironment;
|
||||||
import cpw.mods.modlauncher.api.ITransformingClassLoader;
|
import cpw.mods.modlauncher.api.ITransformingClassLoader;
|
||||||
import cpw.mods.modlauncher.api.ITransformingClassLoaderBuilder;
|
import cpw.mods.modlauncher.api.ITransformingClassLoaderBuilder;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
@ -41,6 +42,7 @@ import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
||||||
|
import static net.minecraftforge.fml.loading.LogMarkers.LOADING;
|
||||||
|
|
||||||
public abstract class FMLCommonLaunchHandler
|
public abstract class FMLCommonLaunchHandler
|
||||||
{
|
{
|
||||||
|
@ -54,6 +56,8 @@ public abstract class FMLCommonLaunchHandler
|
||||||
"net.minecraftforge.eventbus.", "net.minecraftforge.api.", "com.mojang.util.QueueLogAppender"
|
"net.minecraftforge.eventbus.", "net.minecraftforge.api.", "com.mojang.util.QueueLogAppender"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
private final List<Path> additionalLibraries = new ArrayList<>();
|
||||||
|
|
||||||
protected Predicate<String> getPackagePredicate() {
|
protected Predicate<String> getPackagePredicate() {
|
||||||
return cn -> SKIPPACKAGES.stream().noneMatch(cn::startsWith);
|
return cn -> SKIPPACKAGES.stream().noneMatch(cn::startsWith);
|
||||||
}
|
}
|
||||||
|
@ -69,6 +73,7 @@ public abstract class FMLCommonLaunchHandler
|
||||||
public void configureTransformationClassLoader(final ITransformingClassLoaderBuilder builder) {
|
public void configureTransformationClassLoader(final ITransformingClassLoaderBuilder builder) {
|
||||||
builder.addTransformationPath(FMLLoader.getForgePath());
|
builder.addTransformationPath(FMLLoader.getForgePath());
|
||||||
Arrays.stream(FMLLoader.getMCPaths()).forEach(builder::addTransformationPath);
|
Arrays.stream(FMLLoader.getMCPaths()).forEach(builder::addTransformationPath);
|
||||||
|
additionalLibraries.forEach(builder::addTransformationPath);
|
||||||
FMLLoader.getLanguageLoadingProvider().getLibraries().forEach(builder::addTransformationPath);
|
FMLLoader.getLanguageLoadingProvider().getLibraries().forEach(builder::addTransformationPath);
|
||||||
builder.setClassBytesLocator(getClassLoaderLocatorFunction());
|
builder.setClassBytesLocator(getClassLoaderLocatorFunction());
|
||||||
builder.setManifestLocator(getClassLoaderManifestLocatorFunction());
|
builder.setManifestLocator(getClassLoaderManifestLocatorFunction());
|
||||||
|
@ -137,4 +142,12 @@ public abstract class FMLCommonLaunchHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract String getNaming();
|
protected abstract String getNaming();
|
||||||
|
|
||||||
|
void addLibraries(final List<ModFile> libraries) {
|
||||||
|
libraries
|
||||||
|
.stream()
|
||||||
|
.map(ModFile::getFilePath)
|
||||||
|
.peek(p->LOGGER.debug(LOADING, "Adding {} as a library to the transforming classloader", p))
|
||||||
|
.forEach(additionalLibraries::add);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,7 @@ public class FMLLoader
|
||||||
private static String forgeGroup;
|
private static String forgeGroup;
|
||||||
private static Predicate<String> classLoaderExclusions;
|
private static Predicate<String> classLoaderExclusions;
|
||||||
private static String launchHandlerName;
|
private static String launchHandlerName;
|
||||||
|
private static FMLCommonLaunchHandler commonLaunchHandler;
|
||||||
|
|
||||||
static void onInitialLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
|
static void onInitialLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
|
||||||
{
|
{
|
||||||
|
@ -175,7 +176,7 @@ public class FMLLoader
|
||||||
launchHandlerName = launchHandler.get().name();
|
launchHandlerName = launchHandler.get().name();
|
||||||
gamePath = environment.getProperty(IEnvironment.Keys.GAMEDIR.get()).orElse(Paths.get(".").toAbsolutePath());
|
gamePath = environment.getProperty(IEnvironment.Keys.GAMEDIR.get()).orElse(Paths.get(".").toAbsolutePath());
|
||||||
|
|
||||||
FMLCommonLaunchHandler commonLaunchHandler = (FMLCommonLaunchHandler)launchHandler.get();
|
commonLaunchHandler = (FMLCommonLaunchHandler)launchHandler.get();
|
||||||
naming = commonLaunchHandler.getNaming();
|
naming = commonLaunchHandler.getNaming();
|
||||||
dist = commonLaunchHandler.getDist();
|
dist = commonLaunchHandler.getDist();
|
||||||
EarlyProgressVisualization.INSTANCE.accept(dist);
|
EarlyProgressVisualization.INSTANCE.accept(dist);
|
||||||
|
@ -206,6 +207,7 @@ public class FMLLoader
|
||||||
modDiscoverer = new ModDiscoverer(arguments);
|
modDiscoverer = new ModDiscoverer(arguments);
|
||||||
final BackgroundScanHandler backgroundScanHandler = modDiscoverer.discoverMods();
|
final BackgroundScanHandler backgroundScanHandler = modDiscoverer.discoverMods();
|
||||||
loadingModList = backgroundScanHandler.getLoadingModList();
|
loadingModList = backgroundScanHandler.getLoadingModList();
|
||||||
|
commonLaunchHandler.addLibraries(backgroundScanHandler.getModFiles().getOrDefault(IModFile.Type.LIBRARY, Collections.emptyList()));
|
||||||
return backgroundScanHandler.getModFiles();
|
return backgroundScanHandler.getModFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@ import net.minecraftforge.forgespi.language.MavenVersionAdapter;
|
||||||
import net.minecraftforge.forgespi.language.IModFileInfo;
|
import net.minecraftforge.forgespi.language.IModFileInfo;
|
||||||
import net.minecraftforge.forgespi.language.IModInfo;
|
import net.minecraftforge.forgespi.language.IModInfo;
|
||||||
import net.minecraftforge.fml.loading.StringUtils;
|
import net.minecraftforge.fml.loading.StringUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.apache.maven.artifact.versioning.VersionRange;
|
import org.apache.maven.artifact.versioning.VersionRange;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
@ -31,8 +33,11 @@ import java.util.*;
|
||||||
import java.util.jar.Manifest;
|
import java.util.jar.Manifest;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static net.minecraftforge.fml.loading.LogMarkers.LOADING;
|
||||||
|
|
||||||
public class ModFileInfo implements IModFileInfo
|
public class ModFileInfo implements IModFileInfo
|
||||||
{
|
{
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
private final UnmodifiableConfig config;
|
private final UnmodifiableConfig config;
|
||||||
private final ModFile modFile;
|
private final ModFile modFile;
|
||||||
private final URL issueURL;
|
private final URL issueURL;
|
||||||
|
@ -64,6 +69,10 @@ public class ModFileInfo implements IModFileInfo
|
||||||
}
|
}
|
||||||
this.mods = modConfigs.stream().map(mi-> new ModInfo(this, mi)).collect(Collectors.toList());
|
this.mods = modConfigs.stream().map(mi-> new ModInfo(this, mi)).collect(Collectors.toList());
|
||||||
this.issueURL = config.<String>getOptional("issueTrackerURL").map(StringUtils::toURL).orElse(null);
|
this.issueURL = config.<String>getOptional("issueTrackerURL").map(StringUtils::toURL).orElse(null);
|
||||||
|
LOGGER.debug(LOADING, "Found valid mod file {} with {} mods - versions {}",
|
||||||
|
this.modFile::getFileName,
|
||||||
|
() -> mods.stream().map(IModInfo::getModId).collect(Collectors.joining(",", "{", "}")),
|
||||||
|
() -> mods.stream().map(IModInfo::getVersion).map(Objects::toString).collect(Collectors.joining(",", "{", "}")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class ModFileParser {
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
|
||||||
public static IModFileInfo readModList(final ModFile modFile) {
|
public static IModFileInfo readModList(final ModFile modFile) {
|
||||||
LOGGER.debug(LOADING,"Parsing mod file candidate {}", modFile.getFilePath());
|
LOGGER.debug(LOADING,"Considering mod file candidate {}", modFile.getFilePath());
|
||||||
final Path modsjson = modFile.getLocator().findPath(modFile, "META-INF", "mods.toml");
|
final Path modsjson = modFile.getLocator().findPath(modFile, "META-INF", "mods.toml");
|
||||||
if (!Files.exists(modsjson)) {
|
if (!Files.exists(modsjson)) {
|
||||||
LOGGER.warn(LOADING, "Mod file {} is missing mods.toml file", modFile);
|
LOGGER.warn(LOADING, "Mod file {} is missing mods.toml file", modFile);
|
||||||
|
|
Loading…
Reference in a new issue