From ed90163b1c844ca794078f7ade9ae12b2326eeac Mon Sep 17 00:00:00 2001 From: Fff Date: Tue, 14 Jul 2026 00:29:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=B1=BC=E7=BC=B8=E5=8A=A0?= =?UTF-8?q?=E5=B7=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/v2/recipe/InWorldRecipe.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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 +}