114 lines
4.5 KiB
Java
114 lines
4.5 KiB
Java
/*
|
|
* Minecraft Forge
|
|
* Copyright (c) 2016-2018.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
package net.minecraftforge.fml.loading;
|
|
|
|
import cpw.mods.modlauncher.api.IEnvironment;
|
|
import cpw.mods.modlauncher.api.ITransformationService;
|
|
import cpw.mods.modlauncher.api.ITransformer;
|
|
import cpw.mods.modlauncher.api.IncompatibleEnvironmentException;
|
|
import joptsimple.ArgumentAcceptingOptionSpec;
|
|
import joptsimple.OptionSpecBuilder;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
|
|
import javax.annotation.Nonnull;
|
|
import java.util.*;
|
|
import java.util.function.BiFunction;
|
|
|
|
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
|
|
|
public class FMLServiceProvider implements ITransformationService
|
|
{
|
|
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
|
private ArgumentAcceptingOptionSpec<String> modsOption;
|
|
private ArgumentAcceptingOptionSpec<String> modListsOption;
|
|
private ArgumentAcceptingOptionSpec<String> mavenRootsOption;
|
|
private ArgumentAcceptingOptionSpec<String> forgeOption;
|
|
private ArgumentAcceptingOptionSpec<String> mcOption;
|
|
private List<String> modsArgumentList;
|
|
private List<String> modListsArgumentList;
|
|
private List<String> mavenRootsArgumentList;
|
|
private String targetForgeVersion;
|
|
private String targetMcVersion;
|
|
|
|
@Override
|
|
public String name()
|
|
{
|
|
return "fml";
|
|
}
|
|
|
|
@Override
|
|
public void initialize(IEnvironment environment)
|
|
{
|
|
LOGGER.debug(CORE,"Setting up basic FML game directories");
|
|
FMLPaths.setup(environment);
|
|
LOGGER.debug(CORE,"Loading configuration");
|
|
FMLConfig.load();
|
|
final Map<String, Object> arguments = new HashMap<>();
|
|
arguments.put("modLists", modListsArgumentList);
|
|
arguments.put("mods", modsArgumentList);
|
|
arguments.put("mavenRoots", mavenRootsArgumentList);
|
|
arguments.put("forgeVersion", targetForgeVersion);
|
|
arguments.put("mcVersion", targetMcVersion);
|
|
LOGGER.debug(CORE, "Preparing launch handler");
|
|
FMLLoader.setupLaunchHandler(environment, arguments);
|
|
LOGGER.debug(CORE,"Initiating mod scan");
|
|
FMLLoader.beginModScan(arguments);
|
|
LOGGER.debug(CORE, "Loading access transformers");
|
|
FMLLoader.loadAccessTransformer();
|
|
}
|
|
|
|
@Override
|
|
public void onLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
|
|
{
|
|
FMLLoader.onInitialLoad(environment, otherServices);
|
|
}
|
|
|
|
@Override
|
|
public void arguments(BiFunction<String, String, OptionSpecBuilder> argumentBuilder)
|
|
{
|
|
forgeOption = argumentBuilder.apply("forgeVersion", "Forge Version number").withRequiredArg().ofType(String.class).required();
|
|
mcOption = argumentBuilder.apply("mcVersion", "Minecraft Version number").withRequiredArg().ofType(String.class).required();
|
|
modsOption = argumentBuilder.apply("mods", "List of mods to add").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
|
|
modListsOption = argumentBuilder.apply("modLists", "JSON modlists").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
|
|
mavenRootsOption = argumentBuilder.apply("mavenRoots", "Maven root directories").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
|
|
}
|
|
|
|
@Override
|
|
public void argumentValues(OptionResult option)
|
|
{
|
|
modsArgumentList = option.values(modsOption);
|
|
modListsArgumentList = option.values(modListsOption);
|
|
mavenRootsArgumentList = option.values(mavenRootsOption);
|
|
targetForgeVersion = option.value(forgeOption);
|
|
targetMcVersion = option.value(mcOption);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public List<ITransformer> transformers()
|
|
{
|
|
LOGGER.debug(CORE, "Loading coremod transformers");
|
|
return new ArrayList<>(FMLLoader.getCoreModProvider().getCoreModTransformers());
|
|
}
|
|
|
|
}
|