I'm attempting to remove the instructions from BlockDynamicLiquid which cause a third water source to appear between two existing sources. However, I cannot get the program to run.
This is the class I've written:
package com.xydre.minecraft.aqua.asm;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.MethodNode;
import net.minecraft.launchwrapper.IClassTransformer;
public class FiniteTweak implements IClassTransformer {
public static Logger logger = LogManager.getLogger("Aqua");
@Override
public byte[] transform(String name, String transformedName,
byte[] basicClass) {
if (transformedName.equals("net.minecraft.block.BlockDynamicLiquid"))
{
return patchFiniteTweak(basicClass);
}
return basicClass;
}
private byte[] patchFiniteTweak(byte[] basicClass) {
ClassNode classNode = new ClassNode();
ClassReader classReader = new ClassReader(basicClass);
classReader.accept(classNode, 0);
String methodName = "func_149674_a";
String deobfMethodName = "updateTick";
MethodNode targetMethod = null;
for (MethodNode methodNode : classNode.methods) {
if (methodName.equals(methodNode.name) || deobfMethodName.equals(methodNode.name)) {
targetMethod = methodNode;
break;
}
}
for (int i=72; i<82; i++) {
logger.info(i);
targetMethod.instructions.remove(targetMethod.instructions.get(i));
}
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
classNode.accept(writer);
return writer.toByteArray();
}
}
And this is the output:
[17:21:38] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
[17:21:38] [main/INFO] [FML]: Forge Mod Loader version 7.10.85.1230 for Minecraft 1.7.10 loading
[17:21:38] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_40, running on Linux:amd64:3.11.4-031104-generic, installed at /usr/lib/jvm/java-8-oracle/jre
[17:21:38] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
[17:21:38] [main/INFO] [FML]: Found a command line coremod : com.xydre.minecraft.aqua.Aqua
[17:21:38] [main/WARN] [FML]: The coremod com.xydre.minecraft.aqua.Aqua does not have a MCVersion annotation, it may cause issues with this version of Minecraft
[17:21:38] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:21:38] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:21:38] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
[17:21:39] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
[17:21:39] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:21:39] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:21:39] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker
[17:21:40] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.TerminalTweaker
[17:21:40] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.TerminalTweaker
[17:21:40] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
[17:21:40] [main/INFO]: Setting user: Player512
[17:21:41] [main/INFO] [Aqua]: 72
[17:21:41] [main/INFO] [Aqua]: 73
[17:21:41] [main/INFO] [Aqua]: 74
[17:21:41] [main/INFO] [Aqua]: 75
[17:21:41] [main/INFO] [Aqua]: 76
[17:21:41] [main/INFO] [Aqua]: 77
[17:21:41] [main/INFO] [Aqua]: 78
[17:21:41] [main/INFO] [Aqua]: 79
[17:21:41] [main/INFO] [Aqua]: 80
[17:21:41] [main/INFO] [Aqua]: 81
[17:21:41] [main/ERROR] [LaunchWrapper]: Unable to launch
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_40]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_40]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_40]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_40]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?]
Caused by: java.lang.NoClassDefFoundError: net/minecraft/block/BlockDynamicLiquid
at net.minecraft.block.Block.registerBlocks(Block.java:249) ~[block.class:?]
at net.minecraft.init.Bootstrap.func_151354_b(Bootstrap.java:457) ~[bootstrap.class:?]
at net.minecraft.client.Minecraft.<init>(Minecraft.java:323) ~[Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:141) ~[Main.class:?]
... 6 more
Caused by: java.lang.ClassNotFoundException: net.minecraft.block.BlockDynamicLiquid
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_40]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_40]
at net.minecraft.block.Block.registerBlocks(Block.java:249) ~[block.class:?]
at net.minecraft.init.Bootstrap.func_151354_b(Bootstrap.java:457) ~[bootstrap.class:?]
at net.minecraft.client.Minecraft.<init>(Minecraft.java:323) ~[Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:141) ~[Main.class:?]
... 6 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at org.objectweb.asm.Frame.merge(Frame.java:1397) ~[asm-debug-all-5.0.3.jar:5.0.3]
at org.objectweb.asm.Frame.merge(Frame.java:1374) ~[asm-debug-all-5.0.3.jar:5.0.3]
at org.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1475) ~[asm-debug-all-5.0.3.jar:5.0.3]
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:834) ~[asm-debug-all-5.0.3.jar:5.0.3]
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:726) ~[asm-debug-all-5.0.3.jar:5.0.3]
at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:412) ~[asm-debug-all-5.0.3.jar:5.0.3]
at com.xydre.minecraft.aqua.asm.FiniteTweak.patchFiniteTweak(FiniteTweak.java:48) ~[bin/:?]
at com.xydre.minecraft.aqua.asm.FiniteTweak.transform(FiniteTweak.java:20) ~[bin/:?]
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_40]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_40]
at net.minecraft.block.Block.registerBlocks(Block.java:249) ~[block.class:?]
at net.minecraft.init.Bootstrap.func_151354_b(Bootstrap.java:457) ~[bootstrap.class:?]
at net.minecraft.client.Minecraft.<init>(Minecraft.java:323) ~[Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:141) ~[Main.class:?]
... 6 more
Any help would be much appreciated!