package shedar.mods.ic2.nuclearcontrol;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardBase;
import shedar.mods.ic2.nuclearcontrol.items.ItemRemoteMonitor;
public class InventoryItem implements IInventory, ISlotItemFilter{
private String name = "Inventory Item";
public static final int INV_SIZE = 1;
private ItemStack[] inventory = new ItemStack[INV_SIZE];
/** Provides NBT Tag Compound to reference */
private final ItemStack invItem;
public InventoryItem(ItemStack stack) {
this.invItem = stack;
if (stack != null) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
readFromNBT(stack.getTagCompound());
}
}
@Override
public int getSizeInventory() {
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
return inventory[slot];
}
@Override
public ItemStack decrStackSize(int slot, int amount) {
ItemStack stack = getStackInSlot(slot);
if(stack != null)
{
if(stack.stackSize > amount)
{
stack = stack.splitStack(amount);
markDirty();
}
else
{
setInventorySlotContents(slot, null);
}
}
return stack;
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
ItemStack stack = getStackInSlot(slot);
if(stack != null)
{
setInventorySlotContents(slot, null);
}
return stack;
}
@Override
public void setInventorySlotContents(int slot, ItemStack itemstack) {
this.inventory[slot] = itemstack;
if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit())
{
itemstack.stackSize = this.getInventoryStackLimit();
}
markDirty();
}
@Override
public String getInventoryName() {
return name;
}
@Override
public boolean hasCustomInventoryName() {
return name.length() > 0;
}
@Override
public int getInventoryStackLimit() {
return 1;
}
@Override
public void markDirty() {
for (int i = 0; i < getSizeInventory(); ++i)
{
if (getStackInSlot(i) != null && getStackInSlot(i).stackSize == 0)
inventory[i] = null;
}
writeToNBT(invItem.getTagCompound());
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return player.getHeldItem() == invItem;
}
@Override
public void openInventory() {}
@Override
public void closeInventory() {
markDirty();
}
@Override
public boolean isItemValid(int slotIndex, ItemStack itemStack) {
return !(itemStack.getItem() instanceof ItemRemoteMonitor) && (itemStack.getItem() instanceof ItemCardBase);
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack itemstack) {
return !(itemstack.getItem() instanceof ItemRemoteMonitor) && (itemstack.getItem() instanceof ItemCardBase);
}
public void readFromNBT(NBTTagCompound compound) {
NBTTagList items = compound.getTagList("ItemInventory", compound.getId());
for (int i = 0; i < items.tagCount(); ++i) {
NBTTagCompound item = items.getCompoundTagAt(i);
byte slot = item.getByte("Slot");
if (slot >= 0 && slot < getSizeInventory()) {
inventory[slot] = ItemStack.loadItemStackFromNBT(item);
}
}
}
public void writeToNBT(NBTTagCompound tagcompound)
{
NBTTagList items = new NBTTagList();
for (int i = 0; i < getSizeInventory(); ++i)
{
if (getStackInSlot(i) != null)
{
NBTTagCompound item = new NBTTagCompound();
item.setInteger("Slot", i);
getStackInSlot(i).writeToNBT(item);
items.appendTag(item);
}
}
tagcompound.setTag("ItemInventory", items);
}
}