aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/preloader/asm
diff options
context:
space:
mode:
authorAlkalus <Draknyte1@hotmail.com>2020-04-07 15:12:31 +0100
committerAlkalus <Draknyte1@hotmail.com>2020-04-07 15:12:31 +0100
commitcfbd10cfb2644a981b9b2763166aa66fce5cd491 (patch)
treeacd969969f05ca2883203eef6409cc217102c4bc /src/Java/gtPlusPlus/preloader/asm
parentacf7193504fba4a7165d2ba5732cc9ce5f35ec55 (diff)
downloadGT5-Unofficial-cfbd10cfb2644a981b9b2763166aa66fce5cd491.tar.gz
GT5-Unofficial-cfbd10cfb2644a981b9b2763166aa66fce5cd491.tar.bz2
GT5-Unofficial-cfbd10cfb2644a981b9b2763166aa66fce5cd491.zip
+ Added support for Custom Machines being registered to the PA. (If GT is up-to date)
+ Added more ASM patches for better Hazmat handling. % Renamed Chemical Dehydrator to Dehydrator for clearer logic in NEI. $ Fixed a small bug in ReflectionUtils. $ Rewrote parts of my Hazmat handling, it should now work correctly for all items which apply radiation from IC2/GT or their addons.
Diffstat (limited to 'src/Java/gtPlusPlus/preloader/asm')
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Utility.java664
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java6
2 files changed, 658 insertions, 12 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Utility.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Utility.java
index 307900ad9e..3381518c1f 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Utility.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_Utility.java
@@ -1,11 +1,6 @@
package gtPlusPlus.preloader.asm.transformers;
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ACC_STATIC;
-import static org.objectweb.asm.Opcodes.ASM5;
-import static org.objectweb.asm.Opcodes.INVOKESTATIC;
-import static org.objectweb.asm.Opcodes.IRETURN;
-import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.*;
import org.apache.logging.log4j.Level;
import org.objectweb.asm.ClassReader;
@@ -47,6 +42,7 @@ public class ClassTransformer_GT_Utility {
if (reader != null && writer != null) {
FMLRelaunchLog.log("[GT++ ASM] Gregtech Utilities Patch", Level.INFO, "Attempting Method Injection.");
injectMethod("getTier");
+ injectMethod("applyRadioactivity");
}
}
@@ -85,6 +81,638 @@ public class ClassTransformer_GT_Utility {
mv.visitEnd();
didInject = true;
}
+ if (aMethodName.equals("applyRadioactivity")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "applyRadioactivity", "(Lnet/minecraft/entity/EntityLivingBase;II)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1352, l0);
+ mv.visitVarInsn(ILOAD, 1);
+ Label l1 = new Label();
+ mv.visitJumpInsn(IFLE, l1);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitJumpInsn(IFNULL, l1);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getCreatureAttribute", "()Lnet/minecraft/entity/EnumCreatureAttribute;", false);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/entity/EnumCreatureAttribute", "UNDEAD", "Lnet/minecraft/entity/EnumCreatureAttribute;");
+ mv.visitJumpInsn(IF_ACMPEQ, l1);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getCreatureAttribute", "()Lnet/minecraft/entity/EnumCreatureAttribute;", false);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/entity/EnumCreatureAttribute", "ARTHROPOD", "Lnet/minecraft/entity/EnumCreatureAttribute;");
+ mv.visitJumpInsn(IF_ACMPEQ, l1);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESTATIC, "ic2/core/item/armor/ItemArmorHazmat", "hasCompleteHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", false);
+ mv.visitJumpInsn(IFNE, l1);
+ Label l2 = new Label();
+ mv.visitLabel(l2);
+ mv.visitLineNumber(1353, l2);
+ mv.visitInsn(ACONST_NULL);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1354, l3);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l4 = new Label();
+ mv.visitLabel(l4);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "moveSlowdown", "Lnet/minecraft/potion/Potion;");
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/potion/Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 140);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "moveSlowdown", "Lnet/minecraft/potion/Potion;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l5 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l5);
+ mv.visitInsn(ICONST_0);
+ Label l6 = new Label();
+ mv.visitJumpInsn(GOTO, l6);
+ mv.visitLabel(l5);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l4, l4, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l6);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l4, l4, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLineNumber(1355, l7);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l8 = new Label();
+ mv.visitLabel(l8);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "digSlowdown", "Lnet/minecraft/potion/Potion;");
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/potion/Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 150);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "digSlowdown", "Lnet/minecraft/potion/Potion;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l9 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l9);
+ mv.visitInsn(ICONST_0);
+ Label l10 = new Label();
+ mv.visitJumpInsn(GOTO, l10);
+ mv.visitLabel(l9);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l8, l8, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l10);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l8, l8, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l11 = new Label();
+ mv.visitLabel(l11);
+ mv.visitLineNumber(1356, l11);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l12 = new Label();
+ mv.visitLabel(l12);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "confusion", "Lnet/minecraft/potion/Potion;");
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/potion/Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 130);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "confusion", "Lnet/minecraft/potion/Potion;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l13 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l13);
+ mv.visitInsn(ICONST_0);
+ Label l14 = new Label();
+ mv.visitJumpInsn(GOTO, l14);
+ mv.visitLabel(l13);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l12, l12, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l14);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l12, l12, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l15 = new Label();
+ mv.visitLabel(l15);
+ mv.visitLineNumber(1357, l15);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l16 = new Label();
+ mv.visitLabel(l16);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "weakness", "Lnet/minecraft/potion/Potion;");
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/potion/Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 150);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "weakness", "Lnet/minecraft/potion/Potion;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l17 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l17);
+ mv.visitInsn(ICONST_0);
+ Label l18 = new Label();
+ mv.visitJumpInsn(GOTO, l18);
+ mv.visitLabel(l17);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l16, l16, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l18);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l16, l16, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l19 = new Label();
+ mv.visitLabel(l19);
+ mv.visitLineNumber(1358, l19);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l20 = new Label();
+ mv.visitLabel(l20);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "hunger", "Lnet/minecraft/potion/Potion;");
+ mv.visitFieldInsn(GETFIELD, "net/minecraft/potion/Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 130);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "hunger", "Lnet/minecraft/potion/Potion;");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l21 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l21);
+ mv.visitInsn(ICONST_0);
+ Label l22 = new Label();
+ mv.visitJumpInsn(GOTO, l22);
+ mv.visitLabel(l21);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l20, l20, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l22);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l20, l20, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l23 = new Label();
+ mv.visitLabel(l23);
+ mv.visitLineNumber(1359, l23);
+ mv.visitVarInsn(ALOAD, 0);
+ Label l24 = new Label();
+ mv.visitLabel(l24);
+ mv.visitTypeInsn(NEW, "net/minecraft/potion/PotionEffect");
+ mv.visitInsn(DUP);
+ mv.visitFieldInsn(GETSTATIC, "ic2/core/IC2Potion", "radiation", "Lic2/core/IC2Potion;");
+ mv.visitFieldInsn(GETFIELD, "ic2/core/IC2Potion", "id", "I");
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitIntInsn(SIPUSH, 180);
+ mv.visitInsn(IMUL);
+ mv.visitVarInsn(ILOAD, 2);
+ mv.visitInsn(IMUL);
+ mv.visitInsn(ICONST_0);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETSTATIC, "net/minecraft/potion/Potion", "potionTypes", "[Lnet/minecraft/potion/Potion;");
+ mv.visitIntInsn(BIPUSH, 24);
+ mv.visitInsn(AALOAD);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getActivePotionEffect", "(Lnet/minecraft/potion/Potion;)Lnet/minecraft/potion/PotionEffect;", false);
+ mv.visitInsn(DUP);
+ mv.visitVarInsn(ASTORE, 3);
+ Label l25 = new Label();
+ mv.visitJumpInsn(IFNONNULL, l25);
+ mv.visitInsn(ICONST_0);
+ Label l26 = new Label();
+ mv.visitJumpInsn(GOTO, l26);
+ mv.visitLabel(l25);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 6, new Object[] {"net/minecraft/entity/EntityLivingBase", l24, l24, INTEGER, INTEGER, INTEGER});
+ mv.visitVarInsn(ALOAD, 3);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/potion/PotionEffect", "getDuration", "()I", false);
+ mv.visitLabel(l26);
+ mv.visitFrame(F_FULL, 4, new Object[] {"net/minecraft/entity/EntityLivingBase", INTEGER, INTEGER, "net/minecraft/potion/PotionEffect"}, 7, new Object[] {"net/minecraft/entity/EntityLivingBase", l24, l24, INTEGER, INTEGER, INTEGER, INTEGER});
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitInsn(IADD);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(ICONST_5);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(IMUL);
+ mv.visitIntInsn(BIPUSH, 7);
+ mv.visitInsn(IDIV);
+ mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "max", "(II)I", false);
+ mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/potion/PotionEffect", "<init>", "(III)V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "addPotionEffect", "(Lnet/minecraft/potion/PotionEffect;)V", false);
+ Label l27 = new Label();
+ mv.visitLabel(l27);
+ mv.visitLineNumber(1360, l27);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l1);
+ mv.visitLineNumber(1362, l1);
+ mv.visitFrame(F_CHOP,1, null, 0, null);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ Label l28 = new Label();
+ mv.visitLabel(l28);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l28, 0);
+ mv.visitLocalVariable("aLevel", "I", null, l0, l28, 1);
+ mv.visitLocalVariable("aAmountOfItems", "I", null, l0, l28, 2);
+ mv.visitLocalVariable("tEffect", "Lnet/minecraft/potion/PotionEffect;", null, l3, l1, 3);
+ mv.visitMaxs(9, 4);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullFrostHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullFrostHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1272, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1273, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Frost", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1274, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1272, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1276, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullHeatHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullHeatHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1280, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1281, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Fire", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1282, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1280, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1284, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullBioHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullBioHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1288, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1289, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Biohazard", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1290, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1288, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1292, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullRadioHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullRadioHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1296, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1297, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Radiation", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1298, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1296, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1300, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullElectroHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullElectroHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1304, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1305, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Electricity", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1306, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1304, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1308, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
+ if (aMethodName.equals("isWearingFullGasHazmat")){
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "isWearingFullGasHazmat", "(Lnet/minecraft/entity/EntityLivingBase;)Z", null, null);
+ mv.visitCode();
+ Label l0 = new Label();
+ mv.visitLabel(l0);
+ mv.visitLineNumber(1312, l0);
+ mv.visitInsn(ICONST_1);
+ mv.visitVarInsn(ISTORE, 1);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ Label l2 = new Label();
+ mv.visitJumpInsn(GOTO, l2);
+ Label l3 = new Label();
+ mv.visitLabel(l3);
+ mv.visitLineNumber(1313, l3);
+ mv.visitFrame(F_APPEND,1, new Object[] {INTEGER}, 0, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/entity/EntityLivingBase", "getEquipmentInSlot", "(I)Lnet/minecraft/item/ItemStack;", false);
+ mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/core/util/minecraft/HazmatUtils", "providesProtetion_Gas", "(Lnet/minecraft/item/ItemStack;)Z", false);
+ Label l4 = new Label();
+ mv.visitJumpInsn(IFNE, l4);
+ Label l5 = new Label();
+ mv.visitLabel(l5);
+ mv.visitLineNumber(1314, l5);
+ mv.visitInsn(ICONST_0);
+ mv.visitInsn(IRETURN);
+ mv.visitLabel(l4);
+ mv.visitLineNumber(1312, l4);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IADD);
+ mv.visitInsn(I2B);
+ mv.visitVarInsn(ISTORE, 1);
+ mv.visitLabel(l2);
+ mv.visitFrame(F_SAME, 0, null, 0, null);
+ mv.visitVarInsn(ILOAD, 1);
+ mv.visitInsn(ICONST_5);
+ mv.visitJumpInsn(IF_ICMPLT, l3);
+ Label l6 = new Label();
+ mv.visitLabel(l6);
+ mv.visitLineNumber(1316, l6);
+ mv.visitInsn(ICONST_1);
+ mv.visitInsn(IRETURN);
+ Label l7 = new Label();
+ mv.visitLabel(l7);
+ mv.visitLocalVariable("aEntity", "Lnet/minecraft/entity/EntityLivingBase;", null, l0, l7, 0);
+ mv.visitLocalVariable("i", "B", null, l1, l6, 1);
+ mv.visitMaxs(2, 2);
+ mv.visitEnd();
+ didInject = true;
+ }
+
FMLRelaunchLog.log("[GT++ ASM] Gregtech Utilities Patch", Level.INFO, "Method injection complete.");
return didInject;
}
@@ -104,7 +732,29 @@ public class ClassTransformer_GT_Utility {
if (name.equals("getTier")) {
methodVisitor = null;
- } else {
+ }
+ else if (name.equals("applyRadioactivity")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullFrostHazmat")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullHeatHazmat")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullBioHazmat")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullRadioHazmat")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullElectroHazmat")){
+ methodVisitor = null;
+ }
+ else if (name.equals("isWearingFullGasHazmat")){
+ methodVisitor = null;
+ }
+ else {
methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java
index 52e4d7d99d..10f04e7a48 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_IC2_Hazmat.java
@@ -3,11 +3,7 @@ package gtPlusPlus.preloader.asm.transformers;
import static org.objectweb.asm.Opcodes.*;
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.Label;
-import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.*;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import gtPlusPlus.core.util.minecraft.HazmatUtils;