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