if(!r.isValidCache()) continue; //Skip Routers without a valid pipe
List<ExitRoute> e = this.target.getRouter().getDistanceTo(r);
if (e!=null) validSources.addAll(e);
}
workWeightedSorter wSorter = new workWeightedSorter(0); // distance doesn't matter, because ingredients have to be delivered to the crafter, and we can't tell how long that will take.
Collections.sort(validSources, wSorter);
List<Pair<CraftingTemplate, List<IFilter>>> allCraftersForItem = getCrafters(this.getStackItem(), validSources);
// if you have a crafter which can make the top treeNode.getStack().getItem()