}
public static int transferAllItems(Collection<InventoryHolder> fromHolders, Collection<InventoryHolder> toHolders, ItemParser itemParser, boolean isFuelPreferred) {
int amount, transferred = 0;
for (InventoryHolder fromHolder : fromHolders) {
Inventory from = fromHolder.getInventory();
// Averaged?
if (itemParser instanceof AveragedItemParser) {
// Perform 'one by one' logic - which is a lot slower
final int totalAmount = itemParser.hasAmount() ? itemParser.getAmount() : Integer.MAX_VALUE;
final ItemParser single = itemParser.setAmount(1);
boolean continueTransferring;
int transferredAmount = 0;
do {
// Start of the loop: If nothing is transferred, break it.
continueTransferring = false;
// Go by all inventories
for (InventoryHolder toHolder : toHolders) {
Inventory to = toHolder.getInventory();
amount = transferItems(from, to, single, isFuelPreferred);
if (amount > 0) {
transferred += amount;
transferredAmount += amount;
// Continue transferring? Evaluate the current transfer amount
if (!(continueTransferring = (transferredAmount < totalAmount))) {
break;
}
}
}
} while (continueTransferring);
} else {
// Perform regular item transfer: fill one by one
for (InventoryHolder toHolder : toHolders) {
Inventory to = toHolder.getInventory();
amount = transferItems(from, to, itemParser, isFuelPreferred);
transferred += amount;
// Update item parser amount
if (amount > 0 && itemParser.hasAmount()) {
itemParser = itemParser.setAmount(itemParser.getAmount() - amount);