diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-09-09 03:06:45 +0100 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2019-09-09 03:06:45 +0100 |
commit | fd7e3cd040e1247bc207af6ed29565808d3444a9 (patch) | |
tree | caec97513c4fc28b84fc91192543262c6a762b17 /src | |
parent | b851ee133b5f0a0d1ca5837d9dac3cdfec922561 (diff) | |
download | GT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.tar.gz GT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.tar.bz2 GT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.zip |
$ Potentially fixed issue with RC ASM.
Diffstat (limited to 'src')
3 files changed, 44 insertions, 29 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java index baf62bf64d..5a59f07580 100644 --- a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java +++ b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java @@ -19,6 +19,7 @@ public class AsmConfig { public static boolean enableCofhPatch; public static boolean enableGcFuelChanges; public static boolean enableRcFlowFix; + public static boolean enableRcItemDupeFix; public static boolean enableTcAspectSafety; public static boolean disableAllLogging; @@ -99,6 +100,13 @@ public class AsmConfig { enableRcFlowFix = prop.getBoolean(true); propOrder.add(prop.getName()); + //Railcraft Dupe Fix + prop = config.get("general", "enableRcItemDupeFix", true); + prop.comment = "Fixes possible negative itemstacks"; + prop.setLanguageKey("gtpp.enableRcItemDupeFix").setRequiresMcRestart(true); + enableRcItemDupeFix = prop.getBoolean(true); + propOrder.add(prop.getName()); + //TC Aspect Safety prop = config.get("general", "enableTcAspectSafety", true); diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java index 36435af0f3..30ee37d7b3 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java @@ -13,7 +13,6 @@ import org.apache.logging.log4j.Level; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; @@ -28,8 +27,9 @@ public class ClassTransformer_Railcraft_InvTools { private final boolean isValid; private final ClassReader reader; private final ClassWriter writer; - - + private boolean obfuscated = true; + + public static ItemStack depleteItem(ItemStack stack) { if (stack == null) { return GT_Values.NI; @@ -47,19 +47,15 @@ public class ClassTransformer_Railcraft_InvTools { } } } - - public static ItemStack depleteItem1(ItemStack stack) { - return gtPlusPlus.preloader.asm.transformers.ClassTransformer_Railcraft_InvTools.depleteItem(stack); - } public ClassTransformer_Railcraft_InvTools(byte[] basicClass, boolean obfuscated2) { ClassReader aTempReader = null; ClassWriter aTempWriter = null; - boolean obfuscated = false; + boolean devEnv = false; boolean a1 = false; boolean a2 = false; - + //Find Non-Obf method try { Method aGetStackInSlot = IInventory.class.getDeclaredMethod("getStackInSlot", int.class); @@ -67,7 +63,7 @@ public class ClassTransformer_Railcraft_InvTools { a1 = true; } } catch (NoSuchMethodException | SecurityException e) {} - + //Find Obf method try { Method aGetStackInSlotObf = IInventory.class.getDeclaredMethod("func_70301_a", int.class); @@ -75,24 +71,35 @@ public class ClassTransformer_Railcraft_InvTools { a2 = true; } } catch (NoSuchMethodException | SecurityException e) {} - - + + if (a1) { - obfuscated = false; + devEnv = false; } else if (a2) { - obfuscated = true; + devEnv = true; } else { //Fallback - obfuscated = false; + devEnv = false; } - FMLRelaunchLog.log("[GT++ ASM] Railcraft negative ItemStack Fix", Level.INFO, "Are we patching obfuscated methods? "+obfuscated); + + if (obfuscated && devEnv) { + + } + else { + + } + + + + FMLRelaunchLog.log("[GT++ ASM] Railcraft negative ItemStack Fix", Level.INFO, "Are we patching obfuscated method? "+obfuscated); + aTempReader = new ClassReader(basicClass); aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES); aTempReader.accept(new AddFieldAdapter(aTempWriter), 0); - + injectMethod("depleteItem", aTempWriter, obfuscated); if (aTempReader != null && aTempWriter != null) { @@ -174,17 +181,6 @@ public class ClassTransformer_Railcraft_InvTools { this.cv = cv; } - @Override - public FieldVisitor visitField( - int access, String name, String desc, String signature, Object value) { - if (name.equals("PROCESS_VOLUME") && desc.equals("I")) { - FMLRelaunchLog.log("[GT++ ASM] Railcraft negative ItemStack Fix", Level.INFO, "Removing "+"PROCESS_VOLUME"+"."); - return null; - } - return cv.visitField(access, name, desc, signature, value); - } - - private final String[] aMethodsToStrip = new String[] {"depleteItem"}; @@ -204,6 +200,17 @@ public class ClassTransformer_Railcraft_InvTools { methodVisitor = super.visitMethod(access, name, desc, signature, exceptions); } else { + if (desc.equals("(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;")) { + obfuscated = false; + } + else if (desc.equals("(Ladd;)Ladd;")) { + obfuscated = true; + } + else { + obfuscated = false; + } + FMLRelaunchLog.log("[GT++ ASM] Railcraft negative ItemStack Fix", Level.INFO, + "Method desc " + desc + ", using "+(obfuscated ? "obfuscated method handler" : "deobfuscated method handler")); methodVisitor = null; } diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java index 6c283af832..d9b6ab7149 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java @@ -97,7 +97,7 @@ public class Preloader_Transformer_Handler implements IClassTransformer { return new ClassTransformer_Railcraft_FluidHelper(basicClass, obfuscated).getWriter().toByteArray(); } //Fix Weird glitch involving negative itemstacks. - if (transformedName.equals("mods.railcraft.common.util.inventory.InvTools")) { + if (transformedName.equals("mods.railcraft.common.util.inventory.InvTools") && mConfig.enableRcItemDupeFix) { FMLRelaunchLog.log("[GT++ ASM] Railcraft negative ItemStack Fix", Level.INFO, "Transforming %s", transformedName); return new ClassTransformer_Railcraft_InvTools(basicClass, obfuscated).getWriter().toByteArray(); } |