package net.minecraft.server;
import java.util.Iterator;
// CraftBukkit start
import java.util.List;
import org.bukkit.Location;
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.craftbukkit.entity.CraftVillager;
import org.bukkit.entity.HumanEntity;
// CraftBukkit end
public class InventoryMerchant implements IInventory {
private final IMerchant merchant;
private final NonNullList<ItemStack> itemsInSlots;
private final EntityHuman player;
private MerchantRecipe recipe;
public int selectedIndex;
// CraftBukkit start - add fields and methods
public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
private int maxStack = MAX_STACK;
public List<ItemStack> getContents() {
return this.itemsInSlots;
}
public void onOpen(CraftHumanEntity who) {
transaction.add(who);
}
public void onClose(CraftHumanEntity who) {
transaction.remove(who);
}
public List<HumanEntity> getViewers() {
return transaction;
}
public void setMaxStackSize(int i) {
maxStack = i;
}
public org.bukkit.inventory.InventoryHolder getOwner() {
return (merchant instanceof EntityVillager) ? (CraftVillager) ((EntityVillager) this.merchant).getBukkitEntity() : null;
}
@Override
public Location getLocation() {
return (merchant instanceof EntityVillager) ? ((EntityVillager) this.merchant).getBukkitEntity().getLocation() : null;
}
// CraftBukkit end
public InventoryMerchant(EntityHuman entityhuman, IMerchant imerchant) {
this.itemsInSlots = NonNullList.a(3, ItemStack.a);
this.player = entityhuman;
this.merchant = imerchant;
}
public int getSize() {
return this.itemsInSlots.size();
}
public boolean w_() {
Iterator iterator = this.itemsInSlots.iterator();
ItemStack itemstack;
do {
if (!iterator.hasNext()) {
return true;
}
itemstack = (ItemStack) iterator.next();
} while (itemstack.isEmpty());
return false;
}
public ItemStack getItem(int i) {
return (ItemStack) this.itemsInSlots.get(i);
}
public ItemStack splitStack(int i, int j) {
ItemStack itemstack = (ItemStack) this.itemsInSlots.get(i);
if (i == 2 && !itemstack.isEmpty()) {
return ContainerUtil.a(this.itemsInSlots, i, itemstack.getCount());
} else {
ItemStack itemstack1 = ContainerUtil.a(this.itemsInSlots, i, j);
if (!itemstack1.isEmpty() && this.e(i)) {
this.i();
}
return itemstack1;
}
}
private boolean e(int i) {
return i == 0 || i == 1;
}
public ItemStack splitWithoutUpdate(int i) {
return ContainerUtil.a(this.itemsInSlots, i);
}
public void setItem(int i, ItemStack itemstack) {
this.itemsInSlots.set(i, itemstack);
if (!itemstack.isEmpty() && itemstack.getCount() > this.getMaxStackSize()) {
itemstack.setCount(this.getMaxStackSize());
}
if (this.e(i)) {
this.i();
}
}
public String getName() {
return "mob.villager";
}
public boolean hasCustomName() {
return false;
}
public IChatBaseComponent getScoreboardDisplayName() {
return (IChatBaseComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatMessage(this.getName(), new Object[0]));
}
public int getMaxStackSize() {
return maxStack; // CraftBukkit
}
public boolean a(EntityHuman entityhuman) {
return this.merchant.getTrader() == entityhuman;
}
public void startOpen(EntityHuman entityhuman) {}
public void closeContainer(EntityHuman entityhuman) {}
public boolean b(int i, ItemStack itemstack) {
return true;
}
public void update() {
this.i();
}
public void i() {
this.recipe = null;
ItemStack itemstack = (ItemStack) this.itemsInSlots.get(0);
ItemStack itemstack1 = (ItemStack) this.itemsInSlots.get(1);
if (itemstack.isEmpty()) {
itemstack = itemstack1;
itemstack1 = ItemStack.a;
}
if (itemstack.isEmpty()) {
this.setItem(2, ItemStack.a);
} else {
MerchantRecipeList merchantrecipelist = this.merchant.getOffers(this.player);
if (merchantrecipelist != null) {
MerchantRecipe merchantrecipe = merchantrecipelist.a(itemstack, itemstack1, this.selectedIndex);
if (merchantrecipe != null && !merchantrecipe.h()) {
this.recipe = merchantrecipe;
this.setItem(2, merchantrecipe.getBuyItem3().cloneItemStack());
} else if (!itemstack1.isEmpty()) {
merchantrecipe = merchantrecipelist.a(itemstack1, itemstack, this.selectedIndex);
if (merchantrecipe != null && !merchantrecipe.h()) {
this.recipe = merchantrecipe;
this.setItem(2, merchantrecipe.getBuyItem3().cloneItemStack());
} else {
this.setItem(2, ItemStack.a);
}
} else {
this.setItem(2, ItemStack.a);
}
}
this.merchant.a(this.getItem(2));
}
}
public MerchantRecipe getRecipe() {
return this.recipe;
}
public void d(int i) {
this.selectedIndex = i;
this.i();
}
public int getProperty(int i) {
return 0;
}
public void setProperty(int i, int j) {}
public int h() {
return 0;
}
public void clear() {
this.itemsInSlots.clear();
}
}