Didn’t look at it other then glancing over it.
But address wrap is mostly used for pretty specific tiling cases you might want to use address mirror instead.
Also when you use wrap all it does is if the texture coordinates in the shader you pass go past 1 it uses the fractional value of the coordinates … soo…
if your passed texture sampled coordinates in your shader are 1.25 u say because you set that on a vertice. Then it will sample texture pixels at .25 instead wrapping around. The size of a texture however is 0 to 1 u and v from begining to end.
Mirror on the other hand for 1.25 u actually will subtract from 1.0 - .25 = .75 u
To draw reflections in 2d you could just render target the stuff you draw without the water then use the rendertarget to blend onto the water with the v coordinates fliped i.e. v = 1.0f - v; then drawn onto your water surface block or blended onto it.
searching for reflections should give quite a few results here is a couple.
2d
3d
for 3d the following requisite function isn’t in monogame and probably should be.