List<ItemStack> filteredItems = new ArrayList<ItemStack>(VerifyUtil.withoutNulls(ItemUtil.filterItems(items, pFilters, pExceptions)));
if(filteredItems.isEmpty())
continue;
Dropper dropper = (Dropper) bl.getState();
List<ItemStack> newItems = new ArrayList<ItemStack>();
newItems.addAll(dropper.getInventory().addItem(filteredItems.toArray(new ItemStack[filteredItems.size()])).values());
for(ItemStack stack : dropper.getInventory().getContents())
if(ItemUtil.isStackValid(stack))
for(int i = 0; i < stack.getAmount(); i++)
dropper.drop();
items.removeAll(filteredItems);
items.addAll(newItems);
if (!items.isEmpty()) searchNearbyPipes(block, visitedPipes, items, filters, exceptions);