Row 1
1. [impulse] /scoreboard objectives add pos dummy
Row 2
2. [impulse] /scoreboard objectives add throwArrow minecraft.used:minecraft.arrow
Row 3
3. [impulse] /give @p minecraft:arrow[minecraft:custom_data={throw:1},minecraft:consumable={animation:"trident",sound:"entity.parrot.step",has_consume_particles:false,on_consume_effects:[{type:"minecraft:play_sound",sound:"entity.arrow.shoot"}]}]
Row 4
4. [repeat] /execute as @a[nbt={SelectedItem:{components:{"minecraft:custom_data":{throw:1}}}}] at @s if score @s throwArrow matches 1.. run summon minecraft:arrow ^ ^1 ^.5 {Tags:["throw"]}
5. [chain] /execute as @a[nbt={SelectedItem:{components:{"minecraft:custom_data":{throw:1}}}}] at @s if score @s throwArrow matches 1.. run summon minecraft:marker ^ ^1 ^5 {Tags:["throwDest"]}
6. [chain] /execute as @a[nbt={SelectedItem:{components:{"minecraft:custom_data":{throw:1}}}}] at @s if score @s throwArrow matches 1.. run scoreboard players reset @s throwArrow
Row 5
7. [repeat] /execute as @e[tag=throw] at @s store result score arrowX pos run data get entity @s Pos[0] 1000
8. [chain] /execute as @e[tag=throw] at @s store result score arrowY pos run data get entity @s Pos[1] 1000
9. [chain] /execute as @e[tag=throw] at @s store result score arrowZ pos run data get entity @s Pos[2] 1000
10. [chain] /execute as @e[tag=throw] at @s store result score arrowDestX pos as @e[tag=throwDest,limit=1,sort=nearest] run data get entity @s Pos[0] 1000
11. [chain] /execute as @e[tag=throw] at @s store result score arrowDestY pos as @e[tag=throwDest,limit=1,sort=nearest] run data get entity @s Pos[1] 1000
12. [chain] /execute as @e[tag=throw] at @s store result score arrowDestZ pos as @e[tag=throwDest,limit=1,sort=nearest] run data get entity @s Pos[2] 1000
13. [chain] /scoreboard players operation arrowDestX pos -= arrowX pos
14. [chain] /scoreboard players operation arrowDestY pos -= arrowY pos
15. [chain] /scoreboard players operation arrowDestZ pos -= arrowZ pos
16. [chain] /execute as @e[tag=throw] at @s if entity @e[tag=throwDest,distance=..5] store result entity @s Motion[0] double .001 run scoreboard players get arrowDestX pos
17. [chain] /execute as @e[tag=throw] at @s if entity @e[tag=throwDest,distance=..5] store result entity @s Motion[1] double .001 run scoreboard players get arrowDestY pos
18. [chain] /execute as @e[tag=throw] at @s if entity @e[tag=throwDest,distance=..5] store result entity @s Motion[2] double .001 run scoreboard players get arrowDestZ pos
19. [chain] /execute as @e[tag=throw] at @s run kill @e[tag=throwDest,distance=..5,limit=1,sort=nearest]
20. [chain] /execute as @e[tag=throw] at @s run tag @s remove throw