--- a/net/minecraft/world/entity/monster/SpellcasterIllager.java
+++ b/net/minecraft/world/entity/monster/SpellcasterIllager.java
@@ -65,7 +_,7 @@
         this.entityData.set(DATA_SPELL_CASTING_ID, (byte)currentSpell.id);
     }
 
-    protected SpellcasterIllager.IllagerSpell getCurrentSpell() {
+    public SpellcasterIllager.IllagerSpell getCurrentSpell() {
         return !this.level().isClientSide() ? this.currentSpell : SpellcasterIllager.IllagerSpell.byId(this.entityData.get(DATA_SPELL_CASTING_ID));
     }
 
@@ -119,7 +_,7 @@
 
     protected abstract SoundEvent getCastingSoundEvent();
 
-    protected static enum IllagerSpell {
+    public static enum IllagerSpell {
         NONE(0, 0.0, 0.0, 0.0),
         SUMMON_VEX(1, 0.7, 0.7, 0.8),
         FANGS(2, 0.4, 0.3, 0.35),
@@ -210,6 +_,11 @@
         public void tick() {
             this.attackWarmupDelay--;
             if (this.attackWarmupDelay == 0) {
+                // CraftBukkit start
+                if (!org.bukkit.craftbukkit.event.CraftEventFactory.handleEntitySpellCastEvent(SpellcasterIllager.this, this.getSpell())) {
+                    return;
+                }
+                // CraftBukkit end
                 this.performSpellCasting();
                 SpellcasterIllager.this.playSound(SpellcasterIllager.this.getCastingSoundEvent(), 1.0F, 1.0F);
             }
