It's currently sometimes difficult to garrison units in a ship, particularly if the coastline has few available landing spots (e.g. Corsica v Sardinia). You manually direct the ship to the patch of beach where units must be loaded - then you click to load the units into the ship - and immediately the ship moves away from the landing spot!
This is because the ship did not know that it was already on the shore, and it would "helpfully" move closer to the units to try to pick them up. The only way the ship could detect it was on the shore was if it had just previously been given a pickup order, and was still at the same location resulting from the pickup order. Manually moving the ship would change the location, causing the ship to think it is no longer on the shore.
In this patch I add a more reliable test for when the ship is on the shore. I just check the terrain grid and see if there are any impassable tiles within the pickup range.
edit: updated patch so it just disables ship pickup entirely after discussion with mimo.
I also increase the pickup range to 15 from 10, because sometimes it's tricky to get the ship far enough into shore if the coastline is partially obstructed. In doing this, I refactor the GarrisonHolder tag to the base mechanical ship template, to avoid pointless duplication. As a side effect, this means fireships are now also GarrisonHolders (garrison size of 1) which should have zero effect on gameplay.