Пример #1
0
  /**
   * Attempts to take all of the items defined by isItemsToTake or a simple part (1/2 of all request
   * items, 1/4, etc.)
   *
   * @param isItemsToTake Items to take as a whole or an equal part of each individual stack
   * @return A map filled with the items that can be taken which may be the same as specified by
   *     isItemsToTake or a part. Returns an empty map in case of failure.
   */
  public HashMap<ItemStack[], Double> variableAmount(ItemStack[] isItemsToTake) {
    ItemStack[] isBackup = getBackupItemStack(isItemsToTake);
    HashMap<ItemStack[], Double> returnMap = new HashMap<ItemStack[], Double>();
    returnMap.put(isItemsToTake, 1.0d);
    Boolean fromOK = hasItems(isBackup);

    if (fromOK) {
      returnMap.put(isItemsToTake, 1.0d);
      return returnMap;
    } else if (!SignShopConfig.getAllowVariableAmounts() && !fromOK) {
      returnMap.put(isItemsToTake, 0.0d);
      return returnMap;
    }
    returnMap.put(isItemsToTake, 0.0d);
    double iCount = 0;
    double tempCount;
    int i = 0;
    HashMap<ItemStack, Integer> mItemsToTake = StackToMap(isBackup);
    HashMap<ItemStack, Integer> mInventory = StackToMap(inventory.getContents());
    ItemStack[] isActual = new ItemStack[mItemsToTake.size()];
    for (Map.Entry<ItemStack, Integer> entry : mItemsToTake.entrySet()) {
      if (iCount == 0 && mInventory.containsKey(entry.getKey()))
        iCount = ((double) mInventory.get(entry.getKey()) / (double) entry.getValue());
      else if (iCount != 0 && mInventory.containsKey(entry.getKey())) {
        tempCount = ((double) mInventory.get(entry.getKey()) / (double) entry.getValue());
        if (tempCount != iCount) return returnMap;
      } else return returnMap;

      isActual[i] = itemUtil.getBackupSingleItemStack(entry.getKey());
      isActual[i].setAmount(mInventory.get(entry.getKey()));

      i++;
    }
    returnMap.clear();
    returnMap.put(isActual, iCount);
    return returnMap;
  }