aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2019-03-04 22:20:17 +0000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2019-03-04 22:20:17 +0000
commita3ad39894856101326b5e6a9273d33a1ccaeb921 (patch)
treec33d33c313904ed175c15ee8c301b24e94dd9959 /src/Java/gtPlusPlus
parentb78556a3e82ff893dcb4fbf3dc03e84aab208f01 (diff)
downloadGT5-Unofficial-a3ad39894856101326b5e6a9273d33a1ccaeb921.tar.gz
GT5-Unofficial-a3ad39894856101326b5e6a9273d33a1ccaeb921.tar.bz2
GT5-Unofficial-a3ad39894856101326b5e6a9273d33a1ccaeb921.zip
$ More TC fixes.
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java138
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/objects/wrapper/aspect/TC_Aspect_Wrapper.java1
2 files changed, 114 insertions, 25 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java
index 6241cc81d4..993559115c 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java
@@ -3,6 +3,7 @@ package gtPlusPlus.preloader.asm.transformers;
import static org.objectweb.asm.Opcodes.*;
import org.apache.logging.log4j.Level;
+import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -10,6 +11,12 @@ import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.preloader.DevHelper;
+import net.minecraft.item.ItemStack;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
public class ClassTransformer_TC_ItemWispEssence {
@@ -19,37 +26,21 @@ public class ClassTransformer_TC_ItemWispEssence {
public ClassTransformer_TC_ItemWispEssence(byte[] basicClass, boolean obfuscated2) {
ClassReader aTempReader = null;
- ClassWriter aTempWriter = null;
-
- boolean obfuscated = false;
- boolean a1 = false;
- boolean a2 = false;
-
- if (a1) {
- obfuscated = false;
- }
- else if (a2) {
- obfuscated = true;
- }
- else {
- //Fallback
- obfuscated = false;
- }
- FMLRelaunchLog.log("[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, "Are we patching obfuscated methods? "+obfuscated);
-
+ ClassWriter aTempWriter = null;
+ boolean obfuscated = obfuscated2;
+ FMLRelaunchLog.log("[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, "Are we patching obfuscated methods? "+obfuscated);
+ String aGetColour = obfuscated ? DevHelper.getSRG("getColorFromItemStack") : DevHelper.getForge("getColorFromItemStack");
aTempReader = new ClassReader(basicClass);
aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
- aTempReader.accept(new AddAdapter(aTempWriter), 0);
-
+ aTempReader.accept(new AddAdapter(aTempWriter, new String[] {"getAspects", aGetColour}), 0);
injectMethod("getAspects", aTempWriter, obfuscated);
-
+ injectMethod(aGetColour, aTempWriter, obfuscated);
if (aTempReader != null && aTempWriter != null) {
isValid = true;
}
else {
isValid = false;
- }
-
+ }
FMLRelaunchLog.log("[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, "Valid? "+isValid+".");
reader = aTempReader;
writer = aTempWriter;
@@ -72,6 +63,7 @@ public class ClassTransformer_TC_ItemWispEssence {
boolean didInject = false;
FMLRelaunchLog.log("[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, "Injecting " + aMethodName + ".");
+ String aGetColour = obfuscated ? DevHelper.getSRG("getColorFromItemStack") : DevHelper.getForge("getColorFromItemStack");
if (aMethodName.equals("getAspects")) {
mv = cw.visitMethod(ACC_PUBLIC, "getAspects", "(Lnet/minecraft/item/ItemStack;)Lthaumcraft/api/aspects/AspectList;", null, null);
@@ -138,6 +130,77 @@ public class ClassTransformer_TC_ItemWispEssence {
mv.visitEnd();
didInject = true;
}
+ else if (aMethodName.equals(aGetColour)) {
+
+ //thaumcraft/common/items/ItemWispEssence
+ mv = cw.visitMethod(ACC_PUBLIC, aGetColour, "(Lnet/minecraft/item/ItemStack;I)I", null, null);
+ AnnotationVisitor av0;
+ {
+ av0 = mv.visitAnnotation("Lcpw/mods/fml/relauncher/SideOnly;", true);
+ av0.visitEnum("value", "Lcpw/mods/fml/relauncher/Side;", "CLIENT");
+ av0.visitEnd();
+ }
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(197, l0);
+ mv.visitVarInsn(ALOAD, 1);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(198, l2);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(200, l1);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/common/items/ItemWispEssence", "getAspects", "(Lnet/minecraft/item/ItemStack;)Lthaumcraft/api/aspects/AspectList;", false);
+ Label l3 = new Label();
+ mv.visitJumpInsn(IFNULL, l3);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitLineNumber(201, l4);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/common/items/ItemWispEssence", "getAspects", "(Lnet/minecraft/item/ItemStack;)Lthaumcraft/api/aspects/AspectList;", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/AspectList", "getAspects", "()[Lthaumcraft/api/aspects/Aspect;", false);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(AALOAD);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/Aspect", "getColor", "()I", false);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l3);
+ mv.visitLineNumber(203, l3);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "currentTimeMillis", "()J", false);
+ mv.visitLdcInsn(new Long(500L));
+ mv.visitInsn(LDIV);
+ mv.visitFieldInsn(GETSTATIC, "thaumcraft/common/items/ItemWispEssence", "displayAspects", "[Lthaumcraft/api/aspects/Aspect;");
+ mv.visitInsn(ARRAYLENGTH);
+ mv.visitInsn(I2L);
+ mv.visitInsn(LREM);
+ mv.visitInsn(L2I);
+ mv.visitVarInsn(ISTORE, 3);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(204, l5);
+ mv.visitFieldInsn(GETSTATIC, "thaumcraft/common/items/ItemWispEssence", "displayAspects", "[Lthaumcraft/api/aspects/Aspect;");
+ mv.visitVarInsn(ILOAD, 3);
+ mv.visitInsn(AALOAD);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "thaumcraft/api/aspects/Aspect", "getColor", "()I", false);
+ mv.visitInsn(IRETURN);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLocalVariable("this", "Lthaumcraft/common/items/ItemWispEssence;", null, l0, l6, 0);
+ mv.visitLocalVariable("stack", "Lnet/minecraft/item/ItemStack;", null, l0, l6, 1);
+ mv.visitLocalVariable("par2", "I", null, l0, l6, 2);
+ mv.visitLocalVariable("idx", "I", null, l5, l6, 3);
+ mv.visitMaxs(4, 4);
+ mv.visitEnd();
+ didInject = true;
+ }
FMLRelaunchLog.log("[GT++ ASM] Thaumcraft WispEssence_Patch", Level.INFO, "Method injection complete. "+(obfuscated ? "Obfuscated" : "Non-Obfuscated"));
return didInject;
@@ -145,12 +208,13 @@ public class ClassTransformer_TC_ItemWispEssence {
public class AddAdapter extends ClassVisitor {
- public AddAdapter(ClassVisitor cv) {
+ public AddAdapter(ClassVisitor cv, String[] aMethods) {
super(ASM5, cv);
this.cv = cv;
+ this.aMethodsToStrip = aMethods;
}
- private final String[] aMethodsToStrip = new String[] {"getAspects"};
+ private final String[] aMethodsToStrip;
@Override
@@ -180,6 +244,30 @@ public class ClassTransformer_TC_ItemWispEssence {
}
}
+ static Aspect[] displayAspects;
+
+ @SideOnly(Side.CLIENT)
+ public int getColorFromItemStack(ItemStack stack, int par2) {
+ if (stack == null) {
+ return 0;
+ }
+ if (this.getAspects(stack) != null) {
+ return this.getAspects(stack).getAspects()[0].getColor();
+ } else {
+ int idx = (int) (System.currentTimeMillis() / 500L % (long) displayAspects.length);
+ return displayAspects[idx].getColor();
+ }
+ }
+
+ public AspectList getAspects(ItemStack itemstack) {
+ if (itemstack.hasTagCompound()) {
+ AspectList aspects = new AspectList();
+ aspects.readFromNBT(itemstack.getTagCompound());
+ return aspects.size() > 0 ? aspects : null;
+ } else {
+ return null;
+ }
+ }
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/wrapper/aspect/TC_Aspect_Wrapper.java b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/wrapper/aspect/TC_Aspect_Wrapper.java
index 4759a04158..107df90256 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/wrapper/aspect/TC_Aspect_Wrapper.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/wrapper/aspect/TC_Aspect_Wrapper.java
@@ -295,6 +295,7 @@ public class TC_Aspect_Wrapper {
aAspectArray = (Object[]) Array.newInstance(mClass_Aspect, components.length);
int i = 0;
for (TC_Aspect_Wrapper g : components) {
+ if (g != null && g.mAspect != null)
((Object[]) aAspectArray)[i++] = g.mAspect;
}
}