diff --git a/module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/InWorldRecipe.java b/module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/InWorldRecipe.java index 4ad68bab..1cd2f91d 100644 --- a/module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/InWorldRecipe.java +++ b/module.recipe/src/main/java/dev/anvilcraft/lib/v2/recipe/InWorldRecipe.java @@ -226,9 +226,10 @@ public static int calcPriority( */ @Override public boolean matches(InWorldRecipeContext context, Level level) { + int initialStackSize = context.getStack().size(); boolean nonConflicting = ShapelessMatcher.compatible(this.nonConflicting, context); if (!nonConflicting) { - context.getStack().clear(); + InWorldRecipe.rollbackPredicates(context, initialStackSize); return false; } boolean flag; @@ -238,10 +239,21 @@ public boolean matches(InWorldRecipeContext context, Level level) { flag = ShapelessMatcher.incompatible(this.conflicting, context); } if (!flag) { - context.getStack().clear(); + InWorldRecipe.rollbackPredicates(context, initialStackSize); + return false; + } + List> stack = context.getStack(); + for (int i = initialStackSize; i < stack.size(); i++) { + stack.get(i).clearStack(context); + } + return true; + } + + private static void rollbackPredicates(InWorldRecipeContext context, int initialStackSize) { + List> stack = context.getStack(); + while (stack.size() > initialStackSize) { + context.pop(stack.getLast()); } - context.getStack().forEach(predicate -> predicate.clearStack(context)); - return flag; } /** @@ -476,4 +488,4 @@ private static List> decodeRecipePredicateList( return predicates; } } -} \ No newline at end of file +}