--- 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); } }