I think all projectiles should have a "speed" tag, that you can change to make it move faster, using a entitydata command, or a just spawning the projectile with the speed tag. idk exactly how much speed each integer would add, lets say its speed is measured in blocks per second. This tag would enable you to make really fast moving arrows (basically simple guns) with this command in a repeating command block: "entitydata @e[type=arrow] {speed:9999}". Thats just a example. Puting the value at a negative would make projectiles instantly follow their path, no delay (hitscan), and putting values at "0" would make the arrow stop midair and fall to the ground, but if the projectile has a no gravity, it would stop and keep its current rotation. Lets say you have a arrow flying, with no gravity, and you set its speed to 0. If you were to then set its speed to "~" it would retain its velocity, speed, trajectory, etc. from before its speed was set to "0". This is all a little over the top, but it would enable you to make so many more unique ranged weapons with command blocks, because minecraft really lacks in ranged weaponry, only having the bow for long range, and potions for short range. Potions are so costly though, and its so much easier to just use a sword at close range, and less expensive.
I think it might actually be possible to do something like this using 1.13's new commands. You'd take the current velocity of an arrow the instant it is shot (selector @e[type=arrow,tag=!converted] ) using /data get to store its motion in an x, y and z scoreboard, then use /execute store to store the x, y and z motions back in the arrow, but with a different scalar that increases or decreases the velocity. Then another command would give that arrow the tag "converted" so its velocity no longer gets changed further by the first command.
I think all projectiles should have a "speed" tag, that you can change to make it move faster, using a entitydata command, or a just spawning the projectile with the speed tag. idk exactly how much speed each integer would add, lets say its speed is measured in blocks per second. This tag would enable you to make really fast moving arrows (basically simple guns) with this command in a repeating command block: "entitydata @e[type=arrow] {speed:9999}". Thats just a example. Puting the value at a negative would make projectiles instantly follow their path, no delay (hitscan), and putting values at "0" would make the arrow stop midair and fall to the ground, but if the projectile has a no gravity, it would stop and keep its current rotation. Lets say you have a arrow flying, with no gravity, and you set its speed to 0. If you were to then set its speed to "~" it would retain its velocity, speed, trajectory, etc. from before its speed was set to "0". This is all a little over the top, but it would enable you to make so many more unique ranged weapons with command blocks, because minecraft really lacks in ranged weaponry, only having the bow for long range, and potions for short range. Potions are so costly though, and its so much easier to just use a sword at close range, and less expensive.
I think it might actually be possible to do something like this using 1.13's new commands. You'd take the current velocity of an arrow the instant it is shot (selector @e[type=arrow,tag=!converted] ) using /data get to store its motion in an x, y and z scoreboard, then use /execute store to store the x, y and z motions back in the arrow, but with a different scalar that increases or decreases the velocity. Then another command would give that arrow the tag "converted" so its velocity no longer gets changed further by the first command.
im not a genius, thats why i reccomended it.
While this may already be achievable, a simple "speed" tag would be much simpler and more efficient. Support.
Check out my suggestions! Here is one of them: