Zyeir
Currently you cant do anything in the water and what exactly is a water spell?. Just because i can think of something, doesnt mean that its easy to code.
A "water" spell seems very like a "normal" one, but with the "is_in_water" flag inverted: probably normal spells have a flag like this (even if with another name: I didn't look at the code), to prevent casting from water. Water spells should have this flag reversed to avoid casting from land.
But I propose, instead of working on a spell's flag, to work on aggro only:
1) mobs which walk/fly on ground should not enter the water (as it works now), so they can't reach you and, with time, this should break the aggro.
2) mobs which can cast/emit fire/other similar(*), even if you're in the water, continue to cast while you're in their cast range, then the aggro breaks and they restart to patrol.
3) water mobs will do the same, "reverted": not get on ground, cast anyway while you're in range.
This way, undoubtly, waters can become a little more dangerous as nowadays (e.g. a stinga near a lake can cast on you even if you're in water: you've to swim fast to get out of cast range) but make it possible to use the currently used spells by all the mobs, without the need to implement "water" ones.
(btw: if you target a stinga while it's in water you can cast on it, today, and it will cast back to you)
(*) I know that some mobs don't really "cast" (e.g. kincher "cast" is a special attack), but I think we can consider it like a "cast", for this post's pourpose.