List of usage examples for org.objectweb.asm.tree MethodNode visitCode
@Override public void visitCode()
From source file:de.sanandrew.core.manpack.transformer.TransformHorseArmor.java
License:Creative Commons License
private static MethodNode injectMethodSetCustomArmorItem() { MethodNode method = ASMHelper.getMethodNode(Opcodes.ACC_PRIVATE, ASMNames.MD_SAP_SET_CUSTOM_ARMOR_ITEM); method.visitCode(); Label l0 = new Label(); method.visitLabel(l0);//from ww w . j ava2 s . co m method.visitVarInsn(Opcodes.ALOAD, 1); Label l1 = new Label(); method.visitJumpInsn(Opcodes.IFNONNULL, l1); method.visitTypeInsn(Opcodes.NEW, ASMNames.CL_ITEM_STACK); method.visitInsn(Opcodes.DUP); ASMHelper.visitFieldInsn(method, Opcodes.GETSTATIC, ASMNames.FD_ITEMS_IRON_SHOVEL); method.visitInsn(Opcodes.ICONST_0); ASMHelper.visitMethodInsn(method, Opcodes.INVOKESPECIAL, ASMNames.MD_ITEMSTACK_INIT, false); method.visitVarInsn(Opcodes.ASTORE, 1); method.visitLabel(l1); method.visitFrame(Opcodes.F_SAME, 0, null, 0, null); method.visitVarInsn(Opcodes.ALOAD, 0); ASMHelper.visitFieldInsn(method, Opcodes.GETFIELD, ASMNames.FD_HORSE_DATAWATCHER); method.visitIntInsn(Opcodes.BIPUSH, 23); method.visitVarInsn(Opcodes.ALOAD, 1); ASMHelper.visitMethodInsn(method, Opcodes.INVOKEVIRTUAL, ASMNames.MD_DATAWATCHER_UPDATE_OBJ, false); Label l3 = new Label(); method.visitLabel(l3); method.visitInsn(Opcodes.RETURN); Label l4 = new Label(); method.visitLabel(l4); method.visitLocalVariable("this", ASMNames.CL_T_ENTITY_HORSE, null, l0, l3, 0); method.visitLocalVariable("stack", ASMNames.CL_T_ITEM_STACK, null, l0, l3, 1); method.visitMaxs(5, 2); method.visitEnd(); return method; }
From source file:de.sanandrew.core.manpack.transformer.TransformPlayerDismountCtrl.java
License:Creative Commons License
/** * Transforms the Entity.class by adding a new method called _SAP_canDismountOnInput.<br> * This method can be overridden by any entity to control wether or not the rider can dismount via sneaking (usually by pressing LSHIFT for the player). * * @param bytes the class bytes to be transformed * @return the transformed class bytes//from w w w. ja v a 2 s. c o m */ private static byte[] transformEntity(byte[] bytes) { ClassNode clazz = ASMHelper.createClassNode(bytes); MethodNode method = ASMHelper.getMethodNode(Opcodes.ACC_PUBLIC, ASMNames.MD_SAP_CAN_DISMOUNT_ON_INPUT); method.visitCode(); Label l0 = new Label(); method.visitLabel(l0); method.visitInsn(Opcodes.ICONST_1); method.visitInsn(Opcodes.IRETURN); Label l1 = new Label(); method.visitLabel(l1); method.visitLocalVariable("this", ASMNames.CL_T_ENTITY, null, l0, l1, 0); method.visitLocalVariable("player", ASMNames.CL_T_ENTITY_PLAYER, null, l0, l1, 1); method.visitMaxs(1, 2); method.visitEnd(); clazz.methods.add(method); bytes = ASMHelper.createBytes(clazz, /*ClassWriter.COMPUTE_FRAMES |*/ ClassWriter.COMPUTE_MAXS); return bytes; }
From source file:naftoreiclag.dontdigleft.transformer.ResizePlayerBoudingBox.java
License:Open Source License
@Override public byte[] transform(String name, String transformedName, byte[] basicClass) { if (name.equals("net.minecraft.entity.player.EntityPlayer") || name.equals("xl")) { ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(basicClass); classReader.accept(classNode, 0); MethodNode mv = new MethodNode(ASM4, ACC_PROTECTED, "setSize", "(FF)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0);//from ww w . j a v a 2 s. co m mv.visitVarInsn(FLOAD, 1); mv.visitLdcInsn(new Float("0.6")); mv.visitInsn(FCMPL); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(FLOAD, 2); mv.visitLdcInsn(new Float("1.8")); mv.visitInsn(FCMPL); mv.visitJumpInsn(IFNE, l1); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLdcInsn(new Float("0.6")); mv.visitVarInsn(FSTORE, 1); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLdcInsn(new Float("0.6")); mv.visitVarInsn(FSTORE, 2); mv.visitLabel(l1); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(FLOAD, 1); mv.visitVarInsn(FLOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/entity/Entity", "setSize", "(FF)V"); Label l4 = new Label(); mv.visitLabel(l4); mv.visitInsn(RETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("this", "Lnet/minecraft/entity/player/EntityPlayer;", null, l0, l5, 0); mv.visitLocalVariable("par1", "F", null, l0, l5, 1); mv.visitLocalVariable("par2", "F", null, l0, l5, 2); mv.visitMaxs(3, 3); mv.visitEnd(); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); classNode.accept(cw); mv.accept(cw); return cw.toByteArray(); } else { return basicClass; } }
From source file:org.lenskit.data.entities.AbstractBeanEntity.java
License:Open Source License
private static MethodNode generateGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) { MethodNode gn = new MethodNode(); gn.name = "get"; gn.desc = Type.getMethodDescriptor(Type.getType(Object.class), Type.getType(AbstractBeanEntity.class)); gn.access = ACC_PUBLIC;// w w w . jav a 2s . c om gn.exceptions = Collections.emptyList(); Type rt = Type.getReturnType(getter); gn.maxLocals = 2; gn.maxStack = 1 + rt.getSize(); gn.visitCode(); // load the target object from parameter gn.visitVarInsn(ALOAD, 1); // cast to target object type gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type)); // call target object method gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(), Type.getMethodDescriptor(getter), false); // convert from primitive to object if necessary CGUtils.adaptFromType(gn, getter.getReturnType()); gn.visitInsn(ARETURN); return gn; }
From source file:org.lenskit.data.entities.AbstractBeanEntity.java
License:Open Source License
private static MethodNode generateLongGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) { MethodNode gn = new MethodNode(); gn.name = "getLong"; gn.desc = Type.getMethodDescriptor(Type.LONG_TYPE, Type.getType(AbstractBeanEntity.class)); gn.access = ACC_PUBLIC;// w ww .java 2 s . c om gn.exceptions = Collections.emptyList(); gn.maxLocals = 2; gn.maxStack = 2; gn.visitCode(); gn.visitVarInsn(ALOAD, 1); gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type)); gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(), Type.getMethodDescriptor(getter), false); gn.visitInsn(LRETURN); return gn; }
From source file:org.lenskit.data.entities.AbstractBeanEntity.java
License:Open Source License
private static MethodNode generateDoubleGetterMethod(Class<? extends AbstractBeanEntity> type, Method getter) { MethodNode gn = new MethodNode(); gn.name = "getDouble"; gn.desc = Type.getMethodDescriptor(Type.DOUBLE_TYPE, Type.getType(AbstractBeanEntity.class)); gn.access = ACC_PUBLIC;/*from www.j a v a2s . c om*/ gn.exceptions = Collections.emptyList(); gn.maxLocals = 2; gn.maxStack = 2; gn.visitCode(); gn.visitVarInsn(ALOAD, 1); gn.visitTypeInsn(CHECKCAST, Type.getInternalName(type)); gn.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(type), getter.getName(), Type.getMethodDescriptor(getter), false); gn.visitInsn(DRETURN); return gn; }