--- a/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java
+++ b/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java
@@ -61,6 +61,13 @@
                             BlockDoor blockdoor = (BlockDoor) iblockdata.getBlock();
 
                             if (!blockdoor.isOpen(iblockdata)) {
+                                // CraftBukkit start - entities opening doors
+                                org.bukkit.event.entity.EntityInteractEvent event = new org.bukkit.event.entity.EntityInteractEvent(entityliving.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(entityliving.level(), blockposition));
+                                entityliving.level().getCraftServer().getPluginManager().callEvent(event);
+                                if (event.isCancelled()) {
+                                    return false;
+                                }
+                                // CraftBukkit end
                                 blockdoor.setOpen(entityliving, worldserver, iblockdata, blockposition, true);
                             }
 
@@ -76,6 +83,13 @@
                             BlockDoor blockdoor1 = (BlockDoor) iblockdata1.getBlock();
 
                             if (!blockdoor1.isOpen(iblockdata1)) {
+                                // CraftBukkit start - entities opening doors
+                                org.bukkit.event.entity.EntityInteractEvent event = new org.bukkit.event.entity.EntityInteractEvent(entityliving.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(entityliving.level(), blockposition1));
+                                entityliving.level().getCraftServer().getPluginManager().callEvent(event);
+                                if (event.isCancelled()) {
+                                    return false;
+                                }
+                                // CraftBukkit end
                                 blockdoor1.setOpen(entityliving, worldserver, iblockdata1, blockposition1, true);
                                 optional = rememberDoorToClose(memoryaccessor1, optional, worldserver, blockposition1);
                             }
@@ -129,7 +143,7 @@
     }
 
     private static boolean areOtherMobsComingThroughDoor(EntityLiving entityliving, BlockPosition blockposition, Optional<List<EntityLiving>> optional) {
-        return optional.isEmpty() ? false : ((List) optional.get()).stream().filter((entityliving1) -> {
+        return optional.isEmpty() ? false : (optional.get()).stream().filter((entityliving1) -> { // CraftBukkit - decompile error
             return entityliving1.getType() == entityliving.getType();
         }).filter((entityliving1) -> {
             return blockposition.closerToCenterThan(entityliving1.position(), 2.0D);
