diff options
author | Alkalus <draknyte1@hotmail.com> | 2017-10-08 23:09:23 +1000 |
---|---|---|
committer | Alkalus <draknyte1@hotmail.com> | 2017-10-08 23:09:23 +1000 |
commit | 8daf2a88a44de1fe415ea704b1bfd983688b5348 (patch) | |
tree | 5b47111733ac67f9e4219e2e937c3a07232e6d1c /src/Java/gtPlusPlus/preloader/asm | |
parent | 0021cc67de738ab9448bd08c281d4b5d4a41219a (diff) | |
download | GT5-Unofficial-8daf2a88a44de1fe415ea704b1bfd983688b5348.tar.gz GT5-Unofficial-8daf2a88a44de1fe415ea704b1bfd983688b5348.tar.bz2 GT5-Unofficial-8daf2a88a44de1fe415ea704b1bfd983688b5348.zip |
$ Tried to improve the handling of Old circuit config in core mod.
Diffstat (limited to 'src/Java/gtPlusPlus/preloader/asm')
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/Preloader_ClassTransformer.java | 149 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java | 2 |
2 files changed, 86 insertions, 65 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/Preloader_ClassTransformer.java b/src/Java/gtPlusPlus/preloader/asm/Preloader_ClassTransformer.java index f9b1a07269..1d69cb04e7 100644 --- a/src/Java/gtPlusPlus/preloader/asm/Preloader_ClassTransformer.java +++ b/src/Java/gtPlusPlus/preloader/asm/Preloader_ClassTransformer.java @@ -2,79 +2,100 @@ package gtPlusPlus.preloader.asm; import static org.objectweb.asm.Opcodes.*; +import java.io.File; + import org.apache.logging.log4j.Level; import org.objectweb.asm.*; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.relauncher.FMLRelaunchLog; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.preloader.CORE_Preloader; import net.minecraft.launchwrapper.IClassTransformer; +import net.minecraftforge.common.config.Configuration; public class Preloader_ClassTransformer implements IClassTransformer { + public boolean getConfig(){ + final Configuration config = new Configuration( new File(Utils.getMcDir(), "config/GTplusplus/GTplusplus.cfg")); + if (config != null){ + config.load(); + // Circuits + CORE_Preloader.enableOldGTcircuits = config.getBoolean("enableOldGTcircuits", "gregtech", false, + "Restores circuits and their recipes from Pre-5.09.28 times."); + Utils.LOG_INFO("GT++ ASM - Loaded the configuration file."); + return CORE_Preloader.enableOldGTcircuits; + } + Utils.LOG_INFO("GT++ ASM - Failed loading the configuration file."); + return false; + } + + @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) { - FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName); - ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); - new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0); - return classWriter.toByteArray(); - } - return basicClass; - } - -private static final class OreDictionaryVisitor extends ClassVisitor { - - public OreDictionaryVisitor(ClassVisitor cv) { - super(ASM5, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); - if(name.equals("registerOreImpl") && desc.equals("(Ljava/lang/String;Lnet/minecraft/item/ItemStack;)V")) { - FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found target method."); - return new RegisterOreImplVisitor(methodVisitor); - } - else if(name.equals("registerOreImpl") && desc.equals("(Ljava/lang/String;Ladd;)V")) { - FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found target method. [Obfuscated]"); - return new RegisterOreImplVisitor(methodVisitor); - } - else { - //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Dd not find target method."); - //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found: "+name); - //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+desc); - //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+signature); - //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+exceptions); - } - return methodVisitor; - } - - } - - private static final class RegisterOreImplVisitor extends MethodVisitor { - - public RegisterOreImplVisitor(MethodVisitor mv) { - super(ASM5, mv); - } - - @SuppressWarnings("deprecation") + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if(transformedName.equals("net.minecraftforge.oredict.OreDictionary")) { + FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Transforming %s", transformedName); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0); + return classWriter.toByteArray(); + } + return basicClass; + } + + private static final class OreDictionaryVisitor extends ClassVisitor { + + public OreDictionaryVisitor(ClassVisitor cv) { + super(ASM5, cv); + } + @Override - public void visitCode() { - FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Fixing Forge's poor attempt at an oreDictionary."); - super.visitCode(); - super.visitVarInsn(ALOAD, 0); - super.visitVarInsn(ALOAD, 1); - super.visitMethodInsn(INVOKESTATIC, - //"gtPlusPlus/preloader/Preloader_GT_OreDict", "removeCircuit", "(Lnet/minecraft/item/ItemStack;)Z, false"); - "gtPlusPlus/preloader/Preloader_GT_OreDict", - "shouldPreventRegistration", - "(Ljava/lang/String;Lnet/minecraft/item/ItemStack;)Z", - false); - Label endLabel = new Label(); - super.visitJumpInsn(IFEQ, endLabel); - super.visitInsn(RETURN); - super.visitLabel(endLabel); - } - - } + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); + if(name.equals("registerOreImpl") && desc.equals("(Ljava/lang/String;Lnet/minecraft/item/ItemStack;)V")) { + FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found target method."); + return new RegisterOreImplVisitor(methodVisitor); + } + else if(name.equals("registerOreImpl") && desc.equals("(Ljava/lang/String;Ladd;)V")) { + FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found target method. [Obfuscated]"); + return new RegisterOreImplVisitor(methodVisitor); + } + else { + //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Dd not find target method."); + //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Found: "+name); + //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+desc); + //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+signature); + //FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, ""+exceptions); + } + return methodVisitor; + } + + } + + private static final class RegisterOreImplVisitor extends MethodVisitor { + + public RegisterOreImplVisitor(MethodVisitor mv) { + super(ASM5, mv); + } + + @SuppressWarnings("deprecation") + @Override + public void visitCode() { + FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Fixing Forge's poor attempt at an oreDictionary."); + super.visitCode(); + super.visitVarInsn(ALOAD, 0); + super.visitVarInsn(ALOAD, 1); + super.visitMethodInsn(INVOKESTATIC, + //"gtPlusPlus/preloader/Preloader_GT_OreDict", "removeCircuit", "(Lnet/minecraft/item/ItemStack;)Z, false"); + "gtPlusPlus/preloader/Preloader_GT_OreDict", + "shouldPreventRegistration", + "(Ljava/lang/String;Lnet/minecraft/item/ItemStack;)Z", + false); + Label endLabel = new Label(); + super.visitJumpInsn(IFEQ, endLabel); + super.visitInsn(RETURN); + super.visitLabel(endLabel); + } + + } } diff --git a/src/Java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java b/src/Java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java index 458dd5fdea..f6e5d49906 100644 --- a/src/Java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java +++ b/src/Java/gtPlusPlus/preloader/asm/Preloader_FMLLoadingPlugin.java @@ -6,7 +6,7 @@ import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.SortingIndex; -@SortingIndex(10000) +@SortingIndex(10097) @MCVersion(value = "1.7.10") public class Preloader_FMLLoadingPlugin implements IFMLLoadingPlugin { |