/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.core.tile;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
/**
* You better directly extend this class rather than delegating it. Too much interfaces could be a burden.
* <br/> P.S.Notch的脑子绝!对!秀!逗!了!
* @author WeAthFolD
*/
public class TileInventory extends TileEntity implements IInventory {
protected final ItemStack[] inventory;
private final String invName;
public TileInventory(String _invName, int size) {
inventory = new ItemStack[size];
invName = _invName;
}
public ItemStack[] getInventory() {
return inventory;
}
@Override
public int getSizeInventory() {
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
return inventory[slot];
}
@Override
public ItemStack decrStackSize(int slot, int count) {
if (inventory[slot] != null) {
ItemStack itemstack;
if (inventory[slot].stackSize <= count) {
itemstack = inventory[slot];
inventory[slot] = null;
} else {
itemstack = inventory[slot].splitStack(count);
if (inventory[slot].stackSize == 0) {
inventory[slot] = null;
}
}
this.markDirty();
return itemstack;
} else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
if (inventory[slot] != null) {
ItemStack itemstack = inventory[slot];
inventory[slot] = null;
return itemstack;
} else {
return null;
}
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) {
inventory[slot] = stack;
if (stack != null && stack.stackSize > this.getInventoryStackLimit()) {
stack.stackSize = this.getInventoryStackLimit();
}
this.markDirty();
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
NBTTagCompound tag = nbt.getCompoundTag("inventory");
for(int i = 0; i < inventory.length; ++i) {
String name = "" + i;
if(tag.hasKey(name)) {
inventory[i] = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(name));
}
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
NBTTagCompound tag = new NBTTagCompound();
for(int i = 0; i < inventory.length; ++i) {
if(inventory[i] != null) {
NBTTagCompound tag2 = new NBTTagCompound();
inventory[i].writeToNBT(tag2);
tag.setTag("" + i, tag2);
}
}
nbt.setTag("inventory", tag);
}
@Override
public String getInventoryName() {
return invName;
}
@Override
public boolean hasCustomInventoryName() {
return false;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return true;
}
@Override
public void openInventory() {}
@Override
public void closeInventory() {}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return true;
}
}