package net.starlikeclient.minecraft.items;

import net.minecraft.creativetab.CreativeTabs;
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.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.world.World;
import net.starlikeclient.minecraft.entities.entity.EntityBullet;

/**
 * + This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source
 * code.
 *
 * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" Mod
 * Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
 *
 * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights
 * Reserved.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 */
public class ItemRevolver extends Item {
    public static final String[] bowPullIconNameArray = new String[] { "pulling_0", "pulling_1", "pulling_2" };
    public double basePower = 1;
    public int maxDamage = 384;
    private int revolverMaxBullet = 6;
    private int revolverBulletCount = 0;

    public ItemRevolver() {
        this.maxStackSize = 1;
        this.setMaxDamage(maxDamage);
        this.setCreativeTab(CreativeTabs.tabCombat);

    }

    public ItemRevolver(double power, int maxDam) {
        this.maxStackSize = 1;
        maxDamage = maxDam;
        this.setMaxDamage(maxDamage);
        this.setCreativeTab(CreativeTabs.tabStarlike);

        basePower = power;

    }

    /**
     * + Return the enchantabpuility factor of the item, most of the time is based
     * on material.
     */
    @Override
    public int getItemEnchantability() {
        return 1;
    }

    /**
     * + returns the action that specifies what animation to play when the items is
     * being used
     */
    @Override
    public EnumAction getItemUseAction(ItemStack var1) {
        return EnumAction.BOW;
    }

    /**
     * + How long it takes to use or consume an item
     */
    @Override
    public int getMaxItemUseDuration(ItemStack var1) {
        return 72000;
    }

    /**
     * + Called whenever this item is equipped and the right mouse button is
     * pressed. Args: itemStack, world, entityPlayer
     */
    @Override
    public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityPlayer entityplayer) {
        if (entityplayer.capabilities.isCreativeMode || entityplayer.inventory.hasItem(Items.bullet)) {
            entityplayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack));
        }

        return itemstack;
    }

    /**
     * + Called when the player finishes using this Item (E.g. finishes eating.).
     * Not called when the player stops using the Item before the action is
     * complete.
     */
    @Override
    public ItemStack onItemUseFinish(ItemStack itemstack, World var2, EntityPlayer var3) {
        return itemstack;
    }

    /**
     * + Called when the player stops using an Item (stops holding the right mouse
     * button).
     */
    @Override
    public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) {
        boolean flag = playerIn.capabilities.isCreativeMode;
        if (flag || playerIn.inventory.hasItem(Items.bullet)) {
            int i = this.getMaxItemUseDuration(stack) - timeLeft;
            float f = (float) i / 20.0F;
            f = (f * f + f * 2.0F) / 3.0F;
            if ((double) f < 0.1D) {
                return;
            }

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

            EntityBullet entityarrow = new EntityBullet(worldIn, playerIn, f * 2.0F);
            if (f == 1.0F) {
                entityarrow.setIsCritical(true);
            }

            /*
             * int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId,
             * stack); if (j > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double)
             * j * 0.5D + 0.5D); }
             */
            entityarrow.setDamage(entityarrow.getDamage() + (double) 7.3D * 0.5D + 0.5D);

            stack.damageItem(1, playerIn);
            worldIn.playSoundAtEntity(playerIn, "starlike:gun.fire", 1.0F,
                    1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
            if (flag) {
                entityarrow.canBePickedUp = 2;
            } else {
                playerIn.inventory.consumeInventoryItem(Items.bullet);
            }

            playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]);
            if (!worldIn.isRemote) {
                worldIn.spawnEntityInWorld(entityarrow);
            }
            entityarrow.setDamage((entityarrow.getDamage() * basePower));

        }

    }
}