package minefantasy.mf2.item;
import minefantasy.mf2.MineFantasyII;
import minefantasy.mf2.api.knowledge.ResearchLogic;
import minefantasy.mf2.item.list.CreativeTabMF;
import minefantasy.mf2.item.list.ToolListMF;
import minefantasy.mf2.mechanics.EventManagerMF;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.common.registry.GameRegistry;
public class ItemBandage extends Item
{
private String name;
private float healPwr;
private float secondsToUse = 5F;
public ItemBandage(String id, float healAmount)
{
super();
name = id;
healPwr = healAmount;
setMaxStackSize(16);
setCreativeTab(CreativeTabMF.tabGadget);
setTextureName("minefantasy2:Other/"+name);
GameRegistry.registerItem(this, "MF_Aid_"+name, MineFantasyII.MODID);
this.setUnlocalizedName(name);
}
@Override
public EnumRarity getRarity(ItemStack item)
{
if(healPwr <= 5)
{
return ToolListMF.poor;
}
return super.getRarity(item);
}
/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
@Override
public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer user)
{
if(!user.isSneaking() && canHeal(user) && user.hurtResistantTime <= 0)
{
int time = this.getMaxItemUseDuration(item);
if(ResearchLogic.hasInfoUnlocked(user, "firstaid"))
{
time /= 3;
}
user.setItemInUse(item, time);
}
return item;
}
/**
* returns the action that specifies what animation to play when the items is being used
*/
@Override
public EnumAction getItemUseAction(ItemStack item)
{
return EnumAction.block;
}
@Override
public int getMaxItemUseDuration(ItemStack item)
{
return (int)(20F*secondsToUse);
}
@Override
public ItemStack onEaten(ItemStack item, World world, EntityPlayer player)
{
return heal(player, player, item);
}
@Override
public void onUsingTick(ItemStack stack, EntityPlayer player, int count)
{
super.onUsingTick(stack, player, count);
if(!canHeal(player) && !player.worldObj.isRemote)
{
player.stopUsingItem();
}
if(count % 5 == 0)
{
player.playSound("dig.cloth", 1F, 0.005F);
}
player.swingItem();
}
@Override
public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer player, EntityLivingBase entity)
{
if(player.isSneaking() && isReadyToHeal(player, entity))
{
heal(player, entity, itemstack);
return true;
}
return super.itemInteractionForEntity(itemstack, player, entity);
}
private ItemStack heal(EntityPlayer player, EntityLivingBase toHeal, ItemStack item)
{
if(player.worldObj.isRemote)
{
return item;
}
if(toHeal != null)
{
if(canHeal(toHeal))
{
toHeal.worldObj.playSoundEffect(toHeal.posX, toHeal.posY, toHeal.posZ, "dig.cloth", 1.0F, 3.0F);
player.swingItem();
if(!player.worldObj.isRemote)
{
float power = healPwr;
if(ResearchLogic.hasInfoUnlocked(player, "doctor"))
{
power *= 1.5F;
}
toHeal.heal(power);
if(!player.capabilities.isCreativeMode)
{
item.stackSize --;
if(item.stackSize <= 0)
{
}
}
}
toHeal.getEntityData().setInteger(EventManagerMF.injuredNBT, 0);
}
}
return item;
}
private boolean canHeal(EntityLivingBase toHeal)
{
return toHeal.hurtResistantTime <= 0 && (toHeal.getHealth() <= (toHeal.getMaxHealth()-1F) || EventManagerMF.getInjuredTime(toHeal) > 0) && !toHeal.isBurning();
}
public boolean isReadyToHeal(EntityPlayer player, EntityLivingBase patient)
{
int time = getUserHealTime(patient) + 1;
if(ResearchLogic.hasInfoUnlocked(player, "firstaid"))
{
time += 3;
}
patient.playSound("dig.cloth", 1F, 0.005F);
player.swingItem();
if(time >= (int)(4*secondsToUse))
{
setUserHealTime(patient, 0);
return true;
}
setUserHealTime(patient, time);
return false;
}
public void setUserHealTime(EntityLivingBase user, int value)
{
if(user.getEntityData() != null)
{
user.getEntityData().setInteger(healingID, value);
}
}
public int getUserHealTime(EntityLivingBase user)
{
if(user.getEntityData() != null)
{
if(user.getEntityData().hasKey(healingID))
{
return user.getEntityData().getInteger(healingID);
}
}
return 0;
}
private static final String healingID = "MF_Bandage_progress";
}