package net.minecraft.item; import javax.annotation.Nullable; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityFishHook; import net.minecraft.init.SoundEvents; import net.minecraft.stats.StatList; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemFishingRod extends Item { public ItemFishingRod() { this.setMaxDamage(64); this.setMaxStackSize(1); this.setCreativeTab(CreativeTabs.TOOLS); this.addPropertyOverride(new ResourceLocation("cast"), new IItemPropertyGetter() { @SideOnly(Side.CLIENT) public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) { if (entityIn == null) { return 0.0F; } else { boolean flag = entityIn.getHeldItemMainhand() == stack; boolean flag1 = entityIn.getHeldItemOffhand() == stack; if (entityIn.getHeldItemMainhand().getItem() instanceof ItemFishingRod) { flag1 = false; } return (flag || flag1) && entityIn instanceof EntityPlayer && ((EntityPlayer)entityIn).fishEntity != null ? 1.0F : 0.0F; } } }); } /** * Returns True is the item is renderer in full 3D when hold. */ @SideOnly(Side.CLIENT) public boolean isFull3D() { return true; } /** * Returns true if this item should be rotated by 180 degrees around the Y axis when being held in an entities * hands. */ @SideOnly(Side.CLIENT) public boolean shouldRotateAroundWhenRendering() { return true; } /** * Called when the equipped item is right clicked. */ public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { ItemStack itemstack = playerIn.getHeldItem(handIn); if (playerIn.fishEntity != null) { int i = playerIn.fishEntity.handleHookRetraction(); itemstack.damageItem(i, playerIn); playerIn.swingArm(handIn); worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_BOBBER_RETRIEVE, SoundCategory.NEUTRAL, 1.0F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); } else { worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_BOBBER_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if (!worldIn.isRemote) { EntityFishHook entityfishhook = new EntityFishHook(worldIn, playerIn); int j = EnchantmentHelper.getFishingSpeedBonus(itemstack); if (j > 0) { entityfishhook.setLureSpeed(j); } int k = EnchantmentHelper.getFishingLuckBonus(itemstack); if (k > 0) { entityfishhook.setLuck(k); } worldIn.spawnEntity(entityfishhook); } playerIn.swingArm(handIn); playerIn.addStat(StatList.getObjectUseStats(this)); } return new ActionResult(EnumActionResult.SUCCESS, itemstack); } /** * Return the enchantability factor of the item, most of the time is based on material. */ public int getItemEnchantability() { return 1; } }