001 package net.minecraft.src;
002
003 import java.util.Iterator;
004 import java.util.List;
005
006 public class ItemBoat extends Item
007 {
008 public ItemBoat(int par1)
009 {
010 super(par1);
011 this.maxStackSize = 1;
012 this.setCreativeTab(CreativeTabs.tabTransport);
013 }
014
015 /**
016 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
017 */
018 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
019 {
020 float var4 = 1.0F;
021 float var5 = par3EntityPlayer.prevRotationPitch + (par3EntityPlayer.rotationPitch - par3EntityPlayer.prevRotationPitch) * var4;
022 float var6 = par3EntityPlayer.prevRotationYaw + (par3EntityPlayer.rotationYaw - par3EntityPlayer.prevRotationYaw) * var4;
023 double var7 = par3EntityPlayer.prevPosX + (par3EntityPlayer.posX - par3EntityPlayer.prevPosX) * (double)var4;
024 double var9 = par3EntityPlayer.prevPosY + (par3EntityPlayer.posY - par3EntityPlayer.prevPosY) * (double)var4 + 1.62D - (double)par3EntityPlayer.yOffset;
025 double var11 = par3EntityPlayer.prevPosZ + (par3EntityPlayer.posZ - par3EntityPlayer.prevPosZ) * (double)var4;
026 Vec3 var13 = par2World.func_82732_R().getVecFromPool(var7, var9, var11);
027 float var14 = MathHelper.cos(-var6 * 0.017453292F - (float)Math.PI);
028 float var15 = MathHelper.sin(-var6 * 0.017453292F - (float)Math.PI);
029 float var16 = -MathHelper.cos(-var5 * 0.017453292F);
030 float var17 = MathHelper.sin(-var5 * 0.017453292F);
031 float var18 = var15 * var16;
032 float var20 = var14 * var16;
033 double var21 = 5.0D;
034 Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
035 MovingObjectPosition var24 = par2World.rayTraceBlocks_do(var13, var23, true);
036
037 if (var24 == null)
038 {
039 return par1ItemStack;
040 }
041 else
042 {
043 Vec3 var25 = par3EntityPlayer.getLook(var4);
044 boolean var26 = false;
045 float var27 = 1.0F;
046 List var28 = par2World.getEntitiesWithinAABBExcludingEntity(par3EntityPlayer, par3EntityPlayer.boundingBox.addCoord(var25.xCoord * var21, var25.yCoord * var21, var25.zCoord * var21).expand((double)var27, (double)var27, (double)var27));
047 Iterator var29 = var28.iterator();
048
049 while (var29.hasNext())
050 {
051 Entity var30 = (Entity)var29.next();
052
053 if (var30.canBeCollidedWith())
054 {
055 float var31 = var30.getCollisionBorderSize();
056 AxisAlignedBB var32 = var30.boundingBox.expand((double)var31, (double)var31, (double)var31);
057
058 if (var32.isVecInside(var13))
059 {
060 var26 = true;
061 }
062 }
063 }
064
065 if (var26)
066 {
067 return par1ItemStack;
068 }
069 else
070 {
071 if (var24.typeOfHit == EnumMovingObjectType.TILE)
072 {
073 int var35 = var24.blockX;
074 int var33 = var24.blockY;
075 int var34 = var24.blockZ;
076
077 if (!par2World.isRemote)
078 {
079 if (par2World.getBlockId(var35, var33, var34) == Block.snow.blockID)
080 {
081 --var33;
082 }
083
084 par2World.spawnEntityInWorld(new EntityBoat(par2World, (double)((float)var35 + 0.5F), (double)((float)var33 + 1.0F), (double)((float)var34 + 0.5F)));
085 }
086
087 if (!par3EntityPlayer.capabilities.isCreativeMode)
088 {
089 --par1ItemStack.stackSize;
090 }
091 }
092
093 return par1ItemStack;
094 }
095 }
096 }
097 }