You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.7 KiB
Java
115 lines
3.7 KiB
Java
/*
|
|
* Forge Mod Loader
|
|
* Copyright (c) 2012-2013 cpw.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the GNU Lesser Public License v2.1
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
*
|
|
* Contributors:
|
|
* cpw - implementation
|
|
*/
|
|
|
|
package cpw.mods.fml.relauncher;
|
|
|
|
import java.io.File;
|
|
import org.apache.logging.log4j.Level;
|
|
|
|
import net.minecraft.launchwrapper.LaunchClassLoader;
|
|
|
|
import com.google.common.base.Throwables;
|
|
|
|
import cpw.mods.fml.common.launcher.FMLTweaker;
|
|
|
|
public class FMLLaunchHandler
|
|
{
|
|
private static FMLLaunchHandler INSTANCE;
|
|
static Side side;
|
|
private LaunchClassLoader classLoader;
|
|
private FMLTweaker tweaker;
|
|
private File minecraftHome;
|
|
|
|
public static void configureForClientLaunch(LaunchClassLoader loader, FMLTweaker tweaker)
|
|
{
|
|
instance(loader, tweaker).setupClient();
|
|
}
|
|
|
|
public static void configureForServerLaunch(LaunchClassLoader loader, FMLTweaker tweaker)
|
|
{
|
|
instance(loader, tweaker).setupServer();
|
|
}
|
|
|
|
private static FMLLaunchHandler instance(LaunchClassLoader launchLoader, FMLTweaker tweaker)
|
|
{
|
|
if (INSTANCE == null)
|
|
{
|
|
INSTANCE = new FMLLaunchHandler(launchLoader, tweaker);
|
|
}
|
|
return INSTANCE;
|
|
|
|
}
|
|
|
|
private FMLLaunchHandler(LaunchClassLoader launchLoader, FMLTweaker tweaker)
|
|
{
|
|
this.classLoader = launchLoader;
|
|
this.tweaker = tweaker;
|
|
this.minecraftHome = tweaker.getGameDir();
|
|
this.classLoader.addClassLoaderExclusion("cpw.mods.fml.relauncher.");
|
|
this.classLoader.addClassLoaderExclusion("net.minecraftforge.classloading.");
|
|
this.classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.deobf.");
|
|
this.classLoader.addTransformerExclusion("cpw.mods.fml.common.patcher.");
|
|
}
|
|
|
|
private void setupClient()
|
|
{
|
|
FMLRelaunchLog.side = Side.CLIENT;
|
|
side = Side.CLIENT;
|
|
setupHome();
|
|
}
|
|
|
|
private void setupServer()
|
|
{
|
|
FMLRelaunchLog.side = Side.SERVER;
|
|
side = Side.SERVER;
|
|
setupHome();
|
|
|
|
}
|
|
|
|
private void setupHome()
|
|
{
|
|
FMLInjectionData.build(minecraftHome, classLoader);
|
|
FMLRelaunchLog.minecraftHome = minecraftHome;
|
|
FMLRelaunchLog.info("Forge Mod Loader version %s.%s.%s.%s for Minecraft %s loading", FMLInjectionData.major, FMLInjectionData.minor,
|
|
FMLInjectionData.rev, FMLInjectionData.build, FMLInjectionData.mccversion, FMLInjectionData.mcpversion);
|
|
FMLRelaunchLog.info("Java is %s, version %s, running on %s:%s:%s, installed at %s", System.getProperty("java.vm.name"), System.getProperty("java.version"), System.getProperty("os.name"), System.getProperty("os.arch"), System.getProperty("os.version"), System.getProperty("java.home"));
|
|
FMLRelaunchLog.fine("Java classpath at launch is %s", System.getProperty("java.class.path"));
|
|
FMLRelaunchLog.fine("Java library path at launch is %s", System.getProperty("java.library.path"));
|
|
|
|
try
|
|
{
|
|
CoreModManager.handleLaunch(minecraftHome, classLoader, tweaker);
|
|
}
|
|
catch (Throwable t)
|
|
{
|
|
t.printStackTrace();
|
|
FMLRelaunchLog.log(Level.ERROR, t, "An error occurred trying to configure the minecraft home at %s for Forge Mod Loader", minecraftHome.getAbsolutePath());
|
|
throw Throwables.propagate(t);
|
|
}
|
|
}
|
|
|
|
public static Side side()
|
|
{
|
|
return side;
|
|
}
|
|
|
|
|
|
private void injectPostfixTransformers()
|
|
{
|
|
CoreModManager.injectTransformers(classLoader);
|
|
}
|
|
|
|
public static void appendCoreMods()
|
|
{
|
|
INSTANCE.injectPostfixTransformers();
|
|
}
|
|
} |