protected MovingObjectPosition getMovingObjectPositionFromPlayer( World par1World, EntityPlayer par2EntityPlayer, boolean par3) { float var4 = 1.0F; float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4; float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4; double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * (double) var4; double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * (double) var4 + 1.62D - (double) par2EntityPlayer.yOffset; double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * (double) var4; Vec3 var13 = par1World.getWorldVec3Pool().getVecFromPool(var7, var9, var11); float var14 = MathHelper.cos(-var6 * 0.017453292F - (float) Math.PI); float var15 = MathHelper.sin(-var6 * 0.017453292F - (float) Math.PI); float var16 = -MathHelper.cos(-var5 * 0.017453292F); float var17 = MathHelper.sin(-var5 * 0.017453292F); float var18 = var15 * var16; float var20 = var14 * var16; double var21 = 5.0D; Vec3 var23 = var13.addVector((double) var18 * var21, (double) var17 * var21, (double) var20 * var21); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); }
/** Returns a vector indicating the direction and intensity of fluid flow. */ private Vec3 getFlowVector(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { Vec3 var5 = Vec3.getVec3Pool().getVecFromPool(0.0D, 0.0D, 0.0D); int var6 = this.getEffectiveFlowDecay(par1IBlockAccess, par2, par3, par4); for (int var7 = 0; var7 < 4; ++var7) { int var8 = par2; int var10 = par4; if (var7 == 0) { var8 = par2 - 1; } if (var7 == 1) { var10 = par4 - 1; } if (var7 == 2) { ++var8; } if (var7 == 3) { ++var10; } int var11 = this.getEffectiveFlowDecay(par1IBlockAccess, var8, par3, var10); int var12; if (var11 < 0) { if (!par1IBlockAccess.getBlockMaterial(var8, par3, var10).blocksMovement()) { var11 = this.getEffectiveFlowDecay(par1IBlockAccess, var8, par3 - 1, var10); if (var11 >= 0) { var12 = var11 - (var6 - 8); var5 = var5.addVector( (double) ((var8 - par2) * var12), (double) ((par3 - par3) * var12), (double) ((var10 - par4) * var12)); } } } else if (var11 >= 0) { var12 = var11 - var6; var5 = var5.addVector( (double) ((var8 - par2) * var12), (double) ((par3 - par3) * var12), (double) ((var10 - par4) * var12)); } } if (par1IBlockAccess.getBlockMetadata(par2, par3, par4) >= 8) { boolean var13 = false; if (var13 || this.isBlockSolid(par1IBlockAccess, par2, par3, par4 - 1, 2)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2, par3, par4 + 1, 3)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2 - 1, par3, par4, 4)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2 + 1, par3, par4, 5)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2, par3 + 1, par4 - 1, 2)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2, par3 + 1, par4 + 1, 3)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2 - 1, par3 + 1, par4, 4)) { var13 = true; } if (var13 || this.isBlockSolid(par1IBlockAccess, par2 + 1, par3 + 1, par4, 5)) { var13 = true; } if (var13) { var5 = var5.normalize().addVector(0.0D, -6.0D, 0.0D); } } var5 = var5.normalize(); return var5; }