package com.arkcraft.module.weapon.common.item.ranged; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemBow; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.arkcraft.module.weapon.WeaponModule; import com.arkcraft.module.weapon.common.entity.EntityMetalArrow; import com.arkcraft.module.weapon.common.entity.EntityStoneArrow; import com.arkcraft.module.weapon.common.entity.EntityTranqArrow; public class ItemCompoundBow extends ItemBow { public static final String[] bowPullIconNameArray = new String[] { "pulling_0", "pulling_1", "pulling_2" }; public ItemCompoundBow() { super(); this.setMaxStackSize(1); } @Override public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { int j = this.getMaxItemUseDuration(stack) - timeLeft; ArrowLooseEvent event = new ArrowLooseEvent(playerIn, stack, j); if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) { return; } j = event.charge; boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; if (flag || playerIn.inventory.hasItem(WeaponModule.items.tranq_arrow)) { float f = (float) j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double) f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityStoneArrow entityarrow = new EntityStoneArrow(worldIn, playerIn, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double) k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { entityarrow.setFire(100); } stack.damageItem(1, playerIn); worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(WeaponModule.items.tranq_arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } } else if (flag || playerIn.inventory.hasItem(WeaponModule.items.stone_arrow)) { float f = (float) j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double) f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityTranqArrow entityarrow = new EntityTranqArrow(worldIn, playerIn, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double) k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { entityarrow.setFire(100); } stack.damageItem(1, playerIn); worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(WeaponModule.items.stone_arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } } else if (flag || playerIn.inventory.hasItem(Items.arrow)) { float f = (float) j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double) f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityTranqArrow entityarrow = new EntityTranqArrow(worldIn, playerIn, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double) k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { entityarrow.setFire(100); } stack.damageItem(1, playerIn); worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(Items.arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } } else if (flag || playerIn.inventory.hasItem(WeaponModule.items.metal_arrow)) { float f = (float) j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double) f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityMetalArrow entityarrow = new EntityMetalArrow(worldIn, playerIn, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double) k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { entityarrow.setFire(100); } stack.damageItem(1, playerIn); worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(WeaponModule.items.metal_arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } } } @Override public int getMaxItemUseDuration(ItemStack stack) { return 72000; } @Override public EnumAction getItemUseAction(ItemStack itemstack) { return EnumAction.BOW; } @Override public ItemStack onItemRightClick(ItemStack stack, World w, EntityPlayer p) { if (p.capabilities.isCreativeMode || p.inventory.hasItem(WeaponModule.items.tranq_arrow)) { p.setItemInUse(stack, this.getMaxItemUseDuration(stack)); } if (p.capabilities.isCreativeMode || p.inventory.hasItem(WeaponModule.items.stone_arrow)) { p.setItemInUse(stack, this.getMaxItemUseDuration(stack)); } if (p.capabilities.isCreativeMode || p.inventory.hasItem(WeaponModule.items.metal_arrow)) { p.setItemInUse(stack, this.getMaxItemUseDuration(stack)); } return super.onItemRightClick(stack, w, p); } @Override @SideOnly(Side.CLIENT) public boolean isFull3D() { return true; } }