Oh never mind, all you have to do is group all the parts you want to filter and use to make a model and using mouse.targetfilter on the model should work.
You can use TargetFilter to filter objects from the mouse. Just say:
local Mouse = game.Players.LocalPlayer:GetMouse()
local folderToFilter = workspace:WaitForChild("FolderToFilter")
Mouse.TargetFilter = folderToFilter
The mouse will not detect any objects if they are in the folder. You can also use a model for this if you prefer as it doesn’t matter as long as every object you want to filter/ignore is in that model/folder. This is actually exactly what I do with my placement module v3. I filter the folder where all the models are stored on the players plot so it’s easy to place down objects. Hope this helps!
I don’t think that is possible, Though I don’t see that it would be that much of an issue as there isn’t much use case for that other than water.
I’ve never tested it but if it does hit the water you could fire a raycast if the the mouse is over terrain water.