diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index 9332b943..b2fdd9e7 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -139,28 +139,25 @@ public class SettingsManager */ public void parseSettingsClass(Class settingsClass) { - for (Field f : settingsClass.getDeclaredFields()) + rule: for (Field f : settingsClass.getDeclaredFields()) { Rule rule = f.getAnnotation(Rule.class); if (rule == null) continue; - ParsedRule parsed = new ParsedRule(f, rule, this); - - List conditions = new ArrayList<>(); + ParsedRule parsed = new ParsedRule<>(f, rule, this); for (Class condition : rule.condition()) { try { Constructor constr = condition.getDeclaredConstructor(); constr.setAccessible(true); - conditions.add(((Condition) constr.newInstance()).isTrue()); + if (!((Condition) constr.newInstance()).isTrue()) + continue rule; } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } } - - if (rule.condition().length == 0 || conditions.stream().allMatch(Boolean::valueOf)) - rules.put(parsed.name, parsed); + rules.put(parsed.name, parsed); } }