123 lines
4.0 KiB
Java
123 lines
4.0 KiB
Java
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<ItemStack> 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<ItemStack>(EnumActionResult.SUCCESS, itemstack);
|
|
}
|
|
|
|
/**
|
|
* Return the enchantability factor of the item, most of the time is based on material.
|
|
*/
|
|
public int getItemEnchantability()
|
|
{
|
|
return 1;
|
|
}
|
|
} |