package com.bioxx.tfc2.items;
import java.util.HashMap;
import java.util.List;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import com.bioxx.tfc2.api.interfaces.ICookableFood;
import com.bioxx.tfc2.api.interfaces.IUpdateInInventory;
import com.bioxx.tfc2.api.types.EnumFoodGroup;
import com.bioxx.tfc2.core.Food;
public class ItemFoodTFC extends ItemTerra implements ICookableFood, IUpdateInInventory
{
private long expiration = 300000L;//time expressed in milliseconds
private float nourishment = 20f;
private int filling = 1;
public boolean edible = true;
public boolean canBeUsedRaw = true;
protected boolean canBeSmoked;
private EnumFoodGroup foodGroup = EnumFoodGroup.None;
public HashMap<EnumFoodGroup, Float> nutritionMap = new HashMap<EnumFoodGroup, Float>();
public ItemFoodTFC(EnumFoodGroup fg, float n, int f)
{
foodGroup = fg;
nourishment = 20;
filling = f;
//FoodRegistry.getInstance().registerFood(fg, this);
this.setCreativeTab(CreativeTabs.FOOD);
nutritionMap.put(EnumFoodGroup.Grain, 20f);
}
public void readNBT(NBTTagCompound compound)
{
if (compound.hasKey("foodLevel", 99))
{
//ModuleFood.readNBT((IFoodStatsTFC)this, compound);
}
}
/**
* @param seconds How long should each item last in seconds
* @return this food item to allow chaining
*/
public ItemFoodTFC setExpiration(int seconds)
{
expiration = seconds*20;
return this;
}
public ItemFoodTFC setEdible(boolean isEdible)
{
edible = isEdible;
return this;
}
public ItemFoodTFC setCanUseRaw(boolean canUseRaw)
{
canBeUsedRaw = canUseRaw;
return this;
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack is, EntityPlayer player, List arraylist, boolean flag)
{
super.addInformation(is, player, arraylist, flag);
/*long time = Food.getDecayTimer(is)-net.minecraft.client.Minecraft.getMinecraft().theWorld.getWorldTime();
if(time <= 0)
{
arraylist.add(TextFormatting.RED+"Expired x"+Math.min(1+(time / expiration)* (-1), is.stackSize));
}
else
{
String out = String.format("%d:%02d", time/60/20, (time/20) % 60);
arraylist.add("Expires: " + out);
}*/
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item itemIn, CreativeTabs tab, List<ItemStack> subItems)
{
//Food.getSubItems(itemIn, tab, subItems);
}
/**
* Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using
* the Item before the action is complete.
*/
@Override
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase player)
{
/*FoodStatsTFC fs = Core.getPlayerFoodStats(player);
fs.addNutrition(foodGroup, nourishment);
Core.setPlayerFoodStats((EntityPlayer)player, fs);
worldIn.playSound((EntityPlayer)null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, worldIn.rand.nextFloat() * 0.1F + 0.9F);
this.onFoodEaten(stack, worldIn, (EntityPlayer)player);
((EntityPlayer) player).addStat(StatList.getObjectUseStats(this));*/
return stack;
}
protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player)
{
}
@Override
public int getItemStackLimit(ItemStack stack)
{
return 64;
}
/**
* How long it takes to use or consume an item
*/
@Override
public int getMaxItemUseDuration(ItemStack stack)
{
return 32;
}
/**
* returns the action that specifies what animation to play when the items is being used
*/
@Override
public EnumAction getItemUseAction(ItemStack stack)
{
return EnumAction.EAT;
}
/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand)
{
if (playerIn.canEat(false))
{
playerIn.setActiveHand(hand);
return new ActionResult(EnumActionResult.SUCCESS, itemStackIn);
}
return new ActionResult(EnumActionResult.FAIL, itemStackIn);
}
@Override
public ItemStack onDecayed(ItemStack is, World world, int i, int j, int k) {
return null;
}
@Override
public boolean canSmoke() {
return canBeSmoked;
}
@Override
public void inventoryUpdate(EntityPlayer player, ItemStack is)
{
long time = Food.getDecayTimer(is)-net.minecraft.client.Minecraft.getMinecraft().theWorld.getWorldTime();
if(time < 0)
{
int expiredAmt = (int)Math.min(1+(time / expiration)* (-1), is.stackSize);
is.stackSize-=expiredAmt;
Food.setDecayTimer(is, Food.getDecayTimer(is)+expiration*expiredAmt);
}
}
}