/**
   * Calculate what resources this player will get on each die roll, optionally taking the robber
   * into account.
   *
   * @param numbers the numbers that the player is touching
   * @param robberHex Robber location from {@link SOCBoard#getRobberHex()}, or -1 to ignore the
   *     robber
   */
  public void recalculateResourcesForRoll(SOCPlayerNumbers numbers, final int robberHex) {
    // D.ebugPrintln("@@@@@@@@ recalculateResourcesForRoll");
    // D.ebugPrintln("@@@@@@@@ numbers = "+numbers);
    // D.ebugPrintln("@@@@@@@@ robberHex = "+Integer.toHexString(robberHex));
    recalc = true;

    for (int diceResult = 2; diceResult <= 12; diceResult++) {
      Vector<Integer> resources =
          (robberHex != -1)
              ? numbers.getResourcesForNumber(diceResult, robberHex)
              : numbers.getResourcesForNumber(diceResult);

      if (resources != null) {
        SOCResourceSet resourceSet = resourcesForRoll[diceResult];

        if (resourceSet == null) {
          resourceSet = new SOCResourceSet();
          resourcesForRoll[diceResult] = resourceSet;
        } else {
          resourceSet.clear();
        }

        Enumeration<Integer> resourcesEnum = resources.elements();

        while (resourcesEnum.hasMoreElements()) {
          Integer resourceInt = resourcesEnum.nextElement();
          resourceSet.add(1, resourceInt.intValue());
        }

        // D.ebugPrintln("### resources for "+diceResult+" = "+resourceSet);
      }
    }
  }