diff --git a/src/main/java/com/jcloisterzone/feature/City.java b/src/main/java/com/jcloisterzone/feature/City.java index 0404ff25..8b58f52a 100644 --- a/src/main/java/com/jcloisterzone/feature/City.java +++ b/src/main/java/com/jcloisterzone/feature/City.java @@ -145,7 +145,7 @@ public PointsExpression getStructurePoints(GameState state, boolean completed) { exprItems.add(new ExprItem("darmstadtium", 3)); } - scoreScriptedModifiers(exprItems, java.util.Map.of("tiles", tileCount, "completed", completed)); + scoreScriptedModifiers(state, exprItems, java.util.Map.of("tiles", tileCount, "completed", completed)); } String name = "city"; diff --git a/src/main/java/com/jcloisterzone/feature/Field.java b/src/main/java/com/jcloisterzone/feature/Field.java index c6c38b74..a3d93af1 100644 --- a/src/main/java/com/jcloisterzone/feature/Field.java +++ b/src/main/java/com/jcloisterzone/feature/Field.java @@ -176,7 +176,7 @@ private PointsExpression getCityPoints(GameState state, String exprName, int poi } } - scoreScriptedModifiers(exprItems, java.util.Map.of("cities", cityCount, "castles", castleCount)); + scoreScriptedModifiers(state, exprItems, java.util.Map.of("cities", cityCount, "castles", castleCount)); return new PointsExpression(exprName, List.ofAll(exprItems)); } diff --git a/src/main/java/com/jcloisterzone/feature/ModifiedFeature.java b/src/main/java/com/jcloisterzone/feature/ModifiedFeature.java index d2206826..0ed89fd9 100644 --- a/src/main/java/com/jcloisterzone/feature/ModifiedFeature.java +++ b/src/main/java/com/jcloisterzone/feature/ModifiedFeature.java @@ -33,8 +33,10 @@ default T getModifier(GameState state, FeatureModifier modifier, T defaul return (T) getModifiers().get((FeatureModifier) modifier).getOrElse(defaultValue); } - default Set> getScriptedModifiers() { - return getModifiers().keySet().filter(mod -> mod.getScoringScript() != null); + default Set> getScriptedModifiers(GameState state) { + return getModifiers().keySet().filter(mod -> + mod.getScoringScript() != null && (mod.getEnabledBy() == null || mod.getEnabledBy().apply(state)) + ); } default Map, Object> mergeModifiers(ModifiedFeature other) { @@ -71,8 +73,8 @@ default Map, Object> mergeModifiers(Map, O return HashMap.ofEntries(entries); } - default void scoreScriptedModifiers(java.util.List exprItems, java.util.Map members) { - Set> scriptedModifiers = getScriptedModifiers(); + default void scoreScriptedModifiers(GameState state, java.util.List exprItems, java.util.Map members) { + Set> scriptedModifiers = getScriptedModifiers(state); if (!scriptedModifiers.isEmpty()) { try (Context context = Context.create("js")) { Value bindings = context.getBindings("js"); diff --git a/src/main/java/com/jcloisterzone/feature/Monastery.java b/src/main/java/com/jcloisterzone/feature/Monastery.java index 064f2367..b2a58dd7 100644 --- a/src/main/java/com/jcloisterzone/feature/Monastery.java +++ b/src/main/java/com/jcloisterzone/feature/Monastery.java @@ -151,7 +151,7 @@ public PointsExpression getStructurePoints(GameState state, boolean completed) { } String baseName = isShrine(state) ? "shrine" : "monastery"; - scoreScriptedModifiers(exprItems, java.util.Map.of("tiles", adjacent + 1, "completed", completed)); + scoreScriptedModifiers(state, exprItems, java.util.Map.of("tiles", adjacent + 1, "completed", completed)); return new PointsExpression(completed ? baseName : baseName + ".incomplete", List.ofAll(exprItems)); } diff --git a/src/main/java/com/jcloisterzone/feature/Road.java b/src/main/java/com/jcloisterzone/feature/Road.java index 7a748c01..f6d3f3b3 100644 --- a/src/main/java/com/jcloisterzone/feature/Road.java +++ b/src/main/java/com/jcloisterzone/feature/Road.java @@ -173,7 +173,7 @@ public PointsExpression getStructurePoints(GameState state, boolean completed) { exprItems.add(new ExprItem(meeplesCount, "meeples", 2 * meeplesCount)); } - scoreScriptedModifiers(exprItems, java.util.Map.of("tiles", tileCount, "completed", completed)); + scoreScriptedModifiers(state, exprItems, java.util.Map.of("tiles", tileCount, "completed", completed)); return new PointsExpression(completed ? "road" : "road.incomplete", List.ofAll(exprItems)); }