@SubscribeEvent
public static void onPlayerLooseArrow(ArrowLooseEvent event) {
EntityPlayer player = event.getEntityPlayer();
boolean flag = event.hasAmmo();
ItemStack stack = findAmmo(player);
if (player.getHeldItemMainhand().getItem() == ItemsRegistry.upliftingbow) {
if (flag) {
//canceling vanilla event
event.setCanceled(true);
World world = event.getWorld();
float f = ItemBow.getArrowVelocity(event.getCharge());
if ((double) f >= 0.1D) {
if (!world.isRemote) {
LevitationArrow arrow = (LevitationArrow) (stack.getItem());
EntityLevitationArrow entityarrow = (EntityLevitationArrow) arrow.createArrow(world, stack, player);
entityarrow.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, f * 3.0F, 1.0F);
if (f == 1.0F) entityarrow.setIsCritical(true);
int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack);
if (j > 0) entityarrow.setDamage(entityarrow.getDamage() + (double) j * 0.5D + 0.5D);
int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack);
if (k > 0) entityarrow.setKnockbackStrength(k);
if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0)
entityarrow.setFire(100);
stack.damageItem(1, player);
world.spawnEntity(entityarrow);
}
}
}
}
}