A lesson to be learned----READ YOUR CONTRACT WHEN YOU BUY A TICKET. The cruise line has every right to do this. I sailed on Carnival Legend in 2004 and our cruise essentially lost a day because the previous cruise had to make a detour because of a passenger who was ill.
I was happy that the passenger recovered. But I was very upset with Carnival for not having compensated us more than they did. But I did learn that this stuff happens all the time.
When you cruise, do it for the experience. The destination should be secondary. Because you can be diverted at any time. During hurricane season, you could think you are going to the Bahamas, and end up in Nova Scotia.
If Jamaica is where you really want to go, then get on a plane and fly there for a week. If you cruise, all bets are off.
PS----no hard feelings with Carnival. I've sailed with them again since the 2004 incident with the full understanding that this could happen again.