Is it really possible, though? A quick look at the code for the grappling hook reveals that it only activates once the projectile hits something.
function GrappleRopeProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal)
{
if(%col.GrappleRopeTarget || $Pref::Server::GrappleRopeAnywhere)
{
%ppos = %obj.client.player.getPosition();
%scanTarg = ContainerRayCast(vectorAdd(%ppos, "0 0 1"), %pos, $TypeMasks::StaticObjectType);
if(!%scanTarg || %scanTarg == %col)
{
%obj.client.player.ropeLength = vectorLen(vectorSub(%obj.client.player.getPosition(), %pos));
%obj.client.player.GrappleRopeTarget++;
%obj.client.player.GrappleRopeCol = %col;
%obj.client.player.GrappleRopePos = %pos;
}
}
}