--- a/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
+++ b/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
@@ -77,8 +_,11 @@
                         }
 
                         DragonFireball dragonFireball = new DragonFireball(level, this.dragon, vec32.normalize());
+                        dragonFireball.preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported
                         dragonFireball.snapTo(d2, d3, d4, 0.0F, 0.0F);
+                        if (new com.destroystokyo.paper.event.entity.EnderDragonShootFireballEvent((org.bukkit.entity.EnderDragon) this.dragon.getBukkitEntity(), (org.bukkit.entity.DragonFireball) dragonFireball.getBukkitEntity()).callEvent()) // Paper - EnderDragon Events
                         level.addFreshEntity(dragonFireball);
+                        else dragonFireball.discard(null); // Paper - EnderDragon Events
                         this.fireballCharge = 0;
                         if (this.currentPath != null) {
                             while (!this.currentPath.isDone()) {
