--- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
+++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
@@ -26,6 +_,11 @@
 
     @Override
     public boolean canUse() {
+        // Paper start - Fix MC-210802
+        if (!((net.minecraft.server.level.ServerLevel) this.level).chunkSource.chunkMap.anyPlayerCloseEnoughForSpawning(this.mob.chunkPosition())) {
+            return false;
+        }
+        // Paper end
         if (this.mob.getRandom().nextInt(this.mob.isBaby() ? 50 : 1000) != 0) {
             return false;
         } else {
@@ -60,8 +_,9 @@
         this.eatAnimationTick = Math.max(0, this.eatAnimationTick - 1);
         if (this.eatAnimationTick == this.adjustedTickDelay(4)) {
             BlockPos blockPos = this.mob.blockPosition();
-            if (IS_TALL_GRASS.test(this.level.getBlockState(blockPos))) {
-                if (getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
+            final BlockState blockState = this.level.getBlockState(blockPos); // Paper - fix wrong block state
+            if (IS_TALL_GRASS.test(blockState)) { // Paper - fix wrong block state
+                if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state
                     this.level.destroyBlock(blockPos, false);
                 }
 
@@ -69,7 +_,7 @@
             } else {
                 BlockPos blockPos1 = blockPos.below();
                 if (this.level.getBlockState(blockPos1).is(Blocks.GRASS_BLOCK)) {
-                    if (getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
+                    if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state
                         this.level.levelEvent(2001, blockPos1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState()));
                         this.level.setBlock(blockPos1, Blocks.DIRT.defaultBlockState(), 2);
                     }
