I don't think it is possible to add custom inventory items at this time, at least not through the java API (no idea about the lua one). (please correct me if I am wrong I would love to be able to do this)
I also don't think it is possible to spawn fish in the water since you cannot know beforehand the coordinates of all the water or the height they are at. (i.e. before a player steps on it, and even then you would have to have your plugin track the positions of all players until someone stepped on water to spawn the fish 3D model there)
Though you could spawn fish on water on command (i.e. admins going around placing some fish at certain spots), you could even then have the models move around in small circles
I can imagine a plugin that could work like this:
1) on command spawn a fishing rod (3D model) in front of the player model (maybe a bit in front of the feet?) on the ground then raycast to check that there is water in front (so the player would have to look towards the water for this to work).
2) Then have a timer attached to a probability to catch fish or not every x seconds/minutes.
3) restore health/hunger depending on fish caught (in the future add fish to inventory)
4) on command or after X minutes despawn the fishing rod (we don't want to have 1000 of them left everywhere in the world)