package minefantasy.item.weapon; import java.text.DecimalFormat; import cpw.mods.fml.relauncher.Side; import minefantasy.api.weapon.*; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerInteractEvent; /** * Warpick: * does low damage, but with high AP * 2x armour damage */ public class ItemWarpick extends ItemWeaponMF implements IWeaponPenetrateArmour, IWeaponCustomSpeed { private static Block[] blocksEffectiveAgainst = new Block[] {Block.cobblestone, Block.stoneSingleSlab, Block.stoneDoubleSlab, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockIron, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.netherrack, Block.oreLapis, Block.blockLapis, Block.oreRedstone, Block.oreRedstoneGlowing, Block.rail, Block.railDetector, Block.railPowered}; public float efficiencyOnProperMaterial = 2.0F; private float APdamage; public ItemWarpick(int id, EnumToolMaterial material) { super(id, material); DecimalFormat decimal_format = new DecimalFormat("#.#"); APdamage = baseDamage*getAPPercent(); if(!(this instanceof ItemWarhammer)) { this.efficiencyOnProperMaterial = material.getEfficiencyOnProperMaterial()*0.75F; MinecraftForge.setToolClass(this, "pickaxe", material.getHarvestLevel()); } } @Override public float getDamageModifier() { return 0.75F; } @Override public int getHitTime(ItemStack weapon, EntityLivingBase target) { return 3; } @Override public float getAPDamage() { return APdamage; } @Override public boolean onBlockDestroyed(ItemStack item, World world, int x, int y, int z, int meta, EntityLivingBase entity) { item.damageItem(1, entity); return true; } @Override public boolean canHarvestBlock(Block block, ItemStack stack) { if(!(this instanceof ItemWarhammer)) { return ForgeHooks.canToolHarvestBlock(block, 0, stack); } return super.canHarvestBlock(block); } /** * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if * sword */ @Override public float getStrVsBlock(ItemStack item, Block block, int metadata) { if(!(this instanceof ItemWarhammer)) { return ForgeHooks.isToolEffective(item, block, metadata) ? this.efficiencyOnProperMaterial : super.getStrVsBlock(item, block); } return super.getStrVsBlock(item, block, metadata)*3.0F; } @Override public float getDurability() { return 1.5F; } @Override public float getArmourDamageBonus() { return 1.5F; } @Override public boolean buffDamage() { return true; } @Override public boolean sheatheOnBack(ItemStack item) { // TODO Auto-generated method stub return false; } @Override public boolean isOffhandHandDual(ItemStack off) { // TODO Auto-generated method stub return false; } @Override public boolean offhandClickAir(PlayerInteractEvent event, ItemStack mainhandItem, ItemStack offhandItem) { // TODO Auto-generated method stub return false; } @Override public int getHandsUsed() { return 1; } //SPECIAL EFFECT(WARHAMMER): On hit: "Heavy Strike": explosive damage, increases strength, and adds saturation @Override public void onHit(float damage, ItemStack weapon, EntityLivingBase target, EntityLivingBase attacker) { super.onHit(damage, weapon, target, attacker); if(target != null && target instanceof EntityLivingBase) { if(rand.nextFloat()*3 < getDebilitation()) { if(this instanceof ItemWarhammer) { attacker.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 300, 0)); if(attacker instanceof EntityPlayer) { ((EntityPlayer)attacker).getFoodStats().addStats(0, 2F); } target.worldObj.createExplosion(attacker, target.posX, target.posY + (target.height/2), target.posZ, 1.0F, false); target.addPotionEffect(new PotionEffect(Potion.confusion.id, 150, rand.nextInt(3))); } else { target.playSound("minefantasy:Weapon.crit", 1.0F, 1.0F); target.addPotionEffect(new PotionEffect(Potion.weakness.id, 600, rand.nextInt(3))); } target.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 600, rand.nextInt(3))); } } } public float getDebilitation() { return 0.4F; } @Override protected float getAPPercent() { return 0.5F; } }