List of usage examples for org.objectweb.asm.tree MethodNode MethodNode
public MethodNode(final int access, final String name, final String descriptor, final String signature, final String[] exceptions)
From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java
License:Apache License
private void addMapperKeySimple(ClassNode mapper, FieldNode key) { if (DomainMojoHelper.log().isDebugEnabled()) DomainMojoHelper.log().debug("Add mapperKey(IDataSource)K method, key field:" + key.name); String fullDesc = AsmHelper.toFullName(key.desc); MethodNode mn = new MethodNode(ACC_PUBLIC, "mapperKey", "(Lgemlite/core/internal/domain/IDataSource;)" + fullDesc, null, null); InsnList insn = mn.instructions;// w w w . j ava 2s . c o m insn.add(new VarInsnNode(ALOAD, 1)); insn.add(new LdcInsnNode(key.name)); Item1 mti = MapperToolRegistry.getDataSItem(key.desc); insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "gemlite/core/internal/domain/IDataSource", mti.getMethod, "(Ljava/lang/String;)" + key.desc, true)); AsmHelper.addTypeConvert(insn, key.desc); insn.add(new InsnNode(ARETURN)); mapper.methods.add(mn); if (DomainMojoHelper.log().isDebugEnabled()) DomainMojoHelper.log().debug("Add mapperKey(IDataSource)K method, key field:" + key.name); }
From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java
License:Apache License
private void addFieldNames(ClassNode domain, ClassNode mapper, ClassNode kcn, FieldNode kfn) { // ???fieldNames MethodNode mn = new MethodNode(ACC_STATIC, "<clinit>", "()V", null, null); InsnList insn = mn.instructions;// w ww . j av a 2 s . co m // new valueFieldNames insn.add(new TypeInsnNode(NEW, "java/util/ArrayList")); insn.add(new InsnNode(DUP)); insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", false)); insn.add(new FieldInsnNode(PUTSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;")); // new keyFieldNames insn.add(new TypeInsnNode(NEW, "java/util/ArrayList")); insn.add(new InsnNode(DUP)); insn.add(AsmHelper.newMethodInsnNode(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", false)); insn.add(new FieldInsnNode(PUTSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;")); // value fields for (Object o : domain.fields) { FieldNode fn = (FieldNode) o; if (!DomainMojoHelper.isValidField(fn)) continue; insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;")); insn.add(new LdcInsnNode(fn.name)); insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", true)); insn.add(new InsnNode(POP)); } // key fields if (kcn != null) { for (Object o : kcn.fields) { FieldNode fn = (FieldNode) o; insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;")); insn.add(new LdcInsnNode(fn.name)); insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", true)); insn.add(new InsnNode(POP)); } } else { insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;")); insn.add(new LdcInsnNode(kfn.name)); insn.add(AsmHelper.newMethodInsnNode(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", true)); insn.add(new InsnNode(POP)); } insn.add(new InsnNode(RETURN)); mapper.methods.add(mn); // fieldNames ???? FieldNode fnFieldNames = new FieldNode(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "valueFieldNames", "Ljava/util/List;", "Ljava/util/List<Ljava/lang/String;>;", null); mapper.fields.add(fnFieldNames); fnFieldNames = new FieldNode(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "keyFieldNames", "Ljava/util/List;", "Ljava/util/List<Ljava/lang/String;>;", null); mapper.fields.add(fnFieldNames); // getFieldNames mn = new MethodNode(ACC_PUBLIC, "getValueFieldNames", "()Ljava/util/List;", "()Ljava/util/List<Ljava/lang/String;>;", null); insn = mn.instructions; insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "valueFieldNames", "Ljava/util/List;")); insn.add(new InsnNode(ARETURN)); mapper.methods.add(mn); // getKeyFieldNames mn = new MethodNode(ACC_PUBLIC, "getKeyFieldNames", "()Ljava/util/List;", "()Ljava/util/List<Ljava/lang/String;>;", null); insn = mn.instructions; insn.add(new FieldInsnNode(GETSTATIC, mapper.name, "keyFieldNames", "Ljava/util/List;")); insn.add(new InsnNode(ARETURN)); mapper.methods.add(mn); }
From source file:gemlite.maven.plugin.support.mapper.MapperToolProcessor.java
License:Apache License
private void addKeyValueTypeMethod(ClassNode domain, ClassNode mapper, String keyClassDesc) { keyClassDesc = AsmHelper.toFullName(keyClassDesc); MethodNode mn = new MethodNode(ACC_PUBLIC, "getKeyClass", "()Ljava/lang/Class;", "()Ljava/lang/Class<" + keyClassDesc + ">;", null); InsnList insn = mn.instructions;//from ww w . ja va 2s . c om insn.add(new LdcInsnNode(Type.getType(keyClassDesc))); insn.add(new InsnNode(ARETURN)); mapper.methods.add(mn); String valueClassDesc = "L" + domain.name + ";"; mn = new MethodNode(ACC_PUBLIC, "getValueClass", "()Ljava/lang/Class;", "()Ljava/lang/Class<" + valueClassDesc + ">;", null); insn = mn.instructions; insn.add(new LdcInsnNode(Type.getType(valueClassDesc))); insn.add(new InsnNode(ARETURN)); mapper.methods.add(mn); }
From source file:io.awacs.plugin.springmvc.ServiceWrapper.java
License:Apache License
private MethodNode copyMethod(MethodNode src) { //copy exceptions String[] exceptions = new String[src.exceptions.size()]; for (int i = 0; i < src.exceptions.size(); i++) { exceptions[i] = src.exceptions.get(i).toString(); }/*from ww w . ja va 2 s .com*/ //copy method annotations List<AnnotationNode> methodAnns = new ArrayList<>(src.visibleAnnotations.size()); methodAnns.addAll(src.visibleAnnotations); //copy parameter annotations List[] parameterAnns = new List[src.visibleParameterAnnotations.length]; System.arraycopy(src.visibleParameterAnnotations, 0, parameterAnns, 0, src.visibleParameterAnnotations.length); MethodNode proxy = new MethodNode(src.access, src.name + "_proxy", getDescAfterAppendParam(src.desc, "Ljavax/servlet/http/HttpServletRequest;"), src.signature, exceptions); proxy.visibleAnnotations = methodAnns; proxy.visibleParameterAnnotations = parameterAnns; return proxy; }
From source file:io.awacs.plugin.stacktrace.ClassTransformer.java
License:Apache License
public void visit(ClassNode cn) { cn.check(Opcodes.ASM5);// w w w. ja v a 2s. c o m //?? List<MethodNode> appended = new ArrayList<>(cn.methods.size()); //?? for (Object mn : cn.methods) { MethodNode src = (MethodNode) mn; // if (!filterMethod(cn, src)) { continue; } boolean terminated = isTerminatedMethod(src); if (terminated) { //copy exceptions String[] exceptions = null; if (src.exceptions != null) { exceptions = new String[src.exceptions.size()]; for (int i = 0; i < src.exceptions.size(); i++) { exceptions[i] = src.exceptions.get(i).toString(); } } //declare method MethodNode proxy = new MethodNode(src.access, src.name, src.desc, src.signature, exceptions); appended.add(proxy); //copy method annotations List<AnnotationNode> methodAnns = null; if (src.visibleAnnotations != null) { methodAnns = new ArrayList<>(src.visibleAnnotations.size()); methodAnns.addAll(src.visibleAnnotations); } proxy.visibleAnnotations = methodAnns; //copy parameter annotations List[] parameterAnns = null; if (src.visibleParameterAnnotations != null) { parameterAnns = new List[src.visibleParameterAnnotations.length]; System.arraycopy(src.visibleParameterAnnotations, 0, parameterAnns, 0, src.visibleParameterAnnotations.length); } proxy.visibleParameterAnnotations = parameterAnns; //clear origin method's annotation and change name int _slash = cn.name.lastIndexOf('/'); //?? src.name = src.name + "_origin_" + cn.name.substring(_slash + 1); src.access = src.access & ~Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE; src.visibleAnnotations = null; src.visibleLocalVariableAnnotations = null; transformTerminatedMethod(src, proxy, cn); } else { transformPlainMethod(src, cn); } } cn.methods.addAll(appended); }
From source file:me.qmx.jitescript.MethodDefinition.java
License:Apache License
public MethodNode getMethodNode() { MethodNode method = new MethodNode(getModifiers(), getMethodName(), getSignature(), null, null); method.visibleAnnotations = new ArrayList<VisibleAnnotation>(); method.instructions.add(getMethodBody().getInstructionList()); for (TryCatchBlockNode tryCatchBlockNode : getMethodBody().getTryCatchBlockList()) { method.tryCatchBlocks.add(tryCatchBlockNode); }/*from www . j a v a 2 s . c o m*/ for (LocalVariableNode localVariableNode : getMethodBody().getLocalVariableList()) { method.localVariables.add(localVariableNode); } for (VisibleAnnotation annotation : methodBody.getAnnotations()) { method.visibleAnnotations.add(annotation.getNode()); } return method; }
From source file:net.cazzar.corelib.asm.MethodTransformer.java
License:Open Source License
/** * Replace the said method with the instructions * * @param node the Class being worked on * @param access the Opcode access to the class * @param name the name of the function * @param desc the method description * @param insns the instructions of the class * @param tryCatchBlocks a//from www .j av a2s. c o m */ public final void replaceMethod(ClassNode node, int access, String name, String desc, InsnList insns, TryCatchBlockNode... tryCatchBlocks) { InsnList instructions = transformInsns(insns); String srgName = getMapping(name); List<MethodDescription> methodNames = Lists.newArrayList(new MethodDescription(name, desc), new MethodDescription(srgName, desc), McpMappings.instance().getMethod(srgName)); MethodNode method = new MethodNode(access, srgName, desc, null, null); Collections.addAll(method.tryCatchBlocks, tryCatchBlocks); method.instructions.add(instructions); for (Iterator<MethodNode> i = node.methods.iterator(); i.hasNext();) { MethodNode m = i.next(); for (MethodDescription match : methodNames) { if (match == null) { continue; } if (m.name.equals(match.getName()) && m.desc.equals(match.getDesc())) { logger.debug("Removed {}{} for {}.{}{}", m.name, m.desc, node.name, name, desc); i.remove(); break; } } } node.methods.add(method); }
From source file:net.cazzar.corelib.asm.MethodTransformer.java
License:Open Source License
/** * Append the instructions to the method * * @param node the Class being worked on * @param access the Opcode access to the class * @param name the name of the function * @param desc the method description * @param insnList the instructions to append * @param tryCatchBlockNodes a/*from w ww . j a v a2 s. c o m*/ */ public final void appendToMethod(ClassNode node, int access, String name, String desc, InsnList insnList, TryCatchBlockNode... tryCatchBlockNodes) { InsnList insns = transformInsns(insnList); String srgName = getMapping(name); List<MethodDescription> methodNames = Lists.newArrayList(new MethodDescription(name, desc), new MethodDescription(srgName, desc), McpMappings.instance().getMethod(srgName)); MethodNode mtd = new MethodNode(access, srgName, desc, null, null); Collections.addAll(mtd.tryCatchBlocks, tryCatchBlockNodes); for (MethodNode methodNode : node.methods) { for (MethodDescription match : methodNames) { if (match == null) continue; if (methodNode.name.equals(match.getName()) && methodNode.desc.equals(match.getDesc())) { AbstractInsnNode lastInsn = methodNode.instructions.getLast(); while (lastInsn instanceof LabelNode || lastInsn instanceof LineNumberNode) lastInsn = lastInsn.getPrevious(); if (isReturn(lastInsn)) methodNode.instructions.insertBefore(lastInsn, insns); else methodNode.instructions.add(insns); } } } }
From source file:net.cazzar.corelib.asm.MethodTransformer.java
License:Open Source License
/** * Prepend the instructions to the method * * @param node the Class being worked on * @param access the Opcode access to the class * @param name the name of the function * @param desc the method description * @param insnList the instructions to append * @param tryCatchBlockNodes a//from w w w . j ava 2 s.c o m */ public final void prependToMethod(ClassNode node, int access, String name, String desc, InsnList insnList, TryCatchBlockNode... tryCatchBlockNodes) { InsnList insns = transformInsns(insnList); String srgName = getMapping(name); List<MethodDescription> methodNames = Lists.newArrayList(new MethodDescription(name, desc), new MethodDescription(srgName, desc), McpMappings.instance().getMethod(srgName)); MethodNode mtd = new MethodNode(access, srgName, desc, null, null); Collections.addAll(mtd.tryCatchBlocks, tryCatchBlockNodes); for (MethodNode methodNode : node.methods) { for (MethodDescription match : methodNames) { if (match == null) continue; if (methodNode.name.equals(match.getName()) && methodNode.desc.equals(match.getDesc())) { methodNode.instructions.insertBefore(methodNode.instructions.getFirst(), insns); } } } }
From source file:net.cazzar.corelib.asm.transformers.PositionedSoundRecord.java
License:Open Source License
@SuppressWarnings("OverlyLongMethod") @Override//ww w . j av a2 s.com public void transform(ClassNode node, String transformedName) { MethodNode mtd = new MethodNode(ACC_PUBLIC, "hashCode", "()I", null, new String[0]); // mtd.name = "hashCode"; // mtd.desc = "()I"; InsnList insns = new InsnList(); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "volume", "F")); insns.add(new InsnNode(FCONST_0)); insns.add(new InsnNode(FCMPL)); LabelNode l1 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l1)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "volume", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "floatToIntBits", "(F)I", false)); LabelNode l2 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l2)); insns.add(l1); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new InsnNode(ICONST_0)); insns.add(l2); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147663_c", "F")); insns.add(new InsnNode(FCONST_0)); insns.add(new InsnNode(FCMPL)); LabelNode l5 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l5)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147663_c", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "floatToIntBits", "(F)I", false)); LabelNode l6 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l6)); insns.add(l5); insns.add(new FrameNode(F_SAME1, 0, null, 1, new Object[] { INTEGER })); insns.add(new InsnNode(ICONST_0)); insns.add(l6); insns.add(new FrameNode(F_FULL, 2, new Object[] { "net/minecraft/client/audio/PositionedSound", INTEGER }, 2, new Object[] { INTEGER, INTEGER })); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "xPosF", "F")); insns.add(new InsnNode(FCONST_0)); insns.add(new InsnNode(FCMPL)); LabelNode l8 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l8)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "xPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "floatToIntBits", "(F)I", false)); LabelNode l9 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l9)); insns.add(l8); insns.add(new FrameNode(F_SAME1, 0, null, 1, new Object[] { INTEGER })); insns.add(new InsnNode(ICONST_0)); insns.add(l9); insns.add(new FrameNode(F_FULL, 2, new Object[] { "net/minecraft/client/audio/PositionedSound", INTEGER }, 2, new Object[] { INTEGER, INTEGER })); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "yPosF", "F")); insns.add(new InsnNode(FCONST_0)); insns.add(new InsnNode(FCMPL)); LabelNode l11 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l11)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "yPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "floatToIntBits", "(F)I", false)); LabelNode l12 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l12)); insns.add(l11); insns.add(new FrameNode(F_SAME1, 0, null, 1, new Object[] { INTEGER })); insns.add(new InsnNode(ICONST_0)); insns.add(l12); insns.add(new FrameNode(F_FULL, 2, new Object[] { "net/minecraft/client/audio/PositionedSound", INTEGER }, 2, new Object[] { INTEGER, INTEGER })); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "zPosF", "F")); insns.add(new InsnNode(FCONST_0)); insns.add(new InsnNode(FCMPL)); LabelNode l14 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l14)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "zPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "floatToIntBits", "(F)I", false)); LabelNode l15 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l15)); insns.add(l14); insns.add(new FrameNode(F_SAME1, 0, null, 1, new Object[] { INTEGER })); insns.add(new InsnNode(ICONST_0)); insns.add(l15); insns.add(new FrameNode(F_FULL, 2, new Object[] { "net/minecraft/client/audio/PositionedSound", INTEGER }, 2, new Object[] { INTEGER, INTEGER })); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "repeat", "Z")); LabelNode l17 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l17)); insns.add(new InsnNode(ICONST_1)); LabelNode l18 = new LabelNode(new Label()); insns.add(new JumpInsnNode(GOTO, l18)); insns.add(l17); insns.add(new FrameNode(F_SAME1, 0, null, 1, new Object[] { INTEGER })); insns.add(new InsnNode(ICONST_0)); insns.add(l18); insns.add(new FrameNode(F_FULL, 2, new Object[] { "net/minecraft/client/audio/PositionedSound", INTEGER }, 2, new Object[] { INTEGER, INTEGER })); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147665_h", "I")); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new IntInsnNode(BIPUSH, 31)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IMUL)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147666_i", "Lnet/minecraft/client/audio/ISound$AttenuationType;")); insns.add(new MethodInsnNode(INVOKEVIRTUAL, "net/minecraft/client/audio/ISound$AttenuationType", "hashCode", "()I", false)); insns.add(new InsnNode(IADD)); insns.add(new VarInsnNode(ISTORE, 1)); insns.add(new VarInsnNode(ILOAD, 1)); insns.add(new InsnNode(IRETURN)); mtd.instructions.add(transformInsns(insns)); node.methods.add(mtd); mtd = new MethodNode(ACC_PUBLIC, "equals", "(Ljava/lang/Object;)Z", null, new String[0]); insns = new InsnList(); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new VarInsnNode(ALOAD, 1)); l1 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IF_ACMPNE, l1)); insns.add(new InsnNode(ICONST_1)); insns.add(new InsnNode(IRETURN)); insns.add(l1); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 1)); insns.add(new TypeInsnNode(INSTANCEOF, "net/minecraft/client/audio/PositionedSound")); l2 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFNE, l2)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l2); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 1)); insns.add(new TypeInsnNode(CHECKCAST, "net/minecraft/client/audio/PositionedSound")); insns.add(new VarInsnNode(ASTORE, 2)); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147663_c", "F")); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147663_c", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "compare", "(FF)I", false)); LabelNode l4 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l4)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add( new FrameNode(F_APPEND, 1, new Object[] { "net/minecraft/client/audio/PositionedSound" }, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147665_h", "I")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147665_h", "I")); l5 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IF_ICMPEQ, l5)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l5); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "volume", "F")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "volume", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "compare", "(FF)I", false)); LabelNode l7 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l7)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l7); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "xPosF", "F")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "xPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "compare", "(FF)I", false)); l7 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l7)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l7); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "yPosF", "F")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "yPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "compare", "(FF)I", false)); l7 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l7)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l7); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "zPosF", "F")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "zPosF", "F")); insns.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Float", "compare", "(FF)I", false)); l7 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IFEQ, l7)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l7); // insns.add(new FrameNode(F_SAME, 0, null, 0, null)); // insns.add(new VarInsnNode(ALOAD, 0)); // insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147664_a", "Lnet/minecraft/util/ResourceLocation;")); // insns.add(new VarInsnNode(ALOAD, 2)); // insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147664_a", "Lnet/minecraft/util/ResourceLocation;")); // insns.add(new MethodInsnNode(INVOKEVIRTUAL, "net/minecraft/util/ResourceLocation", "equals", "(Ljava/lang/Object;)Z")); // l7 = new LabelNode(new Label()); // insns.add(new JumpInsnNode(IFNE, l7)); // insns.add(new InsnNode(ICONST_0)); // insns.add(new InsnNode(IRETURN)); // insns.add(l7 ); insns.add(new FrameNode(F_SAME, 0, null, 0, null)); insns.add(new VarInsnNode(ALOAD, 0)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147666_i", "Lnet/minecraft/client/audio/ISound$AttenuationType;")); insns.add(new VarInsnNode(ALOAD, 2)); insns.add(new FieldInsnNode(GETFIELD, "net/minecraft/client/audio/PositionedSound", "field_147666_i", "Lnet/minecraft/client/audio/ISound$AttenuationType;")); l7 = new LabelNode(new Label()); insns.add(new JumpInsnNode(IF_ACMPEQ, l7)); insns.add(new InsnNode(ICONST_0)); insns.add(new InsnNode(IRETURN)); insns.add(l7); insns.add(new InsnNode(ICONST_1)); insns.add(new InsnNode(IRETURN)); mtd.instructions.add(transformInsns(insns)); }