Integrate modlauncher changes for mixin.

Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
cpw 2019-09-27 17:42:24 -04:00
parent 2392a4c184
commit f4bab8b8c1
No known key found for this signature in database
GPG Key ID: 8EB3DF749553B1B7
7 changed files with 48 additions and 7 deletions

View File

@ -405,7 +405,7 @@ project(':forge') {
installer 'org.ow2.asm:asm:6.2'
installer 'org.ow2.asm:asm-commons:6.2'
installer 'org.ow2.asm:asm-tree:6.2'
installer 'cpw.mods:modlauncher:3.2.+'
installer 'cpw.mods:modlauncher:4.0.+'
installer 'cpw.mods:grossjava9hacks:1.1.+'
installer 'net.minecraftforge:accesstransformers:1.0.+:shadowed'
installer 'net.minecraftforge:eventbus:1.0.+:service'

View File

@ -83,4 +83,9 @@ public class FMLClientLaunchProvider extends FMLCommonLaunchHandler implements I
protected String getNaming() {
return "srg";
}
@Override
public Path[] getPaths() {
return FMLLoader.getMCPaths();
}
}

View File

@ -36,6 +36,7 @@ import net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
import net.minecraftforge.forgespi.Environment;
import net.minecraftforge.forgespi.coremod.ICoreModProvider;
import net.minecraftforge.forgespi.locating.IModFile;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -85,7 +86,7 @@ public class FMLLoader
LOGGER.debug(CORE,"FML {} loading", version);
final Package modLauncherPackage = ITransformationService.class.getPackage();
LOGGER.debug(CORE,"FML found ModLauncher version : {}", modLauncherPackage.getImplementationVersion());
if (!modLauncherPackage.isCompatibleWith("2.0")) {
if (!modLauncherPackage.isCompatibleWith("4.0")) {
LOGGER.fatal(CORE,"Found incompatible ModLauncher specification : {}, version {} from {}", modLauncherPackage.getSpecificationVersion(), modLauncherPackage.getImplementationVersion(), modLauncherPackage.getImplementationVendor());
throw new IncompatibleEnvironmentException("Incompatible modlauncher found "+modLauncherPackage.getSpecificationVersion());
}
@ -195,12 +196,13 @@ public class FMLLoader
runtimeDistCleaner.getExtension().accept(dist);
}
public static void beginModScan(final Map<String,?> arguments)
public static Map<IModFile.Type, List<ModFile>> beginModScan(final Map<String,?> arguments)
{
LOGGER.debug(SCAN,"Scanning for Mod Locators");
modDiscoverer = new ModDiscoverer(arguments);
final BackgroundScanHandler backgroundScanHandler = modDiscoverer.discoverMods();
loadingModList = backgroundScanHandler.getLoadingModList();
return backgroundScanHandler.getModFiles();
}
public static ICoreModProvider getCoreModProvider() {

View File

@ -26,6 +26,7 @@ import net.minecraftforge.api.distmarker.Dist;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -78,4 +79,8 @@ public class FMLServerLaunchProvider extends FMLCommonLaunchHandler implements I
return "srg";
}
@Override
public Path[] getPaths() {
return FMLLoader.getMCPaths();
}
}

View File

@ -25,13 +25,23 @@ import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.IncompatibleEnvironmentException;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionSpecBuilder;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
import net.minecraftforge.forgespi.Environment;
import net.minecraftforge.forgespi.locating.IModFile;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.annotation.Nonnull;
import java.util.*;
import java.nio.file.Path;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
@ -86,8 +96,19 @@ public class FMLServiceProvider implements ITransformationService
@Override
public void beginScanning(final IEnvironment environment) {
throw new IllegalStateException("WHY ARE YOU HERE??????");
}
@Override
public List<Map.Entry<String, Path>> runScan(final IEnvironment environment) {
LOGGER.debug(CORE,"Initiating mod scan");
FMLLoader.beginModScan(arguments);
final Map<IModFile.Type, List<ModFile>> foundFiles = FMLLoader.beginModScan(arguments);
return foundFiles
.values()
.stream()
.flatMap(Collection::stream)
.map(modFile -> new AbstractMap.SimpleImmutableEntry<>(modFile.getFileName(), modFile.getFilePath()))
.collect(Collectors.toList());
}
@Override

View File

@ -21,11 +21,13 @@ package net.minecraftforge.fml.loading.moddiscovery;
import net.minecraftforge.forgespi.language.ModFileScanData;
import net.minecraftforge.fml.loading.LoadingModList;
import net.minecraftforge.forgespi.locating.IModFile;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -40,9 +42,11 @@ public class BackgroundScanHandler
private final List<ModFile> pendingFiles;
private final List<ModFile> scannedFiles;
private final List<ModFile> allFiles;
private final Map<IModFile.Type, List<ModFile>> modFiles;
private LoadingModList loadingModList;
public BackgroundScanHandler() {
public BackgroundScanHandler(final Map<IModFile.Type, List<ModFile>> modFiles) {
this.modFiles = modFiles;
modContentScanner = Executors.newSingleThreadExecutor(r -> {
final Thread thread = Executors.defaultThreadFactory().newThread(r);
thread.setDaemon(true);
@ -53,6 +57,10 @@ public class BackgroundScanHandler
allFiles = new ArrayList<>();
}
public Map<IModFile.Type, List<ModFile>> getModFiles() {
return modFiles;
}
public void submitForScanning(final ModFile file) {
if (modContentScanner.isShutdown()) {
throw new IllegalStateException("Scanner has shutdown");

View File

@ -89,7 +89,7 @@ public class ModDiscoverer {
.collect(Collectors.groupingBy(IModFile::getType));
FMLLoader.getLanguageLoadingProvider().addAdditionalLanguages(modFiles.get(IModFile.Type.LANGPROVIDER));
BackgroundScanHandler backgroundScanHandler = new BackgroundScanHandler();
BackgroundScanHandler backgroundScanHandler = new BackgroundScanHandler(modFiles);
final List<ModFile> mods = modFiles.getOrDefault(IModFile.Type.MOD, Collections.emptyList());
final List<ModFile> brokenFiles = new ArrayList<>();
for (Iterator<ModFile> iterator = mods.iterator(); iterator.hasNext(); )