package joshie.harvest.cooking.tile;
import joshie.harvest.api.HFApi;
import joshie.harvest.api.cooking.IFridge;
import joshie.harvest.cooking.HFCooking;
import joshie.harvest.core.base.tile.TileFaceable;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.wrapper.InvWrapper;
import javax.annotation.Nonnull;
/** Just a way to interact with the fridge inventory, the fridge inventory is global though, not stored in this block **/
public class TileFridge extends TileFaceable implements ITickable, IFridge {
private static final float f1 = 0.025F;
public float prevLidAngleTop;
public float lidAngleTop;
public boolean animatingTop;
public boolean openTop = true;
public float prevLidAngleBottom;
public float lidAngleBottom;
public boolean animatingBottom;
public boolean openBottom = true;
protected final FridgeData data = new FridgeData(this);
protected final InvWrapper handler = new InvWrapper(data);
public static boolean isValid(ItemStack stack) {
return stack.getItem() == HFCooking.MEAL || HFApi.cooking.isIngredient(stack) || (stack.getItem() instanceof ItemFood && ((ItemFood)stack.getItem()).getHealAmount(stack) > 0);
}
@Override
public FridgeData getContents() {
return data;
}
@Override
public void update() {
if (worldObj.isRemote) {
if (lidAngleTop >= 0.1F && data.getFieldCount() <= 0) {
animatingTop = true;
openTop = false;
}
if (lidAngleBottom >= 0.1F && data.getFieldCount() <= 0) {
animatingBottom = true;
openBottom= false;
}
//Top Door
prevLidAngleTop = lidAngleTop;
if (animatingTop) {
if (openTop) {
lidAngleTop += f1;
} else {
lidAngleTop -= f1;
}
if (lidAngleTop > 0.5F) {
lidAngleTop = 0.5F;
animatingTop = false;
openTop = false; //Once we hit critical, go down instead
}
if (lidAngleTop < 0.0F) {
lidAngleTop = 0.0F;
animatingTop = false;
openTop = true;
}
}
//Bottom Door
prevLidAngleBottom = lidAngleBottom;
if (animatingBottom) {
if (openBottom) {
lidAngleBottom += f1;
} else {
lidAngleBottom -= f1;
}
if (lidAngleBottom > 0.5F) {
lidAngleBottom = 0.5F;
openBottom = false; //Once we hit critical, go down instead
animatingBottom = false;
}
if (lidAngleBottom < 0.0F) {
lidAngleBottom = 0.0F;
animatingBottom = false;
openBottom = true;
}
}
}
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nonnull EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@SuppressWarnings("unchecked")
@Override
@Nonnull
public <T> T getCapability(@Nonnull Capability<T> capability, @Nonnull EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return (T) handler;
return super.getCapability(capability, facing);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
data.readFromNBT(nbt);
}
@Override
@Nonnull
public NBTTagCompound writeToNBT(@Nonnull NBTTagCompound nbt) {
super.writeToNBT(nbt);
return data.writeToNBT(nbt);
}
}