private MethodNode generateIsBlockingWithShield() {
    MethodNode mv = new MethodNode(ACC_PUBLIC, "isBlockingWithShield", "()Z", null, null);
    mv.visitCode();
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(
        INVOKESTATIC, UTILITY_CLASS, "canBlockWithShield", "(L" + entityPlayerClassName + ";)Z");
    Label l1 = new Label();
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "isShielding", "Z");
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitInsn(ICONST_1);
    Label l2 = new Label();
    mv.visitJumpInsn(GOTO, l2);
    mv.visitLabel(l1);
    mv.visitFrame(F_SAME, 0, null, 0, null);
    mv.visitInsn(ICONST_0);
    mv.visitLabel(l2);
    mv.visitFrame(F_SAME1, 0, null, 1, new Object[] {INTEGER});
    mv.visitInsn(IRETURN);
    Label l3 = new Label();
    mv.visitLabel(l3);
    mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l3, 0);
    mv.visitMaxs(1, 1);
    mv.visitEnd();

    return mv;
  }
  private MethodNode generateSwingOffhand() {
    MethodNode mv = new MethodNode(ACC_PUBLIC, "swingOffItem", SIMPLEST_METHOD_DESC, null, null);
    mv.visitCode();
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "isOffHandSwingInProgress", "Z");
    Label l1 = new Label();
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, entityPlayerClassName, getArmSwingEndMethodName, "()I");
    mv.visitInsn(ICONST_2);
    mv.visitInsn(IDIV);
    mv.visitJumpInsn(IF_ICMPGE, l1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    Label l2 = new Label();
    mv.visitJumpInsn(IFGE, l2);
    mv.visitLabel(l1);
    mv.visitFrame(F_SAME, 0, null, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_M1);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    Label l3 = new Label();
    mv.visitLabel(l3);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_1);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "isOffHandSwingInProgress", "Z");
    mv.visitLabel(l2);
    mv.visitFrame(F_SAME, 0, null, 0, null);
    mv.visitInsn(RETURN);
    Label l4 = new Label();
    mv.visitLabel(l4);
    mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l4, 0);
    mv.visitMaxs(3, 1);
    mv.visitEnd();

    return mv;
  }
  private MethodNode generateGetOffSwingMethod() {

    MethodNode mv = new MethodNode(ACC_PUBLIC, "getOffSwingProgress", "(F)F", null, null);
    mv.visitCode();
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgress", "F");
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "prevOffHandSwingProgress", "F");
    mv.visitInsn(FSUB);
    mv.visitVarInsn(FSTORE, 2);
    Label l1 = new Label();
    mv.visitLabel(l1);
    mv.visitVarInsn(FLOAD, 2);
    mv.visitInsn(FCONST_0);
    mv.visitInsn(FCMPG);
    Label l2 = new Label();
    mv.visitJumpInsn(IFGE, l2);
    Label l3 = new Label();
    mv.visitLabel(l3);
    mv.visitVarInsn(FLOAD, 2);
    mv.visitInsn(FCONST_1);
    mv.visitInsn(FADD);
    mv.visitVarInsn(FSTORE, 2);
    mv.visitLabel(l2);
    mv.visitFrame(F_APPEND, 1, new Object[] {FLOAT}, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "prevOffHandSwingProgress", "F");
    mv.visitVarInsn(FLOAD, 2);
    mv.visitVarInsn(FLOAD, 1);
    mv.visitInsn(FMUL);
    mv.visitInsn(FADD);
    mv.visitInsn(FRETURN);
    Label l4 = new Label();
    mv.visitLabel(l4);
    mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l4, 0);
    mv.visitLocalVariable("frame", "F", null, l0, l4, 1);
    mv.visitLocalVariable("diff", "F", null, l1, l4, 2);
    mv.visitMaxs(3, 3);
    mv.visitEnd();

    return mv;
  }
  private MethodNode generateUpdateSwingArm() {

    MethodNode mv =
        new MethodNode(
            ACC_PROTECTED, playerUpdateArmSwingMethodName, SIMPLEST_METHOD_DESC, null, null);
    mv.visitCode();
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(
        INVOKESPECIAL, entityLivingClassName, playerUpdateArmSwingMethodName, SIMPLEST_METHOD_DESC);
    Label l1 = new Label();
    mv.visitLabel(l1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgress", "F");
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "prevOffHandSwingProgress", "F");
    Label l2 = new Label();
    mv.visitLabel(l2);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, entityPlayerClassName, getArmSwingEndMethodName, "()I");
    mv.visitVarInsn(ISTORE, 1);
    Label l3 = new Label();
    mv.visitLabel(l3);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "isOffHandSwingInProgress", "Z");
    Label l4 = new Label();
    mv.visitJumpInsn(IFEQ, l4);
    Label l5 = new Label();
    mv.visitLabel(l5);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(DUP);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    mv.visitInsn(ICONST_1);
    mv.visitInsn(IADD);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    Label l6 = new Label();
    mv.visitLabel(l6);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    mv.visitVarInsn(ILOAD, 1);
    Label l7 = new Label();
    mv.visitJumpInsn(IF_ICMPLT, l7);
    Label l8 = new Label();
    mv.visitLabel(l8);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    Label l9 = new Label();
    mv.visitLabel(l9);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "isOffHandSwingInProgress", "Z");
    mv.visitJumpInsn(GOTO, l7);
    mv.visitLabel(l4);
    mv.visitFrame(F_APPEND, 1, new Object[] {INTEGER}, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    mv.visitLabel(l7);
    mv.visitFrame(F_SAME, 0, null, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    mv.visitInsn(I2F);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitInsn(I2F);
    mv.visitInsn(FDIV);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgress", "F");
    Label l10 = new Label();
    mv.visitLabel(l10);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, entityPlayerClassName, "specialActionTimer", "I");
    Label l11 = new Label();
    mv.visitJumpInsn(IFLE, l11);
    Label l12 = new Label();
    mv.visitLabel(l12);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "isOffHandSwingInProgress", "Z");
    Label l13 = new Label();
    mv.visitLabel(l13);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, swingProgressBooleanField, "Z");
    Label l14 = new Label();
    mv.visitLabel(l14);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(FCONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgress", "F");
    Label l15 = new Label();
    mv.visitLabel(l15);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, "offHandSwingProgressInt", "I");
    Label l16 = new Label();
    mv.visitLabel(l16);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(FCONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, swingProgressFloatField, "F");
    Label l17 = new Label();
    mv.visitLabel(l17);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ICONST_0);
    mv.visitFieldInsn(PUTFIELD, entityPlayerClassName, swingProgressIntField, "I");
    mv.visitLabel(l11);
    mv.visitFrame(F_SAME, 0, null, 0, null);
    mv.visitInsn(RETURN);
    Label l18 = new Label();
    mv.visitLabel(l18);
    mv.visitLocalVariable("this", "L" + entityPlayerClassName + ";", null, l0, l18, 0);
    mv.visitLocalVariable("var1", "I", null, l3, l18, 1);
    mv.visitMaxs(3, 2);
    mv.visitEnd();

    return mv;
  }