/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-Server/src/main/java/net/minecraft/server/ItemBow.java
package net.minecraft.server;

import org.bukkit.event.entity.EntityCombustEvent; // CraftBukkit

public class ItemBow extends Item {

	public static final String[] a = new String[] { "pulling_0", "pulling_1", "pulling_2" };

	public ItemBow() {
		this.maxStackSize = 1;
		this.setMaxDurability(384);
		this.a(CreativeModeTab.j);
	}

	@Override
	public void a(ItemStack itemstack, World world, EntityHuman entityhuman, int i) {
		boolean flag = entityhuman.abilities.canInstantlyBuild
				|| EnchantmentManager.getEnchantmentLevel(Enchantment.ARROW_INFINITE.id, itemstack) > 0;

		if (flag || entityhuman.inventory.b(Items.ARROW)) {
			int j = this.d(itemstack) - i;
			float f = j / 20.0F;

			f = (f * f + f * 2.0F) / 3.0F;
			if (f < 0.1D) {
				return;
			}

			if (f > 1.0F) {
				f = 1.0F;
			}

			EntityArrow entityarrow = new EntityArrow(world, entityhuman, f * 2.0F);

			if (f == 1.0F) {
				entityarrow.setCritical(true);
			}

			int k = EnchantmentManager.getEnchantmentLevel(Enchantment.ARROW_DAMAGE.id, itemstack);

			if (k > 0) {
				entityarrow.b(entityarrow.j() + k * 0.5D + 0.5D);
			}

			int l = EnchantmentManager.getEnchantmentLevel(Enchantment.ARROW_KNOCKBACK.id, itemstack);

			if (l > 0) {
				entityarrow.setKnockbackStrength(l);
			}

			if (EnchantmentManager.getEnchantmentLevel(Enchantment.ARROW_FIRE.id, itemstack) > 0) {
				// CraftBukkit start - call EntityCombustEvent
				EntityCombustEvent event = new EntityCombustEvent(entityarrow.getBukkitEntity(), 100);
				entityarrow.world.getServer().getPluginManager().callEvent(event);

				if (!event.isCancelled()) {
					entityarrow.setOnFire(event.getDuration());
				}
				// CraftBukkit end
			}

			// CraftBukkit start
			org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory
					.callEntityShootBowEvent(entityhuman, itemstack, entityarrow, f);
			if (event.isCancelled()) {
				event.getProjectile().remove();
				return;
			}

			if (event.getProjectile() == entityarrow.getBukkitEntity()) {
				world.addEntity(entityarrow);
			}
			// CraftBukkit end

			itemstack.damage(1, entityhuman);
			world.makeSound(entityhuman, "random.bow", 1.0F, 1.0F / (Item.g.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
			if (flag) {
				entityarrow.fromPlayer = 2;
			} else {
				entityhuman.inventory.a(Items.ARROW);
			}

			entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]);
			if (!world.isClientSide) {
				// world.addEntity(entityarrow); // CraftBukkit - moved up
			}
		}

	}

	@Override
	public ItemStack b(ItemStack itemstack, World world, EntityHuman entityhuman) {
		return itemstack;
	}

	@Override
	public int d(ItemStack itemstack) {
		return 72000;
	}

	@Override
	public EnumAnimation e(ItemStack itemstack) {
		return EnumAnimation.BOW;
	}

	@Override
	public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) {
		if (entityhuman.abilities.canInstantlyBuild || entityhuman.inventory.b(Items.ARROW)) {
			entityhuman.a(itemstack, this.d(itemstack));
		}

		return itemstack;
	}

	@Override
	public int b() {
		return 1;
	}
}
