package joshie.harvest.cooking.tile;
import joshie.harvest.api.HFApi;
import joshie.harvest.core.helpers.NBTHelper;
import joshie.harvest.core.lib.HFSounds;
import joshie.harvest.core.helpers.TextHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
public class FridgeData implements IInventory {
protected final ItemStack[] inventory;
private final TileFridge tile;
private int players;
public FridgeData(TileFridge tile) {
inventory = new ItemStack[54];
this.tile = tile;
}
@Override
public int getSizeInventory() {
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int index) {
return inventory[index];
}
@Override
public ItemStack decrStackSize(int index, int count) {
ItemStack itemstack = ItemStackHelper.getAndSplit(this.inventory, index, count);
if (itemstack != null) {
this.markDirty();
}
return itemstack;
}
@Override
public ItemStack removeStackFromSlot(int index) {
if (inventory[index] != null) {
ItemStack stack = inventory[index];
inventory[index] = null;
return stack;
}
return null;
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) {
inventory[slot] = stack;
if (stack != null && stack.stackSize > getInventoryStackLimit()) {
stack.stackSize = getInventoryStackLimit();
}
markDirty();
}
@Override
public String getName() {
return TextHelper.translate("cookware.fridge");
}
@Override
public boolean hasCustomName() {
return true;
}
@Override
public ITextComponent getDisplayName() {
return new TextComponentString("hi");
}
@Override
public int getInventoryStackLimit() {
return 512;
}
@Override
public void markDirty() {
this.tile.markDirty();
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return true;
}
@Override
public void openInventory(EntityPlayer player) {
players++;
if (players < 0) {
players = 0;
}
player.worldObj.addBlockEvent(tile.getPos(), tile.getBlockType(), 1, players);
tile.getWorld().playSound(null, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), HFSounds.FRIDGE, SoundCategory.BLOCKS, 2F, tile.getWorld().rand.nextFloat() * 0.1F + 0.9F);
}
@Override
public void closeInventory(EntityPlayer player) {
players--;
if (players < 0) {
players = 0;
}
player.worldObj.addBlockEvent(tile.getPos(), tile.getBlockType(), 1, players);
tile.getWorld().playSound(null, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), HFSounds.FRIDGE, SoundCategory.BLOCKS, 2F, tile.getWorld().rand.nextFloat() * 0.1F + 0.9F);
tile.saveAndRefresh(); //Update the client about this
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return HFApi.cooking.isIngredient(stack);
}
@Override
public int getField(int id) {
return 0;
}
@Override
public void setField(int id, int value) {
if (id == 1) players = value;
}
@Override
public int getFieldCount() {
return players;
}
@Override
public void clear() {}
public void readFromNBT(NBTTagCompound nbt) {
NBTTagList tagList = nbt.getTagList("FridgeContents", 10);
for (int i = 0; i < tagList.tagCount(); i++) {
NBTTagCompound tag = tagList.getCompoundTagAt(i);
byte slot = tag.getByte("Slot");
if (slot >= 0 && slot < inventory.length) {
inventory[slot] = NBTHelper.readItemStack(tag);
}
}
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
NBTTagList itemList = new NBTTagList();
for (int i = 0; i < inventory.length; i++) {
ItemStack stack = inventory[i];
if (stack != null) {
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) i);
NBTHelper.writeItemStack(stack, tag);
itemList.appendTag(tag);
}
}
nbt.setTag("FridgeContents", itemList);
return nbt;
}
}