--- a/net/minecraft/world/inventory/ContainerLectern.java
+++ b/net/minecraft/world/inventory/ContainerLectern.java
@@ -5,8 +5,33 @@
 import net.minecraft.world.entity.player.EntityHuman;
 import net.minecraft.world.item.ItemStack;
 
+// CraftBukkit start
+import net.minecraft.world.level.block.entity.TileEntityLectern.LecternInventory;
+import net.minecraft.world.entity.player.PlayerInventory;
+import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.inventory.CraftInventoryLectern;
+import org.bukkit.craftbukkit.inventory.CraftInventoryView;
+import org.bukkit.entity.Player;
+import org.bukkit.event.player.PlayerTakeLecternBookEvent;
+// CraftBukkit end
+
 public class ContainerLectern extends Container {
 
+    // CraftBukkit start
+    private CraftInventoryView bukkitEntity = null;
+    private Player player;
+
+    @Override
+    public CraftInventoryView getBukkitView() {
+        if (bukkitEntity != null) {
+            return bukkitEntity;
+        }
+
+        CraftInventoryLectern inventory = new CraftInventoryLectern(this.lectern);
+        bukkitEntity = new CraftInventoryView(this.player, inventory, this);
+        return bukkitEntity;
+    }
+    // CraftBukkit end
     private static final int DATA_COUNT = 1;
     private static final int SLOT_COUNT = 1;
     public static final int BUTTON_PREV_PAGE = 1;
@@ -16,11 +41,13 @@
     private final IInventory lectern;
     private final IContainerProperties lecternData;
 
-    public ContainerLectern(int i) {
-        this(i, new InventorySubcontainer(1), new ContainerProperties(1));
+    // CraftBukkit start - add player
+    public ContainerLectern(int i, PlayerInventory playerinventory) {
+        this(i, new InventorySubcontainer(1), new ContainerProperties(1), playerinventory);
     }
 
-    public ContainerLectern(int i, IInventory iinventory, IContainerProperties icontainerproperties) {
+    public ContainerLectern(int i, IInventory iinventory, IContainerProperties icontainerproperties, PlayerInventory playerinventory) {
+        // CraftBukkit end
         super(Containers.LECTERN, i);
         checkContainerSize(iinventory, 1);
         checkContainerDataCount(icontainerproperties, 1);
@@ -34,6 +61,7 @@
             }
         });
         this.addDataSlots(icontainerproperties);
+        player = (Player) playerinventory.player.getBukkitEntity(); // CraftBukkit
     }
 
     @Override
@@ -59,6 +87,13 @@
                         return false;
                     }
 
+                    // CraftBukkit start - Event for taking the book
+                    PlayerTakeLecternBookEvent event = new PlayerTakeLecternBookEvent(player, ((CraftInventoryLectern) getBukkitView().getTopInventory()).getHolder());
+                    Bukkit.getServer().getPluginManager().callEvent(event);
+                    if (event.isCancelled()) {
+                        return false;
+                    }
+                    // CraftBukkit end
                     ItemStack itemstack = this.lectern.removeItemNoUpdate(0);
 
                     this.lectern.setChanged();
@@ -86,6 +121,8 @@
 
     @Override
     public boolean stillValid(EntityHuman entityhuman) {
+        if (lectern instanceof LecternInventory && !((LecternInventory) lectern).getLectern().hasBook()) return false; // CraftBukkit
+        if (!this.checkReachable) return true; // CraftBukkit
         return this.lectern.stillValid(entityhuman);
     }
 
