--- a/net/minecraft/server/TileEntityLectern.java +++ b/net/minecraft/server/TileEntityLectern.java @@ -1,10 +1,63 @@ package net.minecraft.server; import javax.annotation.Nullable; +// CraftBukkit start +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.bukkit.Location; +import org.bukkit.block.Lectern; +import org.bukkit.craftbukkit.block.CraftBlock; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; +import org.bukkit.entity.HumanEntity; +import org.bukkit.inventory.InventoryHolder; +// CraftBukkit end -public class TileEntityLectern extends TileEntity implements Clearable, ITileInventory { +public class TileEntityLectern extends TileEntity implements Clearable, ITileInventory, ICommandListener { // CraftBukkit - ICommandListener + + // CraftBukkit start - add fields and methods + public final IInventory inventory = new LecternInventory(); + public class LecternInventory implements IInventory { + + public List transaction = new ArrayList<>(); + private int maxStack = 1; + + @Override + public List getContents() { + return Arrays.asList(book); + } + + @Override + public void onOpen(CraftHumanEntity who) { + transaction.add(who); + } + + @Override + public void onClose(CraftHumanEntity who) { + transaction.remove(who); + } + + @Override + public List getViewers() { + return transaction; + } + + @Override + public void setMaxStackSize(int i) { + maxStack = i; + } + + @Override + public Location getLocation() { + return new Location(world.getWorld(), position.getX(), position.getY(), position.getZ()); + } + + @Override + public InventoryHolder getOwner() { + return (Lectern) TileEntityLectern.this.getOwner(); + } + // CraftBukkit end - public final IInventory inventory = new IInventory() { @Override public int getSize() { return 1; @@ -49,11 +102,20 @@ } @Override - public void setItem(int i, ItemStack itemstack) {} + // CraftBukkit start + public void setItem(int i, ItemStack itemstack) { + if (i == 0) { + TileEntityLectern.this.setBook(itemstack); + if (TileEntityLectern.this.getWorld() != null) { + BlockLectern.setHasBook(TileEntityLectern.this.getWorld(), TileEntityLectern.this.getPosition(), TileEntityLectern.this.getBlock(), TileEntityLectern.this.hasBook()); + } + } + } + // CraftBukkit end @Override public int getMaxStackSize() { - return 1; + return maxStack; // CraftBukkit } @Override @@ -135,7 +197,7 @@ if (j != this.page) { this.page = j; this.update(); - BlockLectern.a(this.getWorld(), this.getPosition(), this.getBlock()); + if (this.world != null) BlockLectern.a(this.getWorld(), this.getPosition(), this.getBlock()); // CraftBukkit } } @@ -158,6 +220,32 @@ return itemstack; } + // CraftBukkit start + @Override + public void sendMessage(IChatBaseComponent ichatbasecomponent) { + } + + @Override + public org.bukkit.command.CommandSender getBukkitSender(CommandListenerWrapper wrapper) { + return wrapper.getEntity() != null ? wrapper.getEntity().getBukkitSender(wrapper) : new org.bukkit.craftbukkit.command.CraftBlockCommandSender(wrapper, this); + } + + @Override + public boolean shouldSendSuccess() { + return false; + } + + @Override + public boolean shouldSendFailure() { + return false; + } + + @Override + public boolean shouldBroadcastCommands() { + return false; + } + + // CraftBukkit end private CommandListenerWrapper a(@Nullable EntityHuman entityhuman) { String s; Object object; @@ -172,7 +260,8 @@ Vec3D vec3d = new Vec3D((double) this.position.getX() + 0.5D, (double) this.position.getY() + 0.5D, (double) this.position.getZ() + 0.5D); - return new CommandListenerWrapper(ICommandListener.DUMMY, vec3d, Vec2F.a, (WorldServer) this.world, 2, s, (IChatBaseComponent) object, this.world.getMinecraftServer(), entityhuman); + // CraftBukkit - this + return new CommandListenerWrapper(this, vec3d, Vec2F.a, (WorldServer) this.world, 2, s, (IChatBaseComponent) object, this.world.getMinecraftServer(), entityhuman); } @Override @@ -211,7 +300,7 @@ @Override public Container createMenu(int i, PlayerInventory playerinventory, EntityHuman entityhuman) { - return new ContainerLectern(i, this.inventory, this.containerProperties); + return new ContainerLectern(i, this.inventory, this.containerProperties, playerinventory); // CraftBukkit } @Override