aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2019-09-09 03:06:45 +0100
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2019-09-09 03:06:45 +0100
commitfd7e3cd040e1247bc207af6ed29565808d3444a9 (patch)
treecaec97513c4fc28b84fc91192543262c6a762b17 /src
parentb851ee133b5f0a0d1ca5837d9dac3cdfec922561 (diff)
downloadGT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.tar.gz
GT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.tar.bz2
GT5-Unofficial-fd7e3cd040e1247bc207af6ed29565808d3444a9.zip
$ Potentially fixed issue with RC ASM.
Diffstat (limited to 'src')
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/AsmConfig.java8
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_InvTools.java63
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java2
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();
}