package com.fredtargaryen.floocraft.tileentity;
import com.fredtargaryen.floocraft.item.ItemFlooPowder;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.client.gui.GuiScreen;
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.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.ParametersAreNonnullByDefault;
public class TileEntityFloowerPot extends TileEntity implements IInventory
{
private final ItemStack[] inv;
public TileEntityFloowerPot()
{
this.inv = new ItemStack[1];
}
@Override
public int getSizeInventory()
{
return this.inv.length;
}
@Override
public boolean isEmpty()
{
return this.inv[0].isEmpty();
}
@Override
@MethodsReturnNonnullByDefault
public ItemStack getStackInSlot(int slot)
{
return this.inv[slot];
}
@Override
@MethodsReturnNonnullByDefault
public ItemStack decrStackSize(int slot, int amt)
{
ItemStack stack = getStackInSlot(slot);
if (!stack.isEmpty())
{
if (stack.getCount() <= amt)
{
setInventorySlotContents(slot, ItemStack.EMPTY);
}
else
{
stack = stack.splitStack(amt);
if (stack.getCount() == 0)
{
setInventorySlotContents(slot, ItemStack.EMPTY);
}
}
}
return stack;
}
@Override
@MethodsReturnNonnullByDefault
public ItemStack removeStackFromSlot(int index) {
return ItemStack.EMPTY;
}
@Override
@ParametersAreNonnullByDefault
public void setInventorySlotContents(int slot, ItemStack stack)
{
this.inv[slot] = stack == null ? ItemStack.EMPTY : stack;
if (stack != null && !stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit())
{
stack.setCount(this.getInventoryStackLimit());
}
this.markDirty();
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
@ParametersAreNonnullByDefault
public boolean isUsableByPlayer(EntityPlayer player)
{
return this.world.getTileEntity(this.pos) == this &&
player.getDistanceSq(this.pos.getX() + 0.5, this.pos.getY() + 0.5, this.pos.getZ() + 0.5) < 64;
}
@Override
@ParametersAreNonnullByDefault
public void openInventory(EntityPlayer player) {
}
@Override
@ParametersAreNonnullByDefault
public void closeInventory(EntityPlayer player) {
}
@Override
@ParametersAreNonnullByDefault
public boolean isItemValidForSlot(int slot, ItemStack stack)
{
return stack.getItem() instanceof ItemFlooPowder;
}
@Override
public int getField(int id) {
return 0;
}
@Override
public void setField(int id, int value) {
}
@Override
public int getFieldCount() {
return 0;
}
@Override
public void clear() {
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
NBTTagList tagList = tagCompound.getTagList("Inventory", 10);
if(tagList.tagCount() == 0)
{
this.inv[0] = ItemStack.EMPTY;
}
else
{
NBTTagCompound tag = tagList.getCompoundTagAt(0);
byte slot = tag.getByte("Slot");
if (slot == 0) {
this.inv[slot] = new ItemStack(tag);
}
}
}
@Override
@MethodsReturnNonnullByDefault
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound = super.writeToNBT(tagCompound);
NBTTagList itemList = new NBTTagList();
ItemStack stack = inv[0];
if (stack != null && !stack.isEmpty()) {
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) 0);
stack.writeToNBT(tag);
itemList.appendTag(tag);
}
tagCompound.setTag("Inventory", itemList);
return tagCompound;
}
@Override
public SPacketUpdateTileEntity getUpdatePacket()
{
return new SPacketUpdateTileEntity(this.pos, 0, this.writeToNBT(new NBTTagCompound()));
}
/**
* Called when you receive a TileEntityData packet for the location this
* TileEntity is currently in. On the client, the NetworkManager will always
* be the remote server. On the server, it will be whomever is responsible for
* sending the packet.
*
* @param net The NetworkManager the packet originated from
* @param pkt The data packet
*/
@Override
@SideOnly(Side.CLIENT)
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt)
{
this.readFromNBT(pkt.getNbtCompound());
}
@Override
@MethodsReturnNonnullByDefault
public String getName() {
return null;
}
@Override
public boolean hasCustomName() {
return true;
}
@Override
@MethodsReturnNonnullByDefault
public ITextComponent getDisplayName() {
return new TextComponentString("Floower Pot");
}
}