private GameState carpenterDay(GameState state, Card card)
	{
		Color faction = card.getFaction();
		if(state.getPlayer(faction).checkCPU())
		{
			HashMap<GameState, String> choiceMap = dayActionWithPhrases(state, card);
			
			GameState choice = state.getPlayer(faction)
					.chooseState(choiceMap.keySet().toArray(new GameState[0]), card);
			
			state.log(choiceMap.get(choice));
			return choice;
		}
		else
		{
			while(true)
			{
				Player p = state.getPlayer(faction);
				if(p.getDen().isEmpty()) //there are no pirates in the den to recruit
				{
					state.log("The Recruiter (" + card.abbreviate() + 
							") had nobody to recruit");
					return state;
				}
				
				Card choice = p.getGUI().makeChoice("Choose one of these cards to recruit from your den:",
						p.getDen().toArray(new Card[0]));
				
				for(Card c : p.getDen())
				{
					if(c.equals(choice)) //we remove the card chosen and add it back to the hand
					{
						state.log("The Recruiter (" + card.abbreviate() + 
								") recruited " + c.abbreviate() + " from " + Faction.getPirateName(faction) +
								"'s den to their hand");
						state.getPlayer(faction).removeFromDen(c);
						c.resetPhases();
						state.getPlayer(faction).addToHand(c);
						return state;
					}
				}
			}
		}
	}