package com.bergerkiller.bukkit.common.inventory;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import com.bergerkiller.bukkit.common.bases.IInventoryBase;
import com.bergerkiller.bukkit.common.proxies.CraftInventoryProxy;
import com.bergerkiller.bukkit.common.utils.ItemUtil;
/**
* A basic implementation of Inventory that excludes the getting and setting of item content information.
* Uses a backing CraftInventory to perform all utility methods provided by Bukkit.
* This ensures that the functionality is up-to-date with the latest bugfixes and additions.
*/
public abstract class InventoryBase implements Inventory {
private final CraftInventoryProxy proxy = new CraftInventoryProxy(new IInventoryBase(), this);
@Override
public abstract int getSize();
@Override
public abstract ItemStack getItem(int index);
@Override
public abstract void setItem(int index, ItemStack item);
@Override
public ItemStack[] getContents() {
// Overridden because the NMS IInventory is used in CraftInventory
final int size = getSize();
ItemStack[] items = new ItemStack[size];
for (int i = 0; i < size; i++) {
items[i] = ItemUtil.cloneItem(getItem(i));
}
return items;
}
@Override
public void setContents(ItemStack[] items) {
// Overridden because the NMS IInventory is used in CraftInventory
final int size = getSize();
if (size < items.length) {
throw new IllegalArgumentException("Invalid inventory size; expected " + size + " or less");
}
for (int i = 0; i < size; i++) {
setItem(i, i >= items.length ? null : items[i]);
}
}
@Override
public InventoryType getType() {
return InventoryType.CHEST;
}
@Override
public String getName() {
return getClass().getSimpleName();
}
@Override
public String getTitle() {
return getName();
}
@Override
public InventoryHolder getHolder() {
return null;
}
@Override
public List<HumanEntity> getViewers() {
return proxy.super_getViewers();
}
@Override
public int getMaxStackSize() {
return proxy.super_getMaxStackSize();
}
@Override
public void setMaxStackSize(int size) {
proxy.super_setMaxStackSize(size);
}
@Override
public HashMap<Integer, ItemStack> addItem(ItemStack... items) throws IllegalArgumentException {
return proxy.super_addItem(items);
}
@Override
public HashMap<Integer, ? extends ItemStack> all(int materialId) {
return proxy.super_all(materialId);
}
@Override
public HashMap<Integer, ? extends ItemStack> all(Material material) throws IllegalArgumentException {
return proxy.super_all(material);
}
@Override
public HashMap<Integer, ? extends ItemStack> all(ItemStack item) {
return proxy.super_all(item);
}
@Override
public void clear() {
proxy.super_clear();
}
@Override
public void clear(int index) {
proxy.super_clear(index);
}
@Override
public boolean contains(int materialId) {
return proxy.super_contains(materialId);
}
@Override
public boolean contains(Material material) throws IllegalArgumentException {
return proxy.super_contains(material);
}
@Override
public boolean contains(ItemStack item) {
return proxy.super_contains(item);
}
@Override
public boolean contains(int materialId, int amount) {
return proxy.super_contains(materialId, amount);
}
@Override
public boolean contains(Material material, int amount) throws IllegalArgumentException {
return proxy.super_contains(material, amount);
}
@Override
public boolean contains(ItemStack item, int amount) {
return proxy.super_contains(item, amount);
}
@Override
public boolean containsAtLeast(ItemStack item, int amount) {
return proxy.super_containsAtLeast(item, amount);
}
@Override
public int first(int materialId) {
return proxy.super_first(materialId);
}
@Override
public int first(Material material) throws IllegalArgumentException {
return proxy.super_first(material);
}
@Override
public int first(ItemStack item) {
return proxy.super_first(item);
}
@Override
public int firstEmpty() {
return proxy.super_firstEmpty();
}
@Override
public ListIterator<ItemStack> iterator() {
return proxy.super_iterator();
}
@Override
public ListIterator<ItemStack> iterator(int index) {
return proxy.super_iterator(index);
}
@Override
public void remove(int materialId) {
proxy.super_remove(materialId);
}
@Override
public void remove(Material material) throws IllegalArgumentException {
proxy.super_remove(material);
}
@Override
public void remove(ItemStack item) {
proxy.super_remove(item);
}
@Override
public HashMap<Integer, ItemStack> removeItem(ItemStack... items) throws IllegalArgumentException {
return proxy.super_removeItem(items);
}
@Override
public int hashCode() {
return proxy.super_hashCode();
}
@Override
public boolean equals(Object obj) {
return proxy.super_equals(obj);
}
@Override
public String toString() {
return proxy.super_toString();
}
}