--- a/net/minecraft/world/entity/boss/enderdragon/phases/EnderDragonPhaseManager.java
+++ b/net/minecraft/world/entity/boss/enderdragon/phases/EnderDragonPhaseManager.java
@@ -23,6 +_,18 @@
                 this.currentPhase.end();
             }
 
+            // CraftBukkit start - Call EnderDragonChangePhaseEvent
+            org.bukkit.event.entity.EnderDragonChangePhaseEvent event = new org.bukkit.event.entity.EnderDragonChangePhaseEvent(
+                (org.bukkit.craftbukkit.entity.CraftEnderDragon) this.dragon.getBukkitEntity(),
+                (this.currentPhase == null) ? null : org.bukkit.craftbukkit.entity.CraftEnderDragon.getBukkitPhase(this.currentPhase.getPhase()),
+                org.bukkit.craftbukkit.entity.CraftEnderDragon.getBukkitPhase(phase)
+            );
+            if (!event.callEvent()) {
+                return;
+            }
+            phase = org.bukkit.craftbukkit.entity.CraftEnderDragon.getMinecraftPhase(event.getNewPhase());
+            // CraftBukkit end
+
             this.currentPhase = this.getPhase((EnderDragonPhase<DragonPhaseInstance>)phase);
             if (!this.dragon.level().isClientSide()) {
                 this.dragon.getEntityData().set(EnderDragon.DATA_PHASE, phase.getId());
