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); }