package micdoodle8.mods.galacticraft.core.energy.tile;
import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumFacing;
public abstract class TileBaseElectricBlockWithInventory extends TileBaseElectricBlock implements IInventoryDefaults
{
public ItemStack[] readStandardItemsFromNBT(NBTTagCompound nbt)
{
final NBTTagList var2 = nbt.getTagList("Items", 10);
int length = this.getSizeInventory();
ItemStack[] result = new ItemStack[length];
for (int var3 = 0; var3 < var2.tagCount(); ++var3)
{
final NBTTagCompound var4 = var2.getCompoundTagAt(var3);
final int var5 = var4.getByte("Slot") & 255;
if (var5 < length)
{
result[var5] = ItemStack.loadItemStackFromNBT(var4);
}
}
return result;
}
public void writeStandardItemsToNBT(NBTTagCompound nbt)
{
final NBTTagList list = new NBTTagList();
int length = this.getSizeInventory();
ItemStack containingItems[] = this.getContainingItems();
for (int var3 = 0; var3 < length; ++var3)
{
if (containingItems[var3] != null)
{
final NBTTagCompound var4 = new NBTTagCompound();
var4.setByte("Slot", (byte) var3);
containingItems[var3].writeToNBT(var4);
list.appendTag(var4);
}
}
nbt.setTag("Items", list);
}
@Override
public int getSizeInventory()
{
return this.getContainingItems().length;
}
@Override
public ItemStack getStackInSlot(int par1)
{
return this.getContainingItems()[par1];
}
@Override
public ItemStack decrStackSize(int par1, int par2)
{
ItemStack containingItems[] = this.getContainingItems();
if (containingItems[par1] != null)
{
ItemStack var3;
if (containingItems[par1].stackSize <= par2)
{
var3 = containingItems[par1];
containingItems[par1] = null;
this.markDirty();
return var3;
}
else
{
var3 = containingItems[par1].splitStack(par2);
if (containingItems[par1].stackSize == 0)
{
containingItems[par1] = null;
}
this.markDirty();
return var3;
}
}
else
{
return null;
}
}
@Override
public ItemStack removeStackFromSlot(int par1)
{
ItemStack containingItems[] = this.getContainingItems();
if (containingItems[par1] != null)
{
final ItemStack var2 = containingItems[par1];
containingItems[par1] = null;
this.markDirty();
return var2;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
{
ItemStack containingItems[] = this.getContainingItems();
containingItems[par1] = par2ItemStack;
if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
{
par2ItemStack.stackSize = this.getInventoryStackLimit();
}
this.markDirty();
}
@Override
public int getInventoryStackLimit()
{
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
{
return this.worldObj.getTileEntity(this.getPos()) == this && par1EntityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D;
}
@Override
public EnumFacing getElectricInputDirection()
{
return EnumFacing.getHorizontal(((this.getBlockMetadata() & 3) + 1) % 4);
}
@Override
public ItemStack getBatteryInSlot()
{
return this.getStackInSlot(0);
}
/*
* Must be overridden by identical code, to get the actual containingItems
*/
abstract protected ItemStack[] getContainingItems();
}