public MovingObjectPosition collisionRayTrace(World par1World, int par2, int par3, int par4, Vec3 par5Vec3, Vec3 par6Vec3)
    {
        MovingObjectPosition amovingobjectposition[] = new MovingObjectPosition[8];
        int i = par1World.getBlockMetadata(par2, par3, par4);
        int j = i & 3;
        boolean flag = (i & 4) == 4;
        int ai[] = field_72159_a[j + (flag ? 4 : 0)];
        field_72156_cr = true;

        for (int k = 0; k < 8; k++)
        {
            field_72160_cs = k;
            int ai2[] = ai;
            int l = ai2.length;

            for (int j1 = 0; j1 < l; j1++)
            {
                int l1 = ai2[j1];

                if (l1 != k);
            }

            amovingobjectposition[k] = super.collisionRayTrace(par1World, par2, par3, par4, par5Vec3, par6Vec3);
        }

        int ai1[] = ai;
        double d = ai1.length;

        for (int i1 = 0; i1 < d; i1++)
        {
            int k1 = ai1[i1];
            amovingobjectposition[k1] = null;
        }

        MovingObjectPosition movingobjectposition = null;
        d = 0.0D;
        MovingObjectPosition amovingobjectposition1[] = amovingobjectposition;
        int i2 = amovingobjectposition1.length;

        for (int j2 = 0; j2 < i2; j2++)
        {
            MovingObjectPosition movingobjectposition1 = amovingobjectposition1[j2];

            if (movingobjectposition1 == null)
            {
                continue;
            }

            double d1 = movingobjectposition1.hitVec.squareDistanceTo(par6Vec3);

            if (d1 > d)
            {
                movingobjectposition = movingobjectposition1;
                d = d1;
            }
        }

        return movingobjectposition;
    }