--- a/net/minecraft/world/entity/monster/Ravager.java
+++ b/net/minecraft/world/entity/monster/Ravager.java
@@ -151,12 +_,19 @@
                     BlockState blockState = serverLevel.getBlockState(blockPos);
                     Block block = blockState.getBlock();
                     if (block instanceof LeavesBlock) {
+                        // CraftBukkit start
+                        if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockPos, blockState.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state
+                            continue;
+                        }
+                        // CraftBukkit end
                         flag = serverLevel.destroyBlock(blockPos, true, this) || flag;
                     }
                 }
 
                 if (!flag && this.onGround()) {
+                    if (new com.destroystokyo.paper.event.entity.EntityJumpEvent(getBukkitLivingEntity()).callEvent()) { // Paper - Entity Jump API
                     this.jumpFromGround();
+                    } else { this.setJumping(false); } // Paper - Entity Jump API; setJumping(false) stops a potential loop
                 }
             }
 
@@ -257,7 +_,7 @@
         double d = entity.getX() - this.getX();
         double d1 = entity.getZ() - this.getZ();
         double max = Math.max(d * d + d1 * d1, 0.001);
-        entity.push(d / max * 4.0, 0.2, d1 / max * 4.0);
+        entity.push(d / max * 4.0, 0.2, d1 / max * 4.0, this); // Paper - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent
     }
 
     @Override
