package net.minecraft.server; import com.google.common.collect.Lists; import java.util.Iterator; import java.util.List; // CraftBukkit start import java.util.List; import org.bukkit.Location; import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.entity.HumanEntity; // CraftBukkit end public class InventorySubcontainer implements IInventory { private String a; private final int b; public final NonNullList<ItemStack> items; private List<IInventoryListener> d; private boolean e; // CraftBukkit start - add fields and methods public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>(); private int maxStack = MAX_STACK; protected org.bukkit.inventory.InventoryHolder bukkitOwner; public List<ItemStack> getContents() { return this.items; } 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 bukkitOwner; } @Override public Location getLocation() { return null; } public InventorySubcontainer(String s, boolean flag, int i) { this(s, flag, i, null); } public InventorySubcontainer(String s, boolean flag, int i, org.bukkit.inventory.InventoryHolder owner) { this.bukkitOwner = owner; // CraftBukkit end this.a = s; this.e = flag; this.b = i; this.items = NonNullList.a(i, ItemStack.a); } public void a(IInventoryListener iinventorylistener) { if (this.d == null) { this.d = Lists.newArrayList(); } this.d.add(iinventorylistener); } public void b(IInventoryListener iinventorylistener) { this.d.remove(iinventorylistener); } public ItemStack getItem(int i) { return i >= 0 && i < this.items.size() ? (ItemStack) this.items.get(i) : ItemStack.a; } public ItemStack splitStack(int i, int j) { ItemStack itemstack = ContainerUtil.a(this.items, i, j); if (!itemstack.isEmpty()) { this.update(); } return itemstack; } public ItemStack a(ItemStack itemstack) { ItemStack itemstack1 = itemstack.cloneItemStack(); for (int i = 0; i < this.b; ++i) { ItemStack itemstack2 = this.getItem(i); if (itemstack2.isEmpty()) { this.setItem(i, itemstack1); this.update(); return ItemStack.a; } if (ItemStack.c(itemstack2, itemstack1)) { int j = Math.min(this.getMaxStackSize(), itemstack2.getMaxStackSize()); int k = Math.min(itemstack1.getCount(), j - itemstack2.getCount()); if (k > 0) { itemstack2.add(k); itemstack1.subtract(k); if (itemstack1.isEmpty()) { this.update(); return ItemStack.a; } } } } if (itemstack1.getCount() != itemstack.getCount()) { this.update(); } return itemstack1; } public ItemStack splitWithoutUpdate(int i) { ItemStack itemstack = (ItemStack) this.items.get(i); if (itemstack.isEmpty()) { return ItemStack.a; } else { this.items.set(i, ItemStack.a); return itemstack; } } public void setItem(int i, ItemStack itemstack) { this.items.set(i, itemstack); if (!itemstack.isEmpty() && itemstack.getCount() > this.getMaxStackSize()) { itemstack.setCount(this.getMaxStackSize()); } this.update(); } public int getSize() { return this.b; } public boolean w_() { Iterator iterator = this.items.iterator(); ItemStack itemstack; do { if (!iterator.hasNext()) { return true; } itemstack = (ItemStack) iterator.next(); } while (itemstack.isEmpty()); return false; } public String getName() { return this.a; } public boolean hasCustomName() { return this.e; } public void a(String s) { this.e = true; this.a = s; } public IChatBaseComponent getScoreboardDisplayName() { return (IChatBaseComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatMessage(this.getName(), new Object[0])); } public int getMaxStackSize() { return 64; } public void update() { if (this.d != null) { for (int i = 0; i < this.d.size(); ++i) { ((IInventoryListener) this.d.get(i)).a(this); } } } public boolean a(EntityHuman entityhuman) { return true; } public void startOpen(EntityHuman entityhuman) {} public void closeContainer(EntityHuman entityhuman) {} public boolean b(int i, ItemStack itemstack) { return true; } public int getProperty(int i) { return 0; } public void setProperty(int i, int j) {} public int h() { return 0; } public void clear() { this.items.clear(); } }