From 8286c0b96bf4f578a6be4efe9354857a62d08df4 Mon Sep 17 00:00:00 2001 From: Fff <141797114+WhereisFff@users.noreply.github.com> Date: Sun, 4 Oct 2026 06:23:32 -0700 Subject: [PATCH] =?UTF-8?q?fix(predicate):=20=E4=BF=AE=E5=A4=8D=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E7=8A=B6=E6=80=81=E7=9A=84=E5=B1=9E=E6=80=A7=E7=BB=84?= =?UTF-8?q?=E5=90=88=E4=B8=8E=E8=8C=83=E5=9B=B4=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/v2/util/predicate/BlockStatePredicate.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java b/module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java index a82b0ab0..41d432aa 100644 --- a/module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java +++ b/module.util/src/main/java/dev/anvilcraft/lib/v2/util/predicate/BlockStatePredicate.java @@ -243,9 +243,17 @@ public List constructStatesForRender() { } for (Holder blockHolder : this.blocks) { for (List matchers : this.properties) { + List candidates = List.of(blockHolder.value().defaultBlockState()); for (PropertyMatcher matcher : matchers) { - states.addAll(matcher.applyToState(blockHolder.value().getStateDefinition(), blockHolder.value().defaultBlockState())); + candidates = candidates.stream() + .flatMap(state -> matcher.applyToState(blockHolder.value().getStateDefinition(), state).stream()) + .distinct() + .toList(); } + candidates.stream() + .filter(state -> matchers.stream() + .allMatch(matcher -> matcher.match(blockHolder.value().getStateDefinition(), state))) + .forEach(states::add); } } this.statesCache = List.copyOf(states); @@ -619,9 +627,9 @@ public , S extends StateHolder> List applyToSta List states = new ArrayList<>(); property.getAllValues() .filter(value -> this.minValue.isEmpty() || this.minValue.flatMap(property::getValue) - .map(minValue -> value.value().compareTo(minValue) < 0).orElse(false)) + .map(minValue -> value.value().compareTo(minValue) >= 0).orElse(false)) .filter(value -> this.maxValue.isEmpty() || this.maxValue.flatMap(property::getValue) - .map(maxValue -> value.value().compareTo(maxValue) > 0).orElse(false)) + .map(maxValue -> value.value().compareTo(maxValue) <= 0).orElse(false)) .forEachOrdered(value -> states.add(state.setValue(property, value.value()))); return List.copyOf(states); }