--- a/net/minecraft/server/ContainerLectern.java
+++ b/net/minecraft/server/ContainerLectern.java
@@ -1,15 +1,40 @@
 package net.minecraft.server;
 
+// CraftBukkit start
+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.inventory);
+        bukkitEntity = new CraftInventoryView(this.player, inventory, this);
+        return bukkitEntity;
+    }
+    // CraftBukkit end
     private final IInventory inventory;
     private final IContainerProperties containerProperties;
 
-    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);
         a(iinventory, 1);
         a(icontainerproperties, 1);
@@ -23,6 +48,7 @@
             }
         });
         this.a(icontainerproperties);
+        player = (Player) playerinventory.player.getBukkitEntity(); // CraftBukkit
     }
 
     @Override
@@ -48,6 +74,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.inventory.splitWithoutUpdate(0);
 
                     this.inventory.update();
@@ -70,6 +103,7 @@
 
     @Override
     public boolean canUse(EntityHuman entityhuman) {
+        if (!this.checkReachable) return true; // CraftBukkit
         return this.inventory.a(entityhuman);
     }
 }