diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2020-01-13 21:22:33 +0000 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2020-01-13 21:22:33 +0000 |
commit | d304d49e7e835fa601accd0740b53ae06909a71e (patch) | |
tree | 6b3e2c54efaba3a2c63a9946b4f29944c737668f /src/Java/gtPlusPlus/preloader/asm | |
parent | bc630f3a7738e4a495cdc1672949d934f76838e3 (diff) | |
download | GT5-Unofficial-d304d49e7e835fa601accd0740b53ae06909a71e.tar.gz GT5-Unofficial-d304d49e7e835fa601accd0740b53ae06909a71e.tar.bz2 GT5-Unofficial-d304d49e7e835fa601accd0740b53ae06909a71e.zip |
$ Fixed CPI patch, which was failing due to different args present on other GT forks.
$ Fixed incorrect energy usage on Alloy Smelting recipes, they're no longer 2x.
Diffstat (limited to 'src/Java/gtPlusPlus/preloader/asm')
-rw-r--r-- | src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java index 45e1608d6b..0c1b61be55 100644 --- a/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java +++ b/src/Java/gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit.java @@ -1,10 +1,6 @@ package gtPlusPlus.preloader.asm.transformers; -import static org.objectweb.asm.Opcodes.ACC_PUBLIC; -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.IRETURN; +import static org.objectweb.asm.Opcodes.*; import java.util.ArrayList; @@ -30,7 +26,11 @@ public class ClassTransformer_GT_CharcoalPit { private final ClassWriter writer; public static boolean isWoodLog(Block log) { - boolean isLog1 = OrePrefixes.log.contains(new ItemStack(log, 1)); + return isWoodLog(log, 0); + } + + public static boolean isWoodLog(Block log, int meta) { + boolean isLog1 = OrePrefixes.log.contains(ItemUtils.getSimpleStack(log, meta, 1)); if (isLog1) { return true; } @@ -40,13 +40,13 @@ public class ClassTransformer_GT_CharcoalPit { } return false; } - + public ClassTransformer_GT_CharcoalPit(byte[] basicClass, boolean obfuscated) { ClassReader aTempReader = null; ClassWriter aTempWriter = null; boolean aBadTime = false; if (ReflectionUtils.doesClassExist("aji")) { - obfuscated = true; + obfuscated = true; } else { if (ReflectionUtils.doesClassExist("net.minecraft.block.Block")) { @@ -92,13 +92,14 @@ public class ClassTransformer_GT_CharcoalPit { MethodVisitor mv; boolean didInject = false; FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Injecting " + aMethodName + "."); - + String aBlockClassName = "net/minecraft/block/Block"; if (obfuscated) { aBlockClassName = "aji"; } if (aMethodName.equals("isWoodLog")) { - + + // Inject original Method with only block arg. mv = cw.visitMethod(ACC_PUBLIC, "isWoodLog", "(L"+aBlockClassName+";)Z", null, null); mv.visitCode(); Label l0 = new Label(); @@ -113,8 +114,28 @@ public class ClassTransformer_GT_CharcoalPit { mv.visitLocalVariable("log", "L"+aBlockClassName+";", null, l0, l1, 1); mv.visitMaxs(1, 2); mv.visitEnd(); + + + // Inject better Method with block & meta arg. + mv = cw.visitMethod(ACC_PUBLIC, "isWoodLog", "(L"+aBlockClassName+";I)Z", null, null); + mv.visitCode(); + Label label0 = new Label(); + mv.visitLabel(label0); + mv.visitLineNumber(201, label0); + mv.visitVarInsn(ALOAD, 1); + mv.visitVarInsn(ILOAD, 2); + mv.visitMethodInsn(INVOKESTATIC, "gtPlusPlus/preloader/asm/transformers/ClassTransformer_GT_CharcoalPit", "isWoodLog", "(L"+aBlockClassName+";I)Z", false); + mv.visitInsn(IRETURN); + Label label1 = new Label(); + mv.visitLabel(label1); + mv.visitLocalVariable("this", "Lgregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Charcoal_Pit;", null, label0, label1, 0); + mv.visitLocalVariable("log", "L"+aBlockClassName+";", null, label0, label1, 1); + mv.visitLocalVariable("meta", "I", null, label0, label1, 2); + mv.visitMaxs(2, 3); + mv.visitEnd(); + didInject = true; - + } FMLRelaunchLog.log("[GT++ ASM] GT Charcoal Pit Fix", Level.INFO, "Method injection complete."); return didInject; |