aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java')
-rw-r--r--src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java100
1 files changed, 0 insertions, 100 deletions
diff --git a/src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java b/src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java
deleted file mode 100644
index 55e907c..0000000
--- a/src/main/java/gq/malwarefight/nosession/relaunch/Relaunch.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package gq.malwarefight.nosession.relaunch;
-
-import gq.malwarefight.nosession.tweaks.CleanupTweaker;
-import gq.malwarefight.nosession.utils.Utils;
-import net.minecraft.launchwrapper.Launch;
-import net.minecraftforge.fml.client.FMLClientHandler;
-import net.minecraftforge.fml.common.Loader;
-import net.minecraftforge.fml.common.ModAPIManager;
-import net.minecraftforge.fml.common.asm.ASMTransformerWrapper;
-import net.minecraftforge.fml.common.registry.ItemStackHolderInjector;
-import net.minecraftforge.fml.common.registry.ObjectHolderRegistry;
-import net.minecraftforge.fml.relauncher.FMLInjectionData;
-import net.minecraftforge.fml.relauncher.FMLLaunchHandler;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-
-public class Relaunch {
- public static void relaunch(ArrayList<String> args, File gameDir, File assetsDir, String version) throws Exception {
- resetSecurityManager();
- setToNull(FMLLaunchHandler.class, "INSTANCE");
- setToNull(Loader.class, "instance");
- setToNull(ModAPIManager.class, "INSTANCE");
- setToNull(ObjectHolderRegistry.class, "INSTANCE");
- setToNull(ItemStackHolderInjector.class, "INSTANCE");
- setToNull(FMLClientHandler.class, "INSTANCE");
- setToNull(Loader.class, "injectedContainers");
- Utils.setStaticValue(FMLInjectionData.class, "containers", new ArrayList<String>());
- resetClass(ASMTransformerWrapper.class);
- URLClassLoader originalClassLoader = (URLClassLoader) Launch.class.getClassLoader();
- URL[] newURLS = new URL[originalClassLoader.getURLs().length + 1];
- URLClassLoader lcl = new URLClassLoader(newURLS, originalClassLoader);
- //noinspection unchecked
- Class<Launch> innerLaunch = (Class<Launch>) Class.forName("net.minecraft.launchwrapper.Launch", false, lcl);
- Method launch = innerLaunch.getDeclaredMethod("main", String[].class);
- launch.invoke(null, (Object) constructArgs(args, gameDir, assetsDir, version));
- }
-
- public static String[] constructArgs(ArrayList<String> initial, File gameDir, File assetDir, String version) {
- initial.add("--version");
- initial.add(version);
- initial.add("--gameDir");
- initial.add(gameDir.getAbsolutePath());
- initial.add("--assetsDir");
- initial.add(assetDir.getAbsolutePath());
- initial.add("--tweakClass");
- initial.add("gq.malwarefight.nosession.tweaks.CleanupTweaker");
- return initial.toArray(new String[0]);
- }
-
- public static void resetSecurityManager() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
- Method m = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
- m.setAccessible(true);
- Field[] fields = (Field[]) m.invoke(System.class, false);
- for (Field field: fields) {
- if (field.getType().equals(SecurityManager.class)) {
- field.setAccessible(true);
- field.set(null, null);
- }
- }
- }
-
-
- public static void resetClass(Class<?> cls) throws IllegalAccessException, NoSuchFieldException {
- Field[] fields = cls.getDeclaredFields();
- for (Field field: fields) {
- if ((field.getModifiers() & Modifier.STATIC) != 0) {
- setToNull(field);
- }
- }
- }
-
- public static void setToNull(Class<?> cls, String fieldname) throws NoSuchFieldException, IllegalAccessException {
- Field f = cls.getDeclaredField(fieldname);
- setToNull(f);
- }
-
- public static void setToNull(Field f) throws IllegalAccessException, NoSuchFieldException {
- f.setAccessible(true);
- if ((f.getModifiers() & Modifier.FINAL) != 0) { // if it is final
- Field modifiers = Field.class.getDeclaredField("modifiers");
- modifiers.setAccessible(true);
- int value = modifiers.getInt(f);
- value &= ~Modifier.FINAL;
- modifiers.setInt(f, value);
- }
- if (f.getGenericType().equals(Boolean.TYPE)) {
- f.set(null, false);
- } else {
- f.set(null, null);
- }
- }
-
-}