public static TravelingItem findRouteForItem(ItemStack item, Iterator<Route<DuctUnitItem, GridItem>> routes, DuctUnitItem duct, int side, int maxRange, byte speed) {
if (item.isEmpty() || item.getCount() == 0) {
return null;
}
item = item.copy();
if (item.getCount() == 0) {
return null;
}
while (routes.hasNext()) {
Route<DuctUnitItem, GridItem> outputRoute = routes.next();
if (outputRoute.pathDirections.size() <= maxRange) {
int amountRemaining = outputRoute.endPoint.canRouteItem(item, outputRoute.getLastSide());
if (amountRemaining != -1) {
int stackSize = item.getCount() - amountRemaining;
if (stackSize <= 0) {
continue;
}
Route itemRoute = outputRoute.copy();
item.setCount(stackSize);
return new TravelingItem(item, duct, itemRoute, (byte) (side ^ 1), speed);
}
}
}
return null;
}