
Updated commands Added in a ritual hologram --Alex's code Added a Total Stones tooltip to the ritual diviner Gave the Alchemy Relay a null bounding box Added localizations to the blocks that didn't have any
156 lines
3.7 KiB
Java
156 lines
3.7 KiB
Java
package WayofTime.alchemicalWizardry.common.tileEntity;
|
|
|
|
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 net.minecraft.tileentity.TileEntity;
|
|
import net.minecraftforge.common.util.Constants;
|
|
|
|
/**
|
|
* Base class for tile entities with inventory
|
|
*
|
|
* @author ljfa-ag
|
|
*/
|
|
public abstract class TEInventory extends TileEntity implements IInventory
|
|
{
|
|
protected ItemStack[] inv;
|
|
|
|
public TEInventory(int size)
|
|
{
|
|
inv = new ItemStack[size];
|
|
}
|
|
|
|
@Override
|
|
public int getSizeInventory()
|
|
{
|
|
return inv.length;
|
|
}
|
|
|
|
public ItemStack[] getSlots()
|
|
{
|
|
return inv;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getStackInSlot(int slot)
|
|
{
|
|
return inv[slot];
|
|
}
|
|
|
|
@Override
|
|
public ItemStack decrStackSize(int slot, int amt)
|
|
{
|
|
ItemStack stack = getStackInSlot(slot);
|
|
if (stack != null)
|
|
{
|
|
if (stack.stackSize <= amt)
|
|
setInventorySlotContents(slot, null);
|
|
else
|
|
{
|
|
stack = stack.splitStack(amt);
|
|
if (stack.stackSize == 0)
|
|
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 stack)
|
|
{
|
|
inv[slot] = stack;
|
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
|
if (stack != null && stack.stackSize > getInventoryStackLimit())
|
|
stack.stackSize = getInventoryStackLimit();
|
|
}
|
|
|
|
@Override
|
|
public abstract String getInventoryName();
|
|
|
|
@Override
|
|
public boolean hasCustomInventoryName()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getInventoryStackLimit()
|
|
{
|
|
return 64;
|
|
}
|
|
|
|
@Override
|
|
public boolean isUseableByPlayer(EntityPlayer player)
|
|
{
|
|
return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this
|
|
&& player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
|
|
}
|
|
|
|
@Override
|
|
public void openInventory()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public void closeInventory()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValidForSlot(int slot, ItemStack stack)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound tag)
|
|
{
|
|
super.writeToNBT(tag);
|
|
NBTTagList invList = new NBTTagList();
|
|
for (int i = 0; i < inv.length; i++)
|
|
{
|
|
if (inv[i] != null)
|
|
{
|
|
NBTTagCompound stackTag = new NBTTagCompound();
|
|
stackTag.setByte("Slot", (byte) i);
|
|
inv[i].writeToNBT(stackTag);
|
|
invList.appendTag(stackTag);
|
|
}
|
|
}
|
|
|
|
tag.setTag("Inventory", invList);
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound tag)
|
|
{
|
|
super.readFromNBT(tag);
|
|
NBTTagList invList = tag.getTagList("Inventory",
|
|
Constants.NBT.TAG_COMPOUND);
|
|
for (int i = 0; i < invList.tagCount(); i++)
|
|
{
|
|
NBTTagCompound stackTag = invList.getCompoundTagAt(i);
|
|
int slot = stackTag.getByte("Slot");
|
|
|
|
if (slot >= 0 && slot < inv.length)
|
|
inv[slot] = ItemStack.loadItemStackFromNBT(stackTag);
|
|
}
|
|
}
|
|
|
|
public void clear()
|
|
{
|
|
inv = new ItemStack[inv.length];
|
|
}
|
|
}
|