diff options
4 files changed, 123 insertions, 91 deletions
diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java index 63137382ae..72124afae9 100644 --- a/src/Java/gtPlusPlus/core/util/Utils.java +++ b/src/Java/gtPlusPlus/core/util/Utils.java @@ -2,6 +2,7 @@ package gtPlusPlus.core.util; import java.awt.Color; import java.awt.Graphics; +import java.io.File; import java.lang.reflect.Method; import java.util.*; @@ -26,6 +27,7 @@ import ic2.core.Ic2Items; import ic2.core.init.InternalName; import ic2.core.item.resources.ItemCell; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; @@ -504,6 +506,13 @@ public class Utils { } return true; } + + public static File getMcDir(){ + if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDedicatedServer()){ + return new File("."); + } + return Minecraft.getMinecraft().mcDataDir; + } private static short cellID = 15; public static ItemStack createInternalNameAndFluidCell(final String s){ diff --git a/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java b/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java index 62692f5814..e50e55b6d5 100644 --- a/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java +++ b/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java @@ -4,36 +4,38 @@ import gregtech.common.items.GT_MetaGenerated_Item_01; import net.minecraft.item.ItemStack; public class Preloader_GT_OreDict { - + public static boolean shouldPreventRegistration(String string, ItemStack circuit) { - int damageValue = circuit.getItemDamage() - 32000; - if (circuit.getItem() instanceof GT_MetaGenerated_Item_01) { // 700-720 - if (damageValue >= 700 && damageValue <= 720) { - return true; + if (CORE_Preloader.enableOldGTcircuits){ + int damageValue = circuit.getItemDamage() - 32000; + if (circuit.getItem() instanceof GT_MetaGenerated_Item_01) { // 700-720 + if (damageValue >= 700 && damageValue <= 720) { + return true; + } } - } - else { - try { - if (Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03") != null) { // 6/11/12/14/16/20/30-57/69-73/79-96 - Class<?> MetaItem03 = Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03"); - if (isInstanceOf(MetaItem03, circuit.getItem())) { - if (damageValue == 6 || damageValue == 7 || damageValue == 11 || damageValue == 12 || damageValue == 14 - || damageValue == 16 || damageValue == 20 || damageValue == 21 || damageValue == 22) { - return true; - } - else if (damageValue >= 30 && damageValue <= 57) { - return true; - } - else if (damageValue >= 69 && damageValue <= 73) { - return true; - } - else if (damageValue >= 78 && damageValue <= 96) { - return true; + else { + try { + if (Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03") != null) { // 6/11/12/14/16/20/30-57/69-73/79-96 + Class<?> MetaItem03 = Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03"); + if (isInstanceOf(MetaItem03, circuit.getItem())) { + if (damageValue == 6 || damageValue == 7 || damageValue == 11 || damageValue == 12 || damageValue == 14 + || damageValue == 16 || damageValue == 20 || damageValue == 21 || damageValue == 22) { + return true; + } + else if (damageValue >= 30 && damageValue <= 57) { + return true; + } + else if (damageValue >= 69 && damageValue <= 73) { + return true; + } + else if (damageValue >= 78 && damageValue <= 96) { + return true; + } } } } - } - catch (ClassNotFoundException e) { + catch (ClassNotFoundException e) { + } } } return false; @@ -43,5 +45,5 @@ public class Preloader_GT_OreDict { private static boolean isInstanceOf(Class<?> clazz, Object obj) { return clazz.isInstance(obj); } - + } 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 { |