if (source.getTile().isAbbeyTile()) {
List<FeaturePointer> wagonMoves = new ArrayList<>();
for (Entry<Location, Tile> entry : getBoard().getAdjacentTilesMap(source.getTile().getPosition()).entrySet()) {
Tile tile = entry.getValue();
Feature f = tile.getFeaturePartOf(entry.getKey().rev());
if (f == null || f.walk(new IsOccupiedOrCompleted())) continue;
wagonMoves.add(new FeaturePointer(tile.getPosition(), f.getLocation()));
}
return wagonMoves;
} else {
return source.walk(new FindUnoccupiedNeighbours());