Пример #1
0
  @Override
  public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int itemUse) {

    int draw = this.getMaxItemUseDuration(stack) - itemUse;

    ArrowLooseEvent event = new ArrowLooseEvent(player, stack, draw);
    MinecraftForge.EVENT_BUS.post(event);
    if (event.isCanceled()) {
      return;
    }
    draw = event.charge;

    boolean flag =
        player.capabilities.isCreativeMode
            || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;

    if (flag || player.inventory.hasItem(Items.arrow)) {
      boolean empowered = isEmpowered(stack);
      float f = draw / 20.0F;
      f = (f * f + f * 2.0F) / 3.0F;

      if (f > 1.0F) {
        f = 1.0F;
      } else if (f < 0.1F) {
        return;
      }
      EntityArrow arrow =
          new EntityArrow(world, player, f * arrowSpeedMultiplier * (empowered ? 1.0F : 1.25F));
      double damage = arrow.getDamage() * arrowDamageMultiplier * (empowered ? 1.0F : 1.25F);
      arrow.setDamage(damage);

      if (f == 1.0F) {
        arrow.setIsCritical(true);
      }
      int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);

      if (k > 0) {
        if (empowered) {
          k++;
        }
        arrow.setDamage(arrow.getDamage() + k * 0.5D + 0.5D);
      }
      int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack);

      if (l > 0) {
        if (empowered) {
          l++;
        }
        arrow.setKnockbackStrength(l);
      }
      if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) {
        arrow.setFire(100);
      }
      world.playSoundAtEntity(
          player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

      if (flag) {
        arrow.canBePickedUp = 2;
      } else {
        player.inventory.consumeInventoryItem(Items.arrow);
      }
      if (ServerHelper.isServerWorld(world)) {
        world.spawnEntityInWorld(arrow);
      }
      if (!player.capabilities.isCreativeMode) {
        useEnergy(stack);
      }
    }
  }