aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/preloader
diff options
context:
space:
mode:
author‭huajijam <strhuaji@gmail.com>2019-03-18 20:52:30 +0800
committer‭huajijam <strhuaji@gmail.com>2019-03-18 20:52:30 +0800
commit8b090e1fd20eb4c301996b5e1dfeb78353e595e4 (patch)
tree52152dd767d195c76baa8fd8bacb14b105aaa146 /src/Java/gtPlusPlus/preloader
parent40d7e5da9f5b84213e2c3e4596fdc69b94bd523e (diff)
downloadGT5-Unofficial-8b090e1fd20eb4c301996b5e1dfeb78353e595e4.tar.gz
GT5-Unofficial-8b090e1fd20eb4c301996b5e1dfeb78353e595e4.tar.bz2
GT5-Unofficial-8b090e1fd20eb4c301996b5e1dfeb78353e595e4.zip
fix a bug
Diffstat (limited to 'src/Java/gtPlusPlus/preloader')
-rw-r--r--src/Java/gtPlusPlus/preloader/DevHelper.java2
-rw-r--r--src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java41
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/AsmConfig.java10
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java28
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Achievements.java1896
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Achievements_CrashFix.java218
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BaseMetaTileEntity.java158
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_BlockMachines_MetaPipeEntity.java41
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Client.java581
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Packet_TileEntity.java319
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_GetHarvestTool.java38
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_Railcraft_FluidHelper.java314
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_TC_ItemWispEssence.java277
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer2.java6
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java67
15 files changed, 3908 insertions, 88 deletions
diff --git a/src/Java/gtPlusPlus/preloader/DevHelper.java b/src/Java/gtPlusPlus/preloader/DevHelper.java
index 320cbe610a..d942de503a 100644
--- a/src/Java/gtPlusPlus/preloader/DevHelper.java
+++ b/src/Java/gtPlusPlus/preloader/DevHelper.java
@@ -32,7 +32,7 @@ public class DevHelper {
- public boolean IsObfuscatedEnvironment() {
+ public static boolean IsObfuscatedEnvironment() {
// Are we in a 'decompiled' environment?
boolean deobfuscatedEnvironment = false;
byte[] bs;
diff --git a/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java b/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java
index 2dcbe46056..8e7001903d 100644
--- a/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java
+++ b/src/Java/gtPlusPlus/preloader/Preloader_GT_OreDict.java
@@ -11,6 +11,7 @@ import gregtech.common.items.GT_MetaGenerated_Item_01;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
public class Preloader_GT_OreDict {
@@ -33,9 +34,8 @@ public class Preloader_GT_OreDict {
}
}
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
- final Class<?> MetaItem03 = Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03");
+ if (ReflectionUtils.doesClassExist("gregtech.common.items.GT_MetaGenerated_Item_03")) { // 6/11/12/14/16/20/30-57/69-73/79-96
+ final Class<?> MetaItem03 = ReflectionUtils.getClass("gregtech.common.items.GT_MetaGenerated_Item_03");
if (isInstanceOf(MetaItem03, bannedItem.getItem())) {
if ((damageValue == 6) || (damageValue == 7) || (damageValue == 11) || (damageValue == 12) || (damageValue == 14)
|| (damageValue == 16) || (damageValue == 20) || (damageValue == 21) || (damageValue == 22)) {
@@ -52,9 +52,6 @@ public class Preloader_GT_OreDict {
}
}
}
- }
- catch (final ClassNotFoundException e) {
- }
}
}
}
@@ -62,8 +59,8 @@ public class Preloader_GT_OreDict {
//Mekanism Support - Let's not make Mek Osmium useful in GT anymore.
if ((((bannedItem != null) && !LoadedMods.RedTech && (ItemUtils.getModId(bannedItem).toLowerCase().equals("mekanism"))) || (LoadedMods.Mekanism)) && !LoadedMods.RedTech){
//Circuits
- if (Class.forName("mekanism.common.item.ItemControlCircuit") != null) {
- final Class<?> MekCircuit = Class.forName("mekanism.common.item.ItemControlCircuit");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemControlCircuit")) {
+ final Class<?> MekCircuit = ReflectionUtils.getClass("mekanism.common.item.ItemControlCircuit");
if (isInstanceOf(MekCircuit, bannedItem.getItem())) {
for (int r=0;r<4;r++){
if (bannedItem.getItemDamage() == r){
@@ -74,8 +71,8 @@ public class Preloader_GT_OreDict {
}
}
//Ingots
- if (Class.forName("mekanism.common.item.ItemIngot") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemIngot");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemIngot")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemIngot");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 1){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -84,8 +81,8 @@ public class Preloader_GT_OreDict {
}
}
//Dirty Dust
- if (Class.forName("mekanism.common.item.ItemDirtyDust") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemDirtyDust");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemDirtyDust")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemDirtyDust");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 2){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -94,8 +91,8 @@ public class Preloader_GT_OreDict {
}
}
//Dust
- if (Class.forName("mekanism.common.item.ItemDust") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemDust");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemDust")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemDust");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 2){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -104,8 +101,8 @@ public class Preloader_GT_OreDict {
}
}
//Crystal
- if (Class.forName("mekanism.common.item.ItemCrystal") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemCrystal");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemCrystal")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemCrystal");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 2){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -114,8 +111,8 @@ public class Preloader_GT_OreDict {
}
}
//Shard
- if (Class.forName("mekanism.common.item.ItemShard") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemShard");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemShard")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemShard");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 2){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -124,8 +121,8 @@ public class Preloader_GT_OreDict {
}
}
//Clump
- if (Class.forName("mekanism.common.item.ItemClump") != null) {
- final Class<?> MekIngot = Class.forName("mekanism.common.item.ItemClump");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemClump")) {
+ final Class<?> MekIngot = ReflectionUtils.getClass("mekanism.common.item.ItemClump");
if (isInstanceOf(MekIngot, bannedItem.getItem())) {
if (bannedItem.getItemDamage() == 2){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
@@ -134,8 +131,8 @@ public class Preloader_GT_OreDict {
}
}
//Ores
- if (Class.forName("mekanism.common.item.ItemBlockOre") != null) {
- final Class<?> MekOre = Class.forName("mekanism.common.item.ItemBlockOre");
+ if (ReflectionUtils.doesClassExist("mekanism.common.item.ItemBlockOre")) {
+ final Class<?> MekOre = ReflectionUtils.getClass("mekanism.common.item.ItemBlockOre");
if (isInstanceOf(MekOre, bannedItem.getItem()) || (bannedItem == ItemUtils.simpleMetaStack("Mekanism:OreBlock", 0, 1))) {
if (bannedItem.getItemDamage() == 0){
FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "Removing %s from the OreDictionary to balance Mekanism.", bannedItem.getDisplayName());
diff --git a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
index 01efcfb412..c29d8423d8 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 enableTcAspectSafety;
public AsmConfig(File file) {
if (!loaded) {
@@ -91,6 +92,13 @@ public class AsmConfig {
propOrder.add(prop.getName());
+ //TC Aspect Safety
+ prop = config.get("general", "enableTcAspectSafety", true);
+ prop.comment = "Fixes small oversights in Thaumcraft 4.";
+ prop.setLanguageKey("gtpp.enableTcAspectSafety").setRequiresMcRestart(true);
+ enableTcAspectSafety = prop.getBoolean(true);
+ propOrder.add(prop.getName());
+
config.setCategoryPropertyOrder("general", propOrder);
config.setCategoryPropertyOrder("debug", propOrderDebug);
@@ -104,6 +112,8 @@ public class AsmConfig {
FMLLog.log(Level.INFO, "[GT++ ASM] Gt Tooltip Fix - Enabled: "+enableGtTooltipFix, new Object[0]);
FMLLog.log(Level.INFO, "[GT++ ASM] COFH Patch - Enabled: "+enableCofhPatch, new Object[0]);
FMLLog.log(Level.INFO, "[GT++ ASM] Gc Fuel Changes Patch - Enabled: "+enableGcFuelChanges, new Object[0]);
+ FMLLog.log(Level.INFO, "[GT++ ASM] Railcraft Fluid Flow Patch - Enabled: "+enableRcFlowFix, new Object[0]);
+ FMLLog.log(Level.INFO, "[GT++ ASM] Thaumcraft Aspect Safety Patch - Enabled: "+enableTcAspectSafety, new Object[0]);
} catch (Exception var3) {
FMLLog.log(Level.ERROR, var3, "GT++ ASM had a problem loading it's config", new Object[0]);
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java
index 50ba79bfe0..6f08dc4ff5 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_COFH_OreDictionaryArbiter.java
@@ -1,8 +1,12 @@
package gtPlusPlus.preloader.asm.transformers;
-import static org.objectweb.asm.Opcodes.*;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ASM5;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.RETURN;
-import java.io.IOException;
import java.util.ArrayList;
import org.apache.logging.log4j.Level;
@@ -34,16 +38,11 @@ public class ClassTransformer_COFH_OreDictionaryArbiter {
private final boolean isValid;
private final ClassReader reader;
- private final ClassWriter writer;
- private final boolean isObfuscated;
+ private final ClassWriter writer;
- public ClassTransformer_COFH_OreDictionaryArbiter(byte[] basicClass, boolean obfuscated) {
-
+ public ClassTransformer_COFH_OreDictionaryArbiter(byte[] basicClass) {
ClassReader aTempReader = null;
- ClassWriter aTempWriter = null;
-
- isObfuscated = obfuscated;
-
+ ClassWriter aTempWriter = null;
aTempReader = new ClassReader(basicClass);
aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
aTempReader.accept(new localClassVisitor(aTempWriter), 0);
@@ -75,7 +74,14 @@ public class ClassTransformer_COFH_OreDictionaryArbiter {
return writer;
}
- public void injectMethod(String aMethodName) {
+ public void injectMethod(String aMethodName) {
+
+ boolean isObfuscated;
+ try {
+ isObfuscated = Class.forName("net.minecraft.item.ItemStack") != null ? false : true;
+ } catch (ClassNotFoundException e) {
+ isObfuscated = true;
+ }
String aItemStack = isObfuscated ? DevHelper.getObfuscated("net/minecraft/item/ItemStack") : "net/minecraft/item/ItemStack";
MethodVisitor mv;
if (aMethodName.equals("registerOreDictionaryEntry")) {
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Achievements.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Achievements.java
new file mode 100644
index 0000000000..2b9729a8a3
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Achievements.java
@@ -0,0 +1,1896 @@
+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;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.relauncher.FMLRelaunchLog;
+import net.minecraftforge.common.MinecraftForge;
+
+public class ClassTransformer_GT_Achievements {
+
+ private final boolean isValid;
+ private final ClassReader reader;
+ private final ClassWriter writer;
+ private static boolean mDidRemoveAssLineRecipeAdder = false;
+
+ public ClassTransformer_GT_Achievements(byte[] basicClass) {
+
+ ClassReader aTempReader = null;
+ ClassWriter aTempWriter = null;
+
+ aTempReader = new ClassReader(basicClass);
+ aTempWriter = new ClassWriter(aTempReader, ClassWriter.COMPUTE_FRAMES);
+
+ aTempReader.accept(new MethodAdaptor(aTempWriter), 0);
+
+ if (mDidRemoveAssLineRecipeAdder) {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Patching GT .09");
+ injectMethod(aTempWriter);
+ patchOnItemPickup09(aTempWriter);
+ }
+ else {
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Patching GT .08");
+ patchOnItemPickup08(aTempWriter);
+ }
+
+ if (aTempReader != null && aTempWriter != null) {
+ isValid = true;
+ }
+ else {
+ isValid = false;
+ }
+
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Valid? "+isValid+".");
+ reader = aTempReader;
+ writer = aTempWriter;
+ }
+
+ public boolean isValidTransformer() {
+ return isValid;
+ }
+
+ public ClassReader getReader() {
+ return reader;
+ }
+
+ public ClassWriter getWriter() {
+ return writer;
+ }
+
+ public boolean injectMethod(ClassWriter cw) {
+ MethodVisitor mv;
+ boolean didInject = false;
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Injecting " + "registerAssAchievement" + ".");
+
+ /**
+ * Inject new, safer code
+ */
+
+
+ /*mv = cw.visitMethod(ACC_PUBLIC, "registerAssAchievement", "(Lgregtech/api/util/GT_Recipe;)Lnet/minecraft/stats/Achievement;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ Label l1 = new Label();
+ Label l2 = new Label();
+ mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Throwable");
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(291, l3);
+ mv.visitVarInsn(ALOAD, 1);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(292, l5);
+ mv.visitLdcInsn("Someone tried to register an achievement for an invalid recipe. Please report this to Alkalus.");
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/api/objects/Logger", "INFO", "(Ljava/lang/String;)V", false);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(293, l6);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(ARETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(295, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitInsn(ICONST_0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/util/GT_Recipe", "getOutput", "(I)Lnet/minecraft/item/ItemStack;", false);
+ Label l7 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l7);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitLineNumber(296, l8);
+ mv.visitLdcInsn("Someone tried to register an achievement for a recipe with null output. Please report this to Alkalus.");
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/api/objects/Logger", "INFO", "(Ljava/lang/String;)V", false);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(297, l9);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(ARETURN);
+ mv.visitLabel(l7);
+ mv.visitLineNumber(299, l7);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitInsn(ICONST_0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/util/GT_Recipe", "getOutput", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ mv.visitLabel(l0);
+ mv.visitLineNumber(301, l0);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/item/ItemStack", "getUnlocalizedName", "()Ljava/lang/String;", false);
+ mv.visitVarInsn(ASTORE, 2);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(302, l1);
+ Label l10 = new Label();
+ mv.visitJumpInsn(GOTO, l10);
+ mv.visitLabel(l2);
+ mv.visitLineNumber(303, l2);
+ mv.visitFrame(F_FULL, 4, new Object[] {"gregtech/loaders/misc/GT_Achievements", "gregtech/api/util/GT_Recipe", TOP, "net/minecraft/item/ItemStack"}, 1, new Object[] {"java/lang/Throwable"});
+ mv.visitVarInsn(ASTORE, 4);
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLineNumber(304, l11);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/ItemUtils", "getUnlocalizedItemName", "(Lnet/minecraft/item/ItemStack;)Ljava/lang/String;", false);
+ mv.visitVarInsn(ASTORE, 2);
+ mv.visitLabel(l10);
+ mv.visitLineNumber(306, l10);
+ mv.visitFrame(F_FULL, 4, new Object[] {"gregtech/loaders/misc/GT_Achievements", "gregtech/api/util/GT_Recipe", "java/lang/String", "net/minecraft/item/ItemStack"}, 0, new Object[] {});
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "gregtech/loaders/misc/GT_Achievements", "achievementList", "Ljava/util/concurrent/ConcurrentHashMap;");
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/concurrent/ConcurrentHashMap", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false);
+ Label l12 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l12);
+ Label l13 = new Label();
+ mv.visitLabel(l13);
+ mv.visitLineNumber(307, l13);
+ mv.visitFieldInsn(GETSTATIC, "gregtech/loaders/misc/GT_Achievements", "assReg", "I");
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitFieldInsn(PUTSTATIC, "gregtech/loaders/misc/GT_Achievements", "assReg", "I");
+ Label l14 = new Label();
+ mv.visitLabel(l14);
+ mv.visitLineNumber(308, l14);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitIntInsn(BIPUSH, 11);
+ mv.visitFieldInsn(GETSTATIC, "gregtech/loaders/misc/GT_Achievements", "assReg", "I");
+ mv.visitInsn(ICONST_5);
+ mv.visitInsn(IREM);
+ mv.visitInsn(IADD);
+ mv.visitInsn(INEG);
+ mv.visitFieldInsn(GETSTATIC, "gregtech/loaders/misc/GT_Achievements", "assReg", "I");
+ mv.visitInsn(ICONST_5);
+ mv.visitInsn(IDIV);
+ mv.visitIntInsn(BIPUSH, 8);
+ mv.visitInsn(ISUB);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitInsn(ICONST_0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/util/GT_Recipe", "getOutput", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/stats/AchievementList", "openInventory", "Lnet/minecraft/stats/Achievement;");
+ mv.visitInsn(ICONST_0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "registerAchievement", "(Ljava/lang/String;IILnet/minecraft/item/ItemStack;Lnet/minecraft/stats/Achievement;Z)Lnet/minecraft/stats/Achievement;", false);
+ mv.visitInsn(ARETURN);
+ mv.visitLabel(l12);
+ mv.visitLineNumber(310, l12);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitInsn(ARETURN);
+ Label l15 = new Label();
+ mv.visitLabel(l15);
+ mv.visitLocalVariable("this", "Lgregtech/loaders/misc/GT_Achievements;", null, l3, l15, 0);
+ mv.visitLocalVariable("recipe", "Lgregtech/api/util/GT_Recipe;", null, l3, l15, 1);
+ mv.visitLocalVariable("aSafeUnlocalName", "Ljava/lang/String;", null, l1, l2, 2);
+ mv.visitLocalVariable("aSafeUnlocalName", "Ljava/lang/String;", null, l10, l15, 2);
+ mv.visitLocalVariable("aStack", "Lnet/minecraft/item/ItemStack;", null, l0, l15, 3);
+ mv.visitLocalVariable("t", "Ljava/lang/Throwable;", null, l11, l10, 4);
+ mv.visitMaxs(7, 5);
+ mv.visitEnd();*/
+
+ //Lets just static call my replacement function
+ mv = cw.visitMethod(ACC_PUBLIC, "registerAssAchievement", "(Lgregtech/api/util/GT_Recipe;)Lnet/minecraft/stats/Achievement;", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(291, l0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/xmod/gregtech/loaders/misc/AssLineAchievements", "registerAssAchievement", "(Lgregtech/api/util/GT_Recipe;)Lnet/minecraft/stats/Achievement;", false);
+ mv.visitInsn(ARETURN);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLocalVariable("this", "Lgregtech/loaders/misc/GT_Achievements;", null, l0, l1, 0);
+ mv.visitLocalVariable("recipe", "Lgregtech/api/util/GT_Recipe;", null, l0, l1, 1);
+ mv.visitMaxs(1, 2);
+ mv.visitEnd();
+
+ didInject = true;
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Method injection complete.");
+ return didInject;
+ }
+
+
+
+ public boolean patchOnItemPickup08(ClassWriter cw) {
+ MethodVisitor mv;
+ boolean didInject = false;
+ FMLRelaunchLog.log("[GT++ ASM] Gregtech Achievements Patch", Level.INFO, "Injecting " + "onItemPickup" + ".");
+
+ AnnotationVisitor av0;
+ mv = cw.visitMethod(ACC_PUBLIC, "onItemPickup", "(Lnet/minecraftforge/event/entity/player/EntityItemPickupEvent;)V", null, null);
+ av0 = mv.visitAnnotation("Lcpw/mods/fml/common/eventhandler/SubscribeEvent;", true);
+ av0.visitEnd();
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(418, l0);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitFieldInsn(GETFIELD, "net/minecraftforge/event/entity/player/EntityItemPickupEvent", "entityPlayer", "Lnet/minecraft/entity/player/EntityPlayer;");
+ mv.visitVarInsn(ASTORE, 2);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ mv.visitLineNumber(419, l1);
+ mv.visitVarInsn(ALOAD, 1);
+ mv.visitFieldInsn(GETFIELD, "net/minecraftforge/event/entity/player/EntityItemPickupEvent", "item", "Lnet/minecraft/entity/item/EntityItem;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/item/EntityItem", "getEntityItem", "()Lnet/minecraft/item/ItemStack;", false);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(420, l2);
+ mv.visitVarInsn(ALOAD, 2);
+ Label l3 = new Label();
+ mv.visitJumpInsn(IFNULL, l3);
+ mv.visitVarInsn(ALOAD, 3);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l4);
+ mv.visitLabel(l3);
+ mv.visitLineNumber(421, l3);
+ mv.visitFrame(F_APPEND,2, new Object[] {"net/minecraft/entity/player/EntityPlayer", "net/minecraft/item/ItemStack"}, 0, null);
+ mv.visitInsn(RETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(424, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKESTATIC, "gregtech/api/util/GT_OreDictUnificator", "getItemData", "(Lnet/minecraft/item/ItemStack;)Lgregtech/api/objects/ItemData;", false);
+ mv.visitVarInsn(ASTORE, 4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(425, l5);
+ mv.visitVarInsn(ALOAD, 4);
+ Label l6 = new Label();
+ mv.visitJumpInsn(IFNULL, l6);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(426, l7);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "dust", "Lgregtech/api/enums/OrePrefixes;");
+ Label l8 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l8);
+ Label l9 = new Label();
+ mv.visitLabel(l9);
+ mv.visitLineNumber(427, l9);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mMaterial", "Lgregtech/api/objects/MaterialStack;");
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/MaterialStack", "mMaterial", "Lgregtech/api/enums/Materials;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/Materials", "Lutetium", "Lgregtech/api/enums/Materials;");
+ Label l10 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l10);
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLineNumber(428, l11);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("newmetal");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ mv.visitLabel(l10);
+ mv.visitLineNumber(430, l10);
+ mv.visitFrame(F_APPEND,1, new Object[] {"gregtech/api/objects/ItemData"}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("cleandust");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ Label l12 = new Label();
+ mv.visitLabel(l12);
+ mv.visitLineNumber(431, l12);
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l8);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "ore", "Lgregtech/api/enums/OrePrefixes;");
+ Label l13 = new Label();
+ mv.visitJumpInsn(IF_ACMPEQ, l13);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "oreBlackgranite", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitJumpInsn(IF_ACMPEQ, l13);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "oreEndstone", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitJumpInsn(IF_ACMPEQ, l13);
+ Label l14 = new Label();
+ mv.visitLabel(l14);
+ mv.visitLineNumber(432, l14);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "oreNetherrack", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitJumpInsn(IF_ACMPEQ, l13);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "oreRedgranite", "Lgregtech/api/enums/OrePrefixes;");
+ Label l15 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l15);
+ mv.visitLabel(l13);
+ mv.visitLineNumber(433, l13);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ISTORE, 5);
+ Label l16 = new Label();
+ mv.visitLabel(l16);
+ Label l17 = new Label();
+ mv.visitJumpInsn(GOTO, l17);
+ Label l18 = new Label();
+ mv.visitLabel(l18);
+ mv.visitLineNumber(434, l18);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/objects/ItemData", "getAllMaterialStacks", "()Ljava/util/ArrayList;", false);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/ArrayList", "get", "(I)Ljava/lang/Object;", false);
+ mv.visitTypeInsn(CHECKCAST, "gregtech/api/objects/MaterialStack");
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/MaterialStack", "mMaterial", "Lgregtech/api/enums/Materials;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/enums/Materials", "name", "()Ljava/lang/String;", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ Label l19 = new Label();
+ mv.visitLabel(l19);
+ mv.visitLineNumber(435, l19);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/objects/ItemData", "getAllMaterialStacks", "()Ljava/util/ArrayList;", false);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/ArrayList", "get", "(I)Ljava/lang/Object;", false);
+ mv.visitTypeInsn(CHECKCAST, "gregtech/api/objects/MaterialStack");
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/MaterialStack", "mMaterial", "Lgregtech/api/enums/Materials;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/Materials", "AnyIron", "Lgregtech/api/enums/Materials;");
+ Label l20 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l20);
+ Label l21 = new Label();
+ mv.visitLabel(l21);
+ mv.visitLineNumber(436, l21);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("iron");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ mv.visitLabel(l20);
+ mv.visitLineNumber(433, l20);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitIincInsn(5, 1);
+ mv.visitLabel(l17);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 5);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/api/objects/ItemData", "getAllMaterialStacks", "()Ljava/util/ArrayList;", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/ArrayList", "size", "()I", false);
+ mv.visitJumpInsn(IF_ICMPLT, l18);
+ Label l22 = new Label();
+ mv.visitLabel(l22);
+ mv.visitLineNumber(439, l22);
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l15);
+ mv.visitFrame(F_CHOP,1, null, 0, null);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "crushed", "Lgregtech/api/enums/OrePrefixes;");
+ Label l23 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l23);
+ Label l24 = new Label();
+ mv.visitLabel(l24);
+ mv.visitLineNumber(440, l24);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("crushed");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ Label l25 = new Label();
+ mv.visitLabel(l25);
+ mv.visitLineNumber(441, l25);
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l23);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "crushedPurified", "Lgregtech/api/enums/OrePrefixes;");
+ Label l26 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l26);
+ Label l27 = new Label();
+ mv.visitLabel(l27);
+ mv.visitLineNumber(442, l27);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("washing");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ Label l28 = new Label();
+ mv.visitLabel(l28);
+ mv.visitLineNumber(443, l28);
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l26);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "crushedCentrifuged", "Lgregtech/api/enums/OrePrefixes;");
+ Label l29 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l29);
+ Label l30 = new Label();
+ mv.visitLabel(l30);
+ mv.visitLineNumber(444, l30);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+ mv.visitLdcInsn("spinit");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "gregtech/loaders/misc/GT_Achievements", "issueAchievement", "(Lnet/minecraft/entity/player/EntityPlayer;Ljava/lang/String;)V", false);
+ Label l31 = new Label();
+ mv.visitLabel(l31);
+ mv.visitLineNumber(445, l31);
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l29);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mMaterial", "Lgregtech/api/objects/MaterialStack;");
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/MaterialStack", "mMaterial", "Lgregtech/api/enums/Materials;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/Materials", "Steel", "Lgregtech/api/enums/Materials;");
+ Label l32 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l32);
+ Label l33 = new Label();
+ mv.visitLabel(l33);
+ mv.visitLineNumber(446, l33);
+ mv.visitVarInsn(ALOAD, 4);
+ mv.visitFieldInsn(GETFIELD, "gregtech/api/objects/ItemData", "mPrefix", "Lgregtech/api/enums/OrePrefixes;");
+ mv.visitFieldInsn(GETSTATIC, "gregtech/api/enums/OrePrefixes", "ingot", "Lgregtech/api/enums/OrePrefixes;");
+ Label l34 = new Label();
+ mv.visitJumpInsn(IF_ACMPNE, l34);
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/item/ItemStack", "stackSize", "I");
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/item/ItemStack", "getMaxStackSize", "()I", false);
+ mv.visitJumpInsn(IF_ICMPNE, l34);
+ Label l35 = new Label();
+ mv.visitLabel(l35);
+ mv.visitLineNumber(447, l35);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ALOAD, 2);
+