private boolean drawCardFromPublic(Player player, Card card, boolean inHand) {
        if (player.playerAction() == PlayerAction.GAIN) {
            if (player.phase() == Phase.BUY) {
                Preconditions.checkArgument(player.coinAllowrance >= card.cost());
            }
            if (publicCards.removeOneCard(card)) {
                if (inHand) {
                    player.hand.addOneCard(card);
                } else {
                    player.discardPile.addOneCard(card);
                }
                return true;
            }
        }
        return false;
    }