package net.minecraft.server; import java.util.Iterator; import java.util.Random; // CraftBukkit start import java.util.List; import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.entity.HumanEntity; // CraftBukkit end public class TileEntityDispenser extends TileEntityLootable { private static final Random a = new Random(); private NonNullList<ItemStack> items; // 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.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 size) { maxStack = size; } // CraftBukkit end public TileEntityDispenser() { this.items = NonNullList.a(9, ItemStack.a); } public int getSize() { return 9; } 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 int o() { this.d((EntityHuman) null); int i = -1; int j = 1; for (int k = 0; k < this.items.size(); ++k) { if (!((ItemStack) this.items.get(k)).isEmpty() && TileEntityDispenser.a.nextInt(j++) == 0) { i = k; } } return i; } public int addItem(ItemStack itemstack) { for (int i = 0; i < this.items.size(); ++i) { if (((ItemStack) this.items.get(i)).isEmpty()) { this.setItem(i, itemstack); return i; } } return -1; } public String getName() { return this.hasCustomName() ? this.o : "container.dispenser"; } public static void a(DataConverterManager dataconvertermanager) { dataconvertermanager.a(DataConverterTypes.BLOCK_ENTITY, (DataInspector) (new DataInspectorItemList(TileEntityDispenser.class, new String[] { "Items"}))); } public void a(NBTTagCompound nbttagcompound) { super.a(nbttagcompound); this.items = NonNullList.a(this.getSize(), ItemStack.a); if (!this.c(nbttagcompound)) { ContainerUtil.b(nbttagcompound, this.items); } if (nbttagcompound.hasKeyOfType("CustomName", 8)) { this.o = nbttagcompound.getString("CustomName"); } } public NBTTagCompound save(NBTTagCompound nbttagcompound) { super.save(nbttagcompound); if (!this.d(nbttagcompound)) { ContainerUtil.a(nbttagcompound, this.items); } if (this.hasCustomName()) { nbttagcompound.setString("CustomName", this.o); } return nbttagcompound; } public int getMaxStackSize() { return maxStack; // CraftBukkit } public String getContainerName() { return "minecraft:dispenser"; } public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { this.d(entityhuman); return new ContainerDispenser(playerinventory, this); } protected NonNullList<ItemStack> q() { return this.items; } }