Skip to content

Commit 19b5a76

Browse files
committed
Cull empty ItemStacks from RecipeMap::findRecipe()
When matching against each Recipe's ingredients, even these empty slots were considered. Should improve lookup performance, particularly with large mostly-empty buses.
1 parent 050d129 commit 19b5a76

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

src/main/java/gregtech/api/recipes/RecipeMap.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import java.util.function.DoubleSupplier;
4444
import java.util.stream.Collectors;
4545

46+
import static gregtech.api.util.Predicates.not;
47+
4648
@ZenClass("mods.gregtech.recipe.RecipeMap")
4749
@ZenRegister
4850
public class RecipeMap<R extends RecipeBuilder<R>> implements SoundEmitter<RecipeMap<R>> {
@@ -248,6 +250,10 @@ public Recipe findRecipe(long voltage, IItemHandlerModifiable inputs, IMultipleT
248250
*/
249251
@Nullable
250252
public Recipe findRecipe(long voltage, List<ItemStack> inputs, List<FluidStack> fluidInputs, int outputFluidTankCapacity, MatchingMode matchingMode) {
253+
254+
// remove air inputs, so we don't iterate over them a million times
255+
inputs = inputs.stream().filter(not(ItemStack::isEmpty)).collect(Collectors.toList());
256+
251257
if (recipeList.isEmpty())
252258
return null;
253259
if (minFluidInputs > 0 && GTUtility.amountOfNonNullElements(fluidInputs) < minFluidInputs) {

0 commit comments

Comments
 (0)