The parenthesis around IsBlockWater() are not needed, there's no way such a term could be mis-understood by humans (unlike `x == 0 && b`, which should use them: `(x == 0) && b`)