package minefantasy.mf2.item.weapon;
import java.util.Random;
import minefantasy.mf2.api.helpers.ArmourCalculator;
import minefantasy.mf2.api.stamina.StaminaBar;
import minefantasy.mf2.api.weapon.WeaponClass;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
/**
* @author Anonymous Productions
*/
public class ItemKatanaMF extends ItemHeavyWeaponMF
{
private Random rand = new Random();
/**
* Katanas are heavy counterparts to Tantos, unlike most heavy weapons: these act more like light-weapons
*/
public ItemKatanaMF(String name, ToolMaterial material, int rarity, float weight)
{
super(material, name, rarity, weight);
}
@Override
public boolean canBlock()
{
return true;
}
@Override
public boolean allowOffhand(ItemStack mainhand, ItemStack offhand)
{
return true;
}
/**
* Determines if the weapon can parry
*/
@Override
public boolean canWeaponParry()
{
return true;
}
@Override
protected int getParryDamage(float dam)
{
return 1;
}
/**
* gets the time after being hit your guard will be let down
*/
@Override
public int getParryCooldown(EntityLivingBase user)
{
return 8;
}
/**
* Gets the angle the weapon can parry
*/
@Override
public float getParryAngleModifier(EntityLivingBase user)
{
return 1.0F;
}
/**
* Gets the multiplier for the parry threshold
* @return
*/
@Override
public float getParryDamageModifier(EntityLivingBase user)
{
return 1.5F;
}
@Override
public boolean playCustomParrySound(EntityLivingBase blocker, Entity attacker, ItemStack weapon)
{
blocker.worldObj.playSoundAtEntity(blocker, "mob.zombie.metal", 1.0F, 1.15F + (rand.nextFloat()*0.5F));
return true;
}
@Override
public float getBalance()
{
return 0.0F;
}
@Override
public float getDecayModifier(EntityLivingBase user, ItemStack item)
{
return 0.75F;
}
@Override
public float getRegenModifier(EntityLivingBase user, ItemStack item)
{
return user.worldObj.difficultySetting.getDifficultyId() < 3 ? 1.25F : 1.0F;
}
@Override
public void onProperHit(EntityLivingBase user, ItemStack weapon, Entity hit, float dam)
{
if(user.motionY < 0 && !user.onGround && (!(user instanceof EntityPlayer) || user.isSneaking()) && tryPerformAbility(user, cleave_cost))
{
hurtInRange(user, 4D);
if(hit instanceof EntityLivingBase)
{
ArmourCalculator.damageArmour((EntityLivingBase)hit, (int)(dam*10));
}
user.setSneaking(false);
}
super.onProperHit(user, weapon, hit, dam);
}
@Override
public int modifyHitTime(EntityLivingBase user, ItemStack item)
{
if(!StaminaBar.isSystemActive || StaminaBar.isAnyStamina(user, false))
{
return speedModKatana;
}
return speedModHeavy/2;
}
@Override
public float getParryStaminaDecay(DamageSource source, ItemStack weapon)
{
return 1.0F;
}
/**
* gets the time after being hit your guard will be let down
*/
@Override
public int getParryCooldown(DamageSource source, float dam, ItemStack weapon)
{
return swordParryTime;
}
@Override
protected float getStaminaMod()
{
return katanaStaminaCost;
}
@Override
public WeaponClass getWeaponClass()
{
return WeaponClass.BLADE;
}
@Override
protected float[] getWeaponRatio(ItemStack implement)
{
return swordRatio;
}
@Override
public boolean canCounter()
{
return true;
}
@Override
public float[] getCounterRatio()
{
return spearRatio;
}
@Override
public float getCounterDamage()
{
return 1.5F;
}
@Override
protected float getMeleeDamage(ItemStack item)
{
return super.getMeleeDamage(item)*0.5F;
}
}