package minefantasy.item; import minefantasy.entity.EntityArrowMF; import minefantasy.entity.EntityRockSling; import minefantasy.system.data_minefantasy; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemBow; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Icon; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.event.entity.player.ArrowNockEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ItemSlingMF extends ItemBow { public ItemSlingMF(int id, int strength) { super(id); this.maxStackSize = 1; this.setMaxDamage(strength); } @SideOnly(Side.CLIENT) /** * Returns True is the item is renderer in full 3D when hold. */ public boolean isFull3D() { return true; } /** * called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount */ public void onPlayerStoppedUsing(ItemStack item, World world, EntityPlayer player, int time) { int var6 = this.getMaxItemUseDuration(item) - time; boolean var5 = player.capabilities.isCreativeMode; if (var5 || player.inventory.hasItemStack(ItemListMF.component(ItemListMF.rock))) { float var7 = (float)var6 / 20.0F; var7 = (var7 * var7 + var7 * 2.0F) / 3.0F; if ((double)var7 < 0.1D) { return; } if (var7 > 1.0F) { var7 = 1.0F; }//EntityArrowMF EntityRockSling rock = new EntityRockSling(world, player, var7*2.0F); item.damageItem(1, player); world.playSoundAtEntity(player, data_minefantasy.sound("spearThrow"), 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + var7 * 0.5F); if(!var5) { consumePlayerItem(player, ItemListMF.component(ItemListMF.rock)); } if (!world.isRemote) { world.spawnEntityInWorld(rock); } } } private boolean consumePlayerItem(EntityPlayer player, ItemStack item) { for(int a = 0; a < player.inventory.getSizeInventory(); a ++) { ItemStack i = player.inventory.getStackInSlot(a); if(i != null && i.isItemEqual(item)) { player.inventory.decrStackSize(a, 1); return true; } } return false; } public ItemStack onFoodEaten(ItemStack item, World world, EntityPlayer player) { return item; } /** * How long it takes to use or consume an item */ public int getMaxItemUseDuration(ItemStack item) { return 72000; } /** * returns the action that specifies what animation to play when the items is being used */ public EnumAction getItemUseAction(ItemStack item) { return EnumAction.bow; } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { if (player.capabilities.isCreativeMode || player.inventory.hasItemStack(ItemListMF.component(ItemListMF.rock))) { player.setItemInUse(item, this.getMaxItemUseDuration(item)); } return item; } /** * Return the enchantability factor of the item, most of the time is based on material. */ public int getItemEnchantability() { return 0; } @Override public void onUsingItemTick(ItemStack item, EntityPlayer player, int i) { super.onUsingItemTick(item, player, i); if(i % 5 == 0) { player.swingItem(); } } @SideOnly(Side.CLIENT) @Override public void registerIcons(IconRegister reg) { this.itemIcon = reg.registerIcon(this.getIconString()); } @Override public Item setUnlocalizedName(String name) { this.setTextureName("minefantasy:Weapon/"+name); return super.setUnlocalizedName(name); } }