diff --git a/gradle.properties b/gradle.properties index 0717e9a..d3bd858 100644 --- a/gradle.properties +++ b/gradle.properties @@ -102,7 +102,7 @@ mixinsPackage = # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # This parameter is for legacy compatibility only # Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin -coreModClass = core.LoadingPlugin +coreModClass = # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class # that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! diff --git a/src/main/java/remoteio/client/render/RenderBlockRemoteInterface.java b/src/main/java/remoteio/client/render/RenderBlockRemoteInterface.java index 7adf1d9..018729b 100644 --- a/src/main/java/remoteio/client/render/RenderBlockRemoteInterface.java +++ b/src/main/java/remoteio/client/render/RenderBlockRemoteInterface.java @@ -49,7 +49,6 @@ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderB public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { TileRemoteInterface tile = (TileRemoteInterface) world.getTileEntity(x, y, z); - if (tile != null) { if (tile.remotePosition == null || !tile.remotePosition.inWorld(tile.getWorldObj()) || tile.visualState != VisualState.CAMOUFLAGE_REMOTE) { @@ -57,31 +56,11 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b } else { if (tile.remotePosition != null && tile.remotePosition.inWorld(tile.getWorldObj())) { Block remoteBlock = tile.remotePosition.getBlock(); - int rx = tile.remotePosition.x - x; - int ry = tile.remotePosition.y - y; - int rz = tile.remotePosition.z - z; - - Tessellator tessellator = Tessellator.instance; - if (remoteBlock.getRenderType() == 0) { renderer.renderStandardBlock(block, x, y, z); } else { if (remoteBlock.canRenderInPass(ForgeHooksClient.getWorldRenderPass())) { - TessellatorCapture.startCapturing(); - - TessellatorCapture.rotationAngle = 90 * tile.rotationY; - TessellatorCapture.offsetX = -(x + rx) - 1; - TessellatorCapture.offsetZ = -(z + rz) - 1; - - tessellator.addTranslation(-rx, -ry, -rz); - renderer.renderBlockByRenderType( - remoteBlock, - tile.remotePosition.x, - tile.remotePosition.y, - tile.remotePosition.z); - tessellator.addTranslation(rx, ry, rz); - - TessellatorCapture.reset(); + renderer.renderBlockByRenderType(remoteBlock, x, y, z); } } } diff --git a/src/main/java/remoteio/client/render/TessellatorCapture.java b/src/main/java/remoteio/client/render/TessellatorCapture.java deleted file mode 100644 index 826a465..0000000 --- a/src/main/java/remoteio/client/render/TessellatorCapture.java +++ /dev/null @@ -1,85 +0,0 @@ -package remoteio.client.render; - -/** - * @author dmillerw - */ -public class TessellatorCapture { - - private static boolean capture = false; - - public static double rotationAngle = 0D; - - public static double offsetX = 0D; - public static double offsetZ = 0D; - - public static void startCapturing() { - reset(); - capture = true; - } - - public static void reset() { - capture = false; - rotationAngle = 0; - offsetX = 0; - offsetZ = 0; - } - - private static final ThreadLocal rotationPoint = ThreadLocal.withInitial(() -> new double[3]); - - public static double[] rotatePoint(double x, double y, double z) { - if (capture) { - final double radians = Math.toRadians(rotationAngle); - final double sin = Math.sin(radians); - final double cos = Math.cos(radians); - - double nx = x * cos - z * sin; - double nz = x * sin + z * cos; - - x = nx; - z = nz; - } - final double[] doubles = rotationPoint.get(); - doubles[0] = x; - doubles[1] = y; - doubles[2] = z; - return doubles; - } - - public static double[] rotatePointWithOffset(double x, double y, double z) { - return rotatePointWithOffset(x, y, z, offsetX, 0, offsetZ); - } - - private static final ThreadLocal rotationPointOffset = ThreadLocal.withInitial(() -> new double[3]); - - public static double[] rotatePointWithOffset(double x, double y, double z, double offsetX, double offsetY, - double offsetZ) { - if (capture) { - final double radians = Math.toRadians(rotationAngle); - final double sin = Math.sin(radians); - final double cos = Math.cos(radians); - - x += offsetX; - z += offsetZ; - - x += 0.5; - z += 0.5; - - double nx = x * cos - z * sin; - double nz = x * sin + z * cos; - - x = nx; - z = nz; - - x -= offsetX; - z -= offsetZ; - - x -= 0.5; - z -= 0.5; - } - final double[] doubles = rotationPointOffset.get(); - doubles[0] = x; - doubles[1] = y; - doubles[2] = z; - return doubles; - } -} diff --git a/src/main/java/remoteio/core/LoadingPlugin.java b/src/main/java/remoteio/core/LoadingPlugin.java deleted file mode 100644 index aa854b7..0000000 --- a/src/main/java/remoteio/core/LoadingPlugin.java +++ /dev/null @@ -1,37 +0,0 @@ -package remoteio.core; - -import java.util.Map; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -/** - * @author dmillerw - */ -@IFMLLoadingPlugin.MCVersion("1.7.10") -public class LoadingPlugin implements IFMLLoadingPlugin { - - @Override - public String[] getASMTransformerClass() { - return new String[] { "remoteio.core.transform.CoreTransformer" }; - } - - @Override - public String getModContainerClass() { - return null; - } - - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - MappingHelper.obfuscated = ((Boolean) data.get("runtimeDeobfuscationEnabled")); - } - - @Override - public String getAccessTransformerClass() { - return null; - } -} diff --git a/src/main/java/remoteio/core/MappingHelper.java b/src/main/java/remoteio/core/MappingHelper.java deleted file mode 100644 index 57f56d2..0000000 --- a/src/main/java/remoteio/core/MappingHelper.java +++ /dev/null @@ -1,23 +0,0 @@ -package remoteio.core; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * @author dmillerw - */ -public class MappingHelper { - - public static Logger logger = LogManager.getLogger("RemoteIO:ASM"); - - public static boolean obfuscated; - - public static boolean stringMatches(String string, String... compare) { - for (String s : compare) { - if (s.equals(string)) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/remoteio/core/mapping/MappingConstants.java b/src/main/java/remoteio/core/mapping/MappingConstants.java deleted file mode 100644 index ac0f207..0000000 --- a/src/main/java/remoteio/core/mapping/MappingConstants.java +++ /dev/null @@ -1,78 +0,0 @@ -package remoteio.core.mapping; - -import org.objectweb.asm.tree.MethodNode; - -import remoteio.core.MappingHelper; - -/** - * @author dmillerw - */ -public class MappingConstants { - - public static class Type { - - // [0]: Deobfuscated - // [1]: Obfuscated - public static final String[] WORLD = new String[] { "net/minecraft/world/World", "ahb" }; - public static final String[] TESSELLATOR = new String[] { "net/minecraft/client/renderer/Tessellator", "bmh" }; - public static final String[] TESSELLATOR_VERTEX_STATE = new String[] { - "net/minecraft/client/shader/TesselatorVertexState", "bmi" }; - - public static String get(String[] array) { - if (MappingHelper.obfuscated) { - return array[1]; - } else { - return array[0]; - } - } - } - - public static class Method { - - // [0]: Deobfuscated - // [1]: Searge - // [2]: Notch - public static final String[] GET_VERTEX_STATE = new String[] { "getVertexState", "func_147564_a", "a" }; - public static final String[] ADD_VERTEX = new String[] { "addVertex", "func_78377_a", "a" }; - public static final String[] SET_NORMAL = new String[] { "setNormal", "func_78375_b", "c" }; - public static final String[] GET_INDIRECT_POWER_LEVEL_TO = new String[] { "getIndirectPowerLevelTo", - "func_72878_l", "g" }; - - public static class Desc { - - // [0]: Deobfuscated - // [1]: Obfuscated - public static final String[] GET_VERTEX_STATE = new String[] { - "(FFF)Lnet/minecraft/client/shader/TesselatorVertexState;", "(FFF)Lbmi;" }; - public static final String[] ADD_VERTEX = new String[] { "(DDD)V", "(DDD)V" }; - public static final String[] SET_NORMAL = new String[] { "(FFF)V", "(FFF)V" }; - public static final String[] GET_INDIRECT_POWER_LEVEL_TO = new String[] { "(IIII)I", "(IIII)I" }; - - public static String get(String[] array) { - if (MappingHelper.obfuscated) { - return array[1]; - } else { - return array[0]; - } - } - } - - public static boolean equals(MethodNode methodNode, String[] name, String[] desc) { - return MappingHelper.stringMatches(methodNode.name, name) - && MappingHelper.stringMatches(methodNode.desc, desc); - } - } - - public static class Field { - - // [0]: Deobfuscated - // [1]: Searge - // [2]: Notch - public static final String[] RAW_BUFFER_INDEX = new String[] { "rawBufferIndex", "field_147569_p", "p" }; - public static final String[] VERTEX_COUNT = new String[] { "vertexCount", "field_78406_i", "g" }; - public static final String[] HAS_TEXTURE = new String[] { "hasTexture", "field_78400_o", "m" }; - public static final String[] HAS_BRIGHTNESS = new String[] { "hasBrightness", "field_78414_p", "n" }; - public static final String[] HAS_NORMALS = new String[] { "hasNormals", "field_78413_q", "o" }; - public static final String[] HAS_COLOR = new String[] { "hasColor", "field_78399_n", "l" }; - } -} diff --git a/src/main/java/remoteio/core/transform/CoreTransformer.java b/src/main/java/remoteio/core/transform/CoreTransformer.java deleted file mode 100644 index 65717b3..0000000 --- a/src/main/java/remoteio/core/transform/CoreTransformer.java +++ /dev/null @@ -1,41 +0,0 @@ -package remoteio.core.transform; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.launchwrapper.IClassTransformer; - -import com.google.common.collect.Lists; - -import remoteio.core.MappingHelper; - -/** - * @author dmillerw - */ -public class CoreTransformer implements IClassTransformer { - - public List transformerList = Lists.newArrayList(); - - private void addTransformer(ITransformer transformer) { - transformerList.add(transformer); - MappingHelper.logger.info("Adding transformer for: " + Arrays.toString(transformer.getClasses())); - } - - public CoreTransformer() { - // addTransformer(new TransformWorld()); - addTransformer(new TransformTessellator()); - } - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - for (ITransformer transformer : transformerList) { - for (String string : transformer.getClasses()) { - if (transformedName.equals(string)) { - MappingHelper.logger.info("Beginning to transform '" + transformedName + "'"); - return transformer.transform(transformedName, basicClass); - } - } - } - return basicClass; - } -} diff --git a/src/main/java/remoteio/core/transform/ITransformer.java b/src/main/java/remoteio/core/transform/ITransformer.java deleted file mode 100644 index 5f4a838..0000000 --- a/src/main/java/remoteio/core/transform/ITransformer.java +++ /dev/null @@ -1,11 +0,0 @@ -package remoteio.core.transform; - -/** - * @author dmillerw - */ -public interface ITransformer { - - public String[] getClasses(); - - public byte[] transform(String name, byte[] basicClass); -} diff --git a/src/main/java/remoteio/core/transform/TransformTessellator.java b/src/main/java/remoteio/core/transform/TransformTessellator.java deleted file mode 100644 index 936bc04..0000000 --- a/src/main/java/remoteio/core/transform/TransformTessellator.java +++ /dev/null @@ -1,199 +0,0 @@ -package remoteio.core.transform; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.FrameNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.IntInsnNode; -import org.objectweb.asm.tree.JumpInsnNode; -import org.objectweb.asm.tree.LabelNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.TypeInsnNode; -import org.objectweb.asm.tree.VarInsnNode; - -import remoteio.core.MappingHelper; -import remoteio.core.mapping.MappingConstants; - -/** - * @author dmillerw - */ -public class TransformTessellator implements ITransformer { - - private static final String METHOD_HANDLER = "remoteio/client/render/TessellatorCapture"; - - @Override - public String[] getClasses() { - return new String[] { "net.minecraft.client.renderer.Tessellator" }; - } - - @Override - public byte[] transform(String name, byte[] basicClass) { - ClassReader classReader = new ClassReader(basicClass); - ClassNode classNode = new ClassNode(); - classReader.accept(classNode, 0); - - MethodNode getVertexStateNode = null; - MethodNode addVertexNode = null; - MethodNode setNormalNode = null; - - final String tessellator = MappingConstants.Type.get(MappingConstants.Type.TESSELLATOR); - final String vertexState = MappingConstants.Type.get(MappingConstants.Type.TESSELLATOR_VERTEX_STATE); - - for (MethodNode methodNode : classNode.methods) { - if (MappingConstants.Method.equals( - methodNode, - MappingConstants.Method.GET_VERTEX_STATE, - MappingConstants.Method.Desc.GET_VERTEX_STATE)) { - getVertexStateNode = methodNode; - MappingHelper.logger.info("Found method 'getVertexState'"); - } else if (MappingConstants.Method - .equals(methodNode, MappingConstants.Method.ADD_VERTEX, MappingConstants.Method.Desc.ADD_VERTEX)) { - addVertexNode = methodNode; - MappingHelper.logger.info("Found method 'addVertex'"); - } else - if (MappingConstants.Method.equals( - methodNode, - MappingConstants.Method.SET_NORMAL, - MappingConstants.Method.Desc.SET_NORMAL)) { - setNormalNode = methodNode; - MappingHelper.logger.info("Found method 'setNormal'"); - } - } - - if (getVertexStateNode != null) { - InsnList insnList = new InsnList(); - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // Add this (tessellator instance) to stack - insnList.add(getFieldNode(tessellator, MappingConstants.Field.RAW_BUFFER_INDEX, "I")); // add rawBufferIndex - // variable - insnList.add(new InsnNode(Opcodes.ICONST_1)); // add number 1 to stack - LabelNode l1 = new LabelNode(new Label()); - insnList.add(new JumpInsnNode(Opcodes.IF_ICMPGE, l1)); // if rawBufferIndex is less than or equal to 1 - insnList.add(new TypeInsnNode(Opcodes.NEW, vertexState)); // create new vertex state object - insnList.add(new InsnNode(Opcodes.DUP)); // duplicate top object on stack - insnList.add(new InsnNode(Opcodes.ICONST_0)); // add number 0 to stack - insnList.add(new IntInsnNode(Opcodes.NEWARRAY, Opcodes.T_INT)); // create new array of type int with size 0 - - // Add important variables to stack - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.RAW_BUFFER_INDEX, "I")); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.VERTEX_COUNT, "I")); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.HAS_TEXTURE, "Z")); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.HAS_BRIGHTNESS, "Z")); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.HAS_NORMALS, "Z")); - insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this - insnList.add(getFieldNode(tessellator, MappingConstants.Field.HAS_COLOR, "Z")); - - // Call init method on TesselatorVertexState object - insnList.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, vertexState, "", "([IIIZZZZ)V", false)); - - insnList.add(new InsnNode(Opcodes.ARETURN)); // return - insnList.add(l1); // jump back - insnList.add(new FrameNode(Opcodes.F_SAME, 0, null, 0, null)); // clear frame (?) - - getVertexStateNode.instructions.insertBefore(getVertexStateNode.instructions.get(0), insnList); - } - - if (addVertexNode != null) { - InsnList insnList = new InsnList(); - - // Load the three parameters - insnList.add(new VarInsnNode(Opcodes.DLOAD, 1)); - insnList.add(new VarInsnNode(Opcodes.DLOAD, 3)); - insnList.add(new VarInsnNode(Opcodes.DLOAD, 5)); - - // Invoke rotation method - insnList.add( - new MethodInsnNode( - Opcodes.INVOKESTATIC, - METHOD_HANDLER, - "rotatePointWithOffset", - "(DDD)[D", - false)); - - insnList.add(new VarInsnNode(Opcodes.ASTORE, 6)); // Store returned array - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 6)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_0)); // Load 0 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new VarInsnNode(Opcodes.DSTORE, 1)); // Save value to param 1 - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 6)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_1)); // Load 1 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new VarInsnNode(Opcodes.DSTORE, 3)); // Save value to param 3 - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 6)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_2)); // Load 2 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new VarInsnNode(Opcodes.DSTORE, 5)); // Save value to param 5 - - addVertexNode.instructions.insertBefore(addVertexNode.instructions.get(0), insnList); - } - - if (setNormalNode != null) { - InsnList insnList = new InsnList(); - - // Load and convert the parameters - insnList.add(new VarInsnNode(Opcodes.FLOAD, 1)); - insnList.add(new InsnNode(Opcodes.F2D)); - insnList.add(new VarInsnNode(Opcodes.FLOAD, 2)); - insnList.add(new InsnNode(Opcodes.F2D)); - insnList.add(new VarInsnNode(Opcodes.FLOAD, 3)); - insnList.add(new InsnNode(Opcodes.F2D)); - - // Invoke rotation method - insnList.add(new MethodInsnNode(Opcodes.INVOKESTATIC, METHOD_HANDLER, "rotatePoint", "(DDD)[D", false)); - - insnList.add(new VarInsnNode(Opcodes.ASTORE, 3)); // Store the result - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 3)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_0)); // Load 0 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new InsnNode(Opcodes.D2F)); // Cast - insnList.add(new VarInsnNode(Opcodes.FSTORE, 1)); // Save value to param 1 - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 3)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_1)); // Load 1 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new InsnNode(Opcodes.D2F)); // Cast - insnList.add(new VarInsnNode(Opcodes.FSTORE, 2)); // Save value to param 2 - - insnList.add(new VarInsnNode(Opcodes.ALOAD, 3)); // Add array to stack - insnList.add(new InsnNode(Opcodes.ICONST_2)); // Load 2 on to stack - insnList.add(new InsnNode(Opcodes.DALOAD)); // Load array index - insnList.add(new InsnNode(Opcodes.D2F)); // Cast - insnList.add(new VarInsnNode(Opcodes.FSTORE, 3)); // Save value to param 3 - - setNormalNode.instructions.insertBefore(setNormalNode.instructions.get(0), insnList); - } - - if (getVertexStateNode != null && addVertexNode != null && setNormalNode != null) { - MappingHelper.logger.warn("Successfully transformed Tessellator.class!"); - ClassWriter classWriter = new ClassWriter(0); - classNode.accept(classWriter); - return classWriter.toByteArray(); - } else { - MappingHelper.logger.warn("Failed to transform Tessellator.class!"); - return basicClass; - } - } - - private FieldInsnNode getFieldNode(String owner, String[] name, String desc) { - if (MappingHelper.obfuscated) { - return new FieldInsnNode(Opcodes.GETFIELD, owner, name[2], desc); - } else { - return new FieldInsnNode(Opcodes.GETFIELD, owner, name[0], desc); - } - } -} diff --git a/src/main/java/remoteio/core/transform/TransformWorld.java b/src/main/java/remoteio/core/transform/TransformWorld.java deleted file mode 100644 index 900dea9..0000000 --- a/src/main/java/remoteio/core/transform/TransformWorld.java +++ /dev/null @@ -1,76 +0,0 @@ -package remoteio.core.transform; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; - -import remoteio.core.MappingHelper; -import remoteio.core.mapping.MappingConstants; - -/** - * @author dmillerw - */ -public class TransformWorld implements ITransformer { - - private static final String METHOD_HANDLER = "remoteio/common/tracker/RedstoneTracker"; - - private static final String METHOD_REDSTONE = "getIndirectPowerLevelTo"; - private static final String METHOD_REDSTONE_DESC = "(L%s;IIII)I"; - - @Override - public String[] getClasses() { - return new String[] { "net.minecraft.world.World" }; - } - - @Override - public byte[] transform(String name, byte[] basicClass) { - ClassReader classReader = new ClassReader(basicClass); - ClassNode classNode = new ClassNode(); - classReader.accept(classNode, 0); - - MethodNode targetNode = null; - - final String world = MappingConstants.Type.get(MappingConstants.Type.WORLD); - - for (MethodNode methodNode : classNode.methods) { - if (MappingConstants.Method.equals( - methodNode, - MappingConstants.Method.GET_INDIRECT_POWER_LEVEL_TO, - MappingConstants.Method.Desc.GET_INDIRECT_POWER_LEVEL_TO)) { - targetNode = methodNode; - MappingHelper.logger.info("Found method 'getIndirectPowerLevelTo'"); - break; - } - } - - if (targetNode != null) { - targetNode.instructions.clear(); - targetNode.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - targetNode.instructions.add(new VarInsnNode(Opcodes.ILOAD, 1)); - targetNode.instructions.add(new VarInsnNode(Opcodes.ILOAD, 2)); - targetNode.instructions.add(new VarInsnNode(Opcodes.ILOAD, 3)); - targetNode.instructions.add(new VarInsnNode(Opcodes.ILOAD, 4)); - targetNode.instructions.add( - new MethodInsnNode( - Opcodes.INVOKESTATIC, - METHOD_HANDLER, - METHOD_REDSTONE, - String.format(METHOD_REDSTONE_DESC, world), - false)); - targetNode.instructions.add(new InsnNode(Opcodes.IRETURN)); - - MappingHelper.logger.warn("Successfully transformed World.class!"); - ClassWriter classWriter = new ClassWriter(0); - classNode.accept(classWriter); - return classWriter.toByteArray(); - } else { - MappingHelper.logger.warn("Failed to transform World.class"); - return basicClass; - } - } -}