protected override void DropRareDrop(int par1) { if (par1 > 0) { ItemStack itemstack = new ItemStack(Item.Bow); EnchantmentHelper.Func_48441_a(Rand, itemstack, 5); EntityDropItem(itemstack, 0.0F); } else { DropItem(Item.Bow.ShiftedIndex, 1); } }
/// <summary> /// called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount /// </summary> public override void OnPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4) { bool flag = par3EntityPlayer.Capabilities.IsCreativeMode || EnchantmentHelper.GetEnchantmentLevel(Enchantment.Infinity.EffectId, par1ItemStack) > 0; if (flag || par3EntityPlayer.Inventory.HasItem(Item.Arrow.ShiftedIndex)) { int i = GetMaxItemUseDuration(par1ItemStack) - par4; float f = (float)i / 20F; f = (f * f + f * 2.0F) / 3F; if ((double)f < 0.10000000000000001D) { return; } if (f > 1.0F) { f = 1.0F; } EntityArrow entityarrow = new EntityArrow(par2World, par3EntityPlayer, f * 2.0F); if (f == 1.0F) { entityarrow.ArrowCritical = true; } int j = EnchantmentHelper.GetEnchantmentLevel(Enchantment.Power.EffectId, par1ItemStack); if (j > 0) { entityarrow.SetDamage(entityarrow.GetDamage() + (double)j * 0.5D + 0.5D); } int k = EnchantmentHelper.GetEnchantmentLevel(Enchantment.Punch.EffectId, par1ItemStack); if (k > 0) { entityarrow.Func_46023_b(k); } if (EnchantmentHelper.GetEnchantmentLevel(Enchantment.Flame.EffectId, par1ItemStack) > 0) { entityarrow.SetFire(100); } par1ItemStack.DamageItem(1, par3EntityPlayer); par2World.PlaySoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (ItemRand.NextFloat() * 0.4F + 1.2F) + f * 0.5F); if (!flag) { par3EntityPlayer.Inventory.ConsumeInventoryItem(Item.Arrow.ShiftedIndex); } else { entityarrow.DoesArrowBelongToPlayer = false; } if (!par2World.IsRemote) { par2World.SpawnEntityInWorld(entityarrow); } } }