This approach also makes a lot of sense from a programming perspective. However, I think there should be a solution based on water depth instead of type, because lakes can have waves too! There could definitely be multipliers for each water type though (salt vs fresh), which modify the ceiling for the amplitude of the waves generated by the noise function. You could also perform a check on each chunk to see if it has a water block at the predefined sea level or above; if yes, the chunk must be part of a surface puddle, pond, lake, or sea. From there, you could perform more complex checks to determine the water start and stop points in each block column (with the final check set at sea level) by starting at the top of the column and finding the highest water level(s) and their corresponding depth(s). Once all the start and stop points are found, you have a surface water map. You could define rules to define the various water landforms, etc. Weather then modifies the wave function that is applied to the surface water blocks in a landform with interpolation to a calmer surface at the shoreline.