public boolean buyBuildingOrRequired(Player player, CastleBuilding b)
	{
		if (!buildings.contains(b)) {
			if (buildings.containsAll(Arrays.asList(b.requires))) {
				return buyBuildingSpecific(player, b);
			} else {
				List<CastleBuilding> req = Arrays.asList(b.requires);
				req.removeAll(buildings);
				
				for (CastleBuilding r: req) {
					if (buyBuildingOrRequired(player, r)) {
						return true;
					}
				}
			}
		}
		return false;
	}