Not sure what your problem is. If you check this code:
Printer::setJamcontrolDisabled(true);
Printer::setBlockingReceive(true);
Printer::resetWizardStack();
Printer::pushWizardVar(Printer::currentPositionSteps[E_AXIS]);
Printer::pushWizardVar(Printer::coordinateOffset[X_AXIS]);
Printer::pushWizardVar(Printer::coordinateOffset[Y_AXIS]);
Printer::pushWizardVar(Printer::coordinateOffset[Z_AXIS]);
Printer::MemoryPosition();
Extruder::current->retractDistance(FILAMENTCHANGE_SHORTRETRACT);
float newZ = FILAMENTCHANGE_Z_ADD + Printer::currentPosition[Z_AXIS];
Printer::currentPositionSteps[E_AXIS] = 0;
if(Printer::isHomedAll()) { // for safety move only when homed!
Printer::moveToReal(Printer::currentPosition[X_AXIS], Printer::currentPosition[Y_AXIS], newZ, 0, Printer::homingFeedrate[Z_AXIS]);
Printer::moveToReal(FILAMENTCHANGE_X_POS, FILAMENTCHANGE_Y_POS, newZ, 0, Printer::homingFeedrate[X_AXIS]);
}
//Extruder::current->retractDistance(FILAMENTCHANGE_LONGRETRACT);
Extruder::pauseExtruders(false);
Commands::waitUntilEndOfAllMoves();
you see after EVENT_JAM_DETECTED it stores position to memory and goes to filamentchange position.
If you meant JAM_ACTION 2 and not JAM_METHOD then the blocking comes after your code, which might be a problem. Have added a #define EVENT_JAM_DETECTED_END {} which runs at the end of the detection.
Normally the host should in this case move to a save position. Therefore we have host pause gcode section.