blob: a8bca8d606b79ebf18ef15d57fb43d78c842bfcc [file] [log] [blame] [raw]
package com.legacy.aether.tileentity.util;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
public abstract class AetherTileEntity extends TileEntity implements ISidedInventory, IInventory {
private String name = "generic";
private String customTileName = null;
public AetherTileEntity(String name) {
this.name = name;
}
public abstract List<ItemStack> getTileInventory();
@Override
public String getInventoryName() {
return this.hasCustomInventoryName() ? this.customTileName : this.name;
}
@Override
public boolean hasCustomInventoryName() {
return this.customTileName != null && !this.customTileName.isEmpty();
}
public void setCustomName(String customTileName) {
this.customTileName = customTileName;
}
@Override
public int getSizeInventory() {
return this.getTileInventory().size();
}
@Override
public ItemStack getStackInSlot(int index) {
return this.getTileInventory().get(index);
}
@Override
public ItemStack decrStackSize(int index, int count) {
ItemStack stack = this.getStackInSlot(index);
if (stack.stackSize <= count) {
this.setInventorySlotContents(index, null);
return stack;
}
if (stack.stackSize == 0) {
this.setInventorySlotContents(index, null);
}
return this.getTileInventory().get(index).splitStack(count);
}
@Override
public ItemStack getStackInSlotOnClosing(int index) {
ItemStack stack = this.getStackInSlot(index);
if (this.getStackInSlot(index) != null) {
this.setInventorySlotContents(index, null);
}
return stack;
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
boolean flag = stack != null && this.getStackInSlot(index) != null && stack.isItemEqual(this.getStackInSlot(index)) && ItemStack.areItemStackTagsEqual(stack, this.getStackInSlot(index));
this.getTileInventory().set(index, stack);
if (stack != null && stack.stackSize > this.getInventoryStackLimit()) {
stack.stackSize = this.getInventoryStackLimit();
}
if (!flag) {
this.onSlotChanged(index);
this.markDirty();
}
}
public abstract void onSlotChanged(int index);
@Override
public void readFromNBT(NBTTagCompound compound) {
NBTTagList list = compound.getTagList("Items", 10);
for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound stackCompound = list.getCompoundTagAt(i);
byte slot = stackCompound.getByte("Slot");
if (slot >= 0 && slot < this.getTileInventory().size()) {
this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(stackCompound));
}
}
if (compound.hasKey("CustomName", 8)) {
this.customTileName = compound.getString("CustomName");
}
super.readFromNBT(compound);
}
@Override
public void writeToNBT(NBTTagCompound compound) {
NBTTagList list = new NBTTagList();
for (int i = 0; i < this.getTileInventory().size(); ++i) {
ItemStack stack = this.getTileInventory().get(i);
if (stack != null) {
NBTTagCompound stackCompound = new NBTTagCompound();
stackCompound.setByte("Slot", (byte) i);
stack.writeToNBT(stackCompound);
list.appendTag(stackCompound);
}
}
compound.setTag("Items", list);
if (this.hasCustomInventoryName()) {
compound.setString("CustomName", this.customTileName);
}
super.writeToNBT(compound);
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) <= 64.0D;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public void openInventory() {
}
@Override
public void closeInventory() {
}
@Override
public boolean isItemValidForSlot(int index, ItemStack stack) {
return this.isValidSlotItem(index, stack);
}
public abstract boolean isValidSlotItem(int slot, ItemStack stackInSlot);
@Override
public boolean canInsertItem(int index, ItemStack stack, int direction) {
return this.isValidSlotItem(index, stack);
}
@Override
public boolean canExtractItem(int index, ItemStack stack, int direction) {
return true;
}
}