--- a/net/minecraft/world/entity/monster/Ravager.java
+++ b/net/minecraft/world/entity/monster/Ravager.java
@@ -60,9 +_,9 @@
     private static final int DEFAULT_ATTACK_TICK = 0;
     private static final int DEFAULT_STUN_TICK = 0;
     private static final int DEFAULT_ROAR_TICK = 0;
-    private int attackTick = 0;
-    private int stunnedTick = 0;
-    private int roarTick = 0;
+    public int attackTick = 0;
+    public int stunnedTick = 0;
+    public int roarTick = 0;
 
     public Ravager(EntityType<? extends Ravager> entityType, Level level) {
         super(entityType, level);
@@ -155,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
                 }
             }
 
@@ -252,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
@@ -303,17 +_,17 @@
 
     @Nullable
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.RAVAGER_AMBIENT;
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.RAVAGER_HURT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.RAVAGER_DEATH;
     }
 
