package net.minecraft.server;
import javax.annotation.Nullable;
public class TileEntityLectern extends TileEntity implements Clearable, ITileInventory {
public final IInventory inventory = new IInventory() {
@Override
public int getSize() {
return 1;
}
@Override
public boolean isEmpty() {
return TileEntityLectern.this.book.isEmpty();
}
@Override
public ItemStack getItem(int i) {
return i == 0 ? TileEntityLectern.this.book : ItemStack.a;
}
@Override
public ItemStack splitStack(int i, int j) {
if (i == 0) {
ItemStack itemstack = TileEntityLectern.this.book.cloneAndSubtract(j);
if (TileEntityLectern.this.book.isEmpty()) {
TileEntityLectern.this.k();
}
return itemstack;
} else {
return ItemStack.a;
}
}
@Override
public ItemStack splitWithoutUpdate(int i) {
if (i == 0) {
ItemStack itemstack = TileEntityLectern.this.book;
TileEntityLectern.this.book = ItemStack.a;
TileEntityLectern.this.k();
return itemstack;
} else {
return ItemStack.a;
}
}
@Override
public void setItem(int i, ItemStack itemstack) {}
@Override
public int getMaxStackSize() {
return 1;
}
@Override
public void update() {
TileEntityLectern.this.update();
}
@Override
public boolean a(EntityHuman entityhuman) {
return TileEntityLectern.this.world.getTileEntity(TileEntityLectern.this.position) != TileEntityLectern.this ? false : (entityhuman.g((double) TileEntityLectern.this.position.getX() + 0.5D, (double) TileEntityLectern.this.position.getY() + 0.5D, (double) TileEntityLectern.this.position.getZ() + 0.5D) > 64.0D ? false : TileEntityLectern.this.hasBook());
}
@Override
public boolean b(int i, ItemStack itemstack) {
return false;
}
@Override
public void clear() {}
};
private final IContainerProperties containerProperties = new IContainerProperties() {
@Override
public int getProperty(int i) {
return i == 0 ? TileEntityLectern.this.page : 0;
}
@Override
public void setProperty(int i, int j) {
if (i == 0) {
TileEntityLectern.this.setPage(j);
}
}
@Override
public int a() {
return 1;
}
};
private ItemStack book;
private int page;
private int maxPage;
public TileEntityLectern() {
super(TileEntityTypes.LECTERN);
this.book = ItemStack.a;
}
public ItemStack getBook() {
return this.book;
}
public boolean hasBook() {
Item item = this.book.getItem();
return item == Items.WRITABLE_BOOK || item == Items.WRITTEN_BOOK;
}
public void setBook(ItemStack itemstack) {
this.a(itemstack, (EntityHuman) null);
}
private void k() {
this.page = 0;
this.maxPage = 0;
BlockLectern.setHasBook(this.getWorld(), this.getPosition(), this.getBlock(), false);
}
public void a(ItemStack itemstack, @Nullable EntityHuman entityhuman) {
this.book = this.b(itemstack, entityhuman);
this.page = 0;
this.maxPage = ItemWrittenBook.j(this.book);
this.update();
}
public void setPage(int i) {
int j = MathHelper.clamp(i, 0, this.maxPage - 1);
if (j != this.page) {
this.page = j;
this.update();
BlockLectern.a(this.getWorld(), this.getPosition(), this.getBlock());
}
}
public int getPage() {
return this.page;
}
public int j() {
float f = this.maxPage > 1 ? (float) this.getPage() / ((float) this.maxPage - 1.0F) : 1.0F;
return MathHelper.d(f * 14.0F) + (this.hasBook() ? 1 : 0);
}
private ItemStack b(ItemStack itemstack, @Nullable EntityHuman entityhuman) {
if (this.world instanceof WorldServer && itemstack.getItem() == Items.WRITTEN_BOOK) {
ItemWrittenBook.a(itemstack, this.a(entityhuman), entityhuman);
}
return itemstack;
}
private CommandListenerWrapper a(@Nullable EntityHuman entityhuman) {
String s;
Object object;
if (entityhuman == null) {
s = "Lectern";
object = new ChatComponentText("Lectern");
} else {
s = entityhuman.getDisplayName().getString();
object = entityhuman.getScoreboardDisplayName();
}
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);
}
@Override
public boolean isFilteredNBT() {
return true;
}
@Override
public void load(NBTTagCompound nbttagcompound) {
super.load(nbttagcompound);
if (nbttagcompound.hasKeyOfType("Book", 10)) {
this.book = this.b(ItemStack.a(nbttagcompound.getCompound("Book")), (EntityHuman) null);
} else {
this.book = ItemStack.a;
}
this.maxPage = ItemWrittenBook.j(this.book);
this.page = MathHelper.clamp(nbttagcompound.getInt("Page"), 0, this.maxPage - 1);
}
@Override
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
super.save(nbttagcompound);
if (!this.getBook().isEmpty()) {
nbttagcompound.set("Book", this.getBook().save(new NBTTagCompound()));
nbttagcompound.setInt("Page", this.page);
}
return nbttagcompound;
}
@Override
public void clear() {
this.setBook(ItemStack.a);
}
@Override
public Container createMenu(int i, PlayerInventory playerinventory, EntityHuman entityhuman) {
return new ContainerLectern(i, this.inventory, this.containerProperties);
}
@Override
public IChatBaseComponent getScoreboardDisplayName() {
return new ChatMessage("container.lectern", new Object[0]);
}
}