From bed926539ae75971011a44a7022b215ab9ffcf29 Mon Sep 17 00:00:00 2001 From: DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> Date: Wed, 9 Sep 2020 10:15:38 -0400 Subject: Did someone say ASM Rewrite???!!! --- .../forge/PerspectiveModLoadingPlugin.java | 44 ------------ .../forge/PerspectiveModTweaker.java | 77 +++++++++++++++++++++ .../perspectivemod/forge/PerspectiveTweaker.java | 80 ---------------------- 3 files changed, 77 insertions(+), 124 deletions(-) delete mode 100644 src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModLoadingPlugin.java create mode 100644 src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModTweaker.java delete mode 100644 src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveTweaker.java (limited to 'src/main/java/me/djtheredstoner/perspectivemod/forge') diff --git a/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModLoadingPlugin.java b/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModLoadingPlugin.java deleted file mode 100644 index 1242671..0000000 --- a/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModLoadingPlugin.java +++ /dev/null @@ -1,44 +0,0 @@ -package me.djtheredstoner.perspectivemod.forge; - -import net.minecraftforge.common.ForgeVersion; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.Mixins; - -import java.util.Map; - -// ONLY needed in development environment, the mixin tweaker handles this in prod. -@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion) -public class PerspectiveModLoadingPlugin implements IFMLLoadingPlugin { - - public PerspectiveModLoadingPlugin() { - MixinBootstrap.init(); - - Mixins.addConfiguration("mixins.djperspectivemod.json"); - } - - @Override - public String[] getASMTransformerClass() { - return new String[0]; - } - - @Override - public String getModContainerClass() { - return null; - } - - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - - } - - @Override - public String getAccessTransformerClass() { - return null; - } -} diff --git a/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModTweaker.java b/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModTweaker.java new file mode 100644 index 0000000..695f7a2 --- /dev/null +++ b/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveModTweaker.java @@ -0,0 +1,77 @@ +package me.djtheredstoner.perspectivemod.forge; + +import me.djtheredstoner.perspectivemod.asm.ClassTransformer; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.common.ForgeVersion; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; + +import javax.swing.*; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.zip.ZipFile; + + +@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion) +public class PerspectiveModTweaker implements IFMLLoadingPlugin { + + public PerspectiveModTweaker() { + File mods = new File(Launch.minecraftHome, "mods"); + + if (!mods.exists()) { + mods.mkdirs(); // mods folder may not exist in dev yet + } + + File[] coreModList = mods.listFiles((dir, name) -> name.endsWith(".jar")); + for (File file : coreModList) { + try { + try (ZipFile zipFile = new ZipFile(file)) { + if (zipFile.getEntry("net/canelex/perspectivemod/PerspectiveMod.class") != null) { + halt("

Perspective Mod v4 is not compatible with Perspective Mod v3 by Canelex. Please remove Canelex's in order to launch the game.

"); + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private void halt(final String message) { + JOptionPane.showMessageDialog(null, message, "Launch Aborted", JOptionPane.ERROR_MESSAGE); + try { + final Class aClass = Class.forName("java.lang.Shutdown"); + final Method exit = aClass.getDeclaredMethod("exit", int.class); + exit.setAccessible(true); + exit.invoke(null, 0); + } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + @Override + public String[] getASMTransformerClass() { + return new String[]{ClassTransformer.class.getName()}; + } + + @Override + public String getModContainerClass() { + return null; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map map) { + + } + + @Override + public String getAccessTransformerClass() { + return null; + } +} diff --git a/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveTweaker.java b/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveTweaker.java deleted file mode 100644 index f22ba05..0000000 --- a/src/main/java/me/djtheredstoner/perspectivemod/forge/PerspectiveTweaker.java +++ /dev/null @@ -1,80 +0,0 @@ -package me.djtheredstoner.perspectivemod.forge; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import net.minecraft.launchwrapper.Launch; -import net.minecraftforge.common.ForgeVersion; -import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; - -import javax.swing.JOptionPane; -import java.io.File; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -// this one will be loaded in prod, used to detect Canelex's perspective mod -@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion) -public class PerspectiveTweaker implements IFMLLoadingPlugin { - - public PerspectiveTweaker() { - File mods = new File(Launch.minecraftHome, "mods"); - - if (!mods.exists()) { - mods.mkdirs(); // mods folder may not exist in dev yet - } - - File[] coreModList = mods.listFiles((dir, name) -> name.endsWith(".jar")); - for (File file : coreModList) { - try { - try (ZipFile zipFile = new ZipFile(file)) { - if (zipFile.getEntry("net/canelex/perspectivemod/PerspectiveMod.class") != null) { - halt("

Perspective Mod v4 is not compatible with Perspective Mod v3 by Canelex. Please remove Canelex's in order to launch the game.

"); - continue; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - private void halt(final String message) { - JOptionPane.showMessageDialog(null, message, "Launch Aborted", JOptionPane.ERROR_MESSAGE); - try { - final Class aClass = Class.forName("java.lang.Shutdown"); - final Method exit = aClass.getDeclaredMethod("exit", int.class); - exit.setAccessible(true); - exit.invoke(null, 0); - } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - } - } - - @Override - public String[] getASMTransformerClass() { - return new String[0]; - } - - @Override - public String getModContainerClass() { - return null; - } - - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map map) { - - } - - @Override - public String getAccessTransformerClass() { - return null; - } -} -- cgit