Agreed. It was garbage, back then I wrote a post about some things encountered:
Is Post Processing broken on the 4.26 "WaterBodyCustom" of the water plugin?
@coyohti If you are going to make your own implementation some form of grid to register buoy heights on could look like something I wrote here, a map of 2D coordinates to a Z height for the water surface. A grid resolution can be defined by amount of units per XY key.
Projectile trajectory and ground level - #21 by Roy_Wierer.Seda145
Of course if there is no need to store data (no simulation etc) then you might just get away with a looping noise generator and skip such storage entirely.
Would be good to know what exactly you need. There are plugins which add spline based rivers, currents, underwater post processing, fluid sims, terrain generator and so on?
If you need an entire algorithm to produce terrain + lake environments in one go you can grab my diamond square algo here:
There are a few old old ways. at some point water used to be nothing but a textured plane at a constant height in the world. Anything lower was considered “water”. Somewhat more advanced is using a collision shape to act as a water volume. This way you can use any place in 3D space as water. On collision you would initiate a post processing effect to show “underwater visuals” and you would alter the physics and movement settings of things entering the water until they leave the volume. This still results in some nasty transitions. Various developments have been made since such as partial underwater visuals (you get a nice wavy edge at the correct position), editor tools such as river automation (currents, texture variants, particle effects whatnot).