From a9a119e172be6fc5186ea28f9c364ebc95a28cb9 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 9 Jul 2021 22:16:29 -0300 Subject: [PATCH 1/7] default foliage color has to be fixed on the server since its actually part of client resourcepack. Fixes #992 --- src/main/java/carpet/script/utils/BiomeInfo.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/carpet/script/utils/BiomeInfo.java b/src/main/java/carpet/script/utils/BiomeInfo.java index 30a003b9..2394cddb 100644 --- a/src/main/java/carpet/script/utils/BiomeInfo.java +++ b/src/main/java/carpet/script/utils/BiomeInfo.java @@ -21,20 +21,13 @@ import java.util.function.BiFunction; public class BiomeInfo { - // copy of from Biome.getDefaultFoliageColor - private static int getDefaultFoliageColor(Biome b) { - double d = MathHelper.clamp(b.getTemperature(), 0.0F, 1.0F); - double e = MathHelper.clamp(b.getDownfall(), 0.0F, 1.0F); - return FoliageColors.getColor(d, e); - } - public final static Map> biomeFeatures = new HashMap>(){{ put("top_material", (w, b) -> new BlockValue( b.getGenerationSettings().getSurfaceConfig().getTopMaterial(), null, null)); put("under_material", (w, b) -> new BlockValue( b.getGenerationSettings().getSurfaceConfig().getUnderMaterial(), null, null)); put("category", (w, b) -> StringValue.of(b.getCategory().getName())); put("temperature", (w, b) -> NumericValue.of(b.getTemperature())); put("fog_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMFogColor())); - put("foliage_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMFoliageColor().orElseGet(() -> getDefaultFoliageColor(b)))); + put("foliage_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMFoliageColor().orElse(4764952))); // client Biome.getDefaultFoliageColor put("sky_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMSkyColor())); put("water_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMWaterColor())); put("water_fog_color", (w, b) -> ValueConversions.ofRGB(((BiomeEffectsInterface)b.getEffects()).getCMWaterFogColor())); From 376f0ac0d9052e8920d89edddd0278370cb363de Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 9 Jul 2021 22:49:57 -0300 Subject: [PATCH 2/7] scriptACE does not specify valid options. Fixes #993 --- src/main/java/carpet/CarpetSettings.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 3b5aee76..b3c4018c 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -434,6 +434,7 @@ public class CarpetSettings "have when running commands with run()" }, category = {SCARPET}, + options = {"ops", "0", "1", "2", "3", "4"}, validate = {Validator._COMMAND_LEVEL_VALIDATOR.class, ModulePermissionLevel.class} ) public static String commandScriptACE = "ops"; From 3d38030379b511c08156f874a9c21be5d2375fcf Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 9 Jul 2021 23:21:16 -0300 Subject: [PATCH 3/7] appstore could be set from conf --- src/main/java/carpet/CarpetSettings.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index b3c4018c..8092f9e3 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -466,6 +466,7 @@ public class CarpetSettings "using //contents/" }, category = SCARPET, + strict = false, validate= AppStoreManager.ScarpetAppStoreValidator.class ) public static String scriptsAppStore = "gnembon/scarpet/contents/programs"; From 0c5f828b3bc084a634dd47efa8db4b3f5a665af9 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 10 Jul 2021 02:18:55 -0300 Subject: [PATCH 4/7] unused --- src/main/java/carpet/script/CarpetEventServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index c92620b6..367a3f4d 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -987,6 +987,7 @@ public class CarpetEventServer public final String name; public final CallbackList handler; + @Deprecated public final boolean globalOnly; public final boolean isPublic; // public events can be targetted with __on_ defs public Event(String name, int reqArgs, boolean isGlobalOnly) From 7421e566705aca76ecdbbb235813ec7f9defb075 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 10 Jul 2021 18:03:40 -0300 Subject: [PATCH 5/7] customized failed rules behaviour --- src/main/java/carpet/settings/ParsedRule.java | 2 +- src/main/java/carpet/settings/Validator.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/carpet/settings/ParsedRule.java b/src/main/java/carpet/settings/ParsedRule.java index ceec2686..7ec3bff6 100644 --- a/src/main/java/carpet/settings/ParsedRule.java +++ b/src/main/java/carpet/settings/ParsedRule.java @@ -163,7 +163,7 @@ public final class ParsedRule implements Comparable { { if (source != null) { - Messenger.m(source, "r Wrong value for " + name + ": " + stringValue); + validator.notifyFailure(source, this, stringValue); if (validator.description() != null) Messenger.m(source, "r " + validator.description()); } diff --git a/src/main/java/carpet/settings/Validator.java b/src/main/java/carpet/settings/Validator.java index 3afa6dd4..951af824 100644 --- a/src/main/java/carpet/settings/Validator.java +++ b/src/main/java/carpet/settings/Validator.java @@ -16,6 +16,10 @@ public abstract class Validator */ public abstract T validate(ServerCommandSource source, ParsedRule currentRule, T newValue, String string); public String description() {return null;} + public void notifyFailure(ServerCommandSource source, ParsedRule currentRule, String providedValue) + { + Messenger.m(source, "r Wrong value for " + currentRule.name + ": " + providedValue); + } public static class _COMMAND extends Validator { From 9e86407323f7f754187f62c8b515984da8432739 Mon Sep 17 00:00:00 2001 From: RubixDev <35602040+RubixDev@users.noreply.github.com> Date: Sun, 11 Jul 2021 02:40:21 +0200 Subject: [PATCH 6/7] Add condition argument to Rule annotation (#998) --- src/main/java/carpet/settings/Condition.java | 5 +++++ src/main/java/carpet/settings/Rule.java | 5 +++++ .../java/carpet/settings/SettingsManager.java | 19 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/carpet/settings/Condition.java diff --git a/src/main/java/carpet/settings/Condition.java b/src/main/java/carpet/settings/Condition.java new file mode 100644 index 00000000..198389fe --- /dev/null +++ b/src/main/java/carpet/settings/Condition.java @@ -0,0 +1,5 @@ +package carpet.settings; + +public interface Condition { + boolean isTrue(); +} diff --git a/src/main/java/carpet/settings/Rule.java b/src/main/java/carpet/settings/Rule.java index 365d4cb3..1e638645 100644 --- a/src/main/java/carpet/settings/Rule.java +++ b/src/main/java/carpet/settings/Rule.java @@ -64,4 +64,9 @@ public @interface Rule * The class of the validator checked when the rule is changed. */ Class[] validate() default {}; + + /** + * The class of the condition checked when the rule is parsed. + */ + Class[] condition() default {}; } diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index 9909ac55..9332b943 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -30,6 +30,7 @@ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.PrintStream; +import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.nio.file.Files; import java.nio.file.NoSuchFileException; @@ -143,7 +144,23 @@ public class SettingsManager Rule rule = f.getAnnotation(Rule.class); if (rule == null) continue; ParsedRule parsed = new ParsedRule(f, rule, this); - rules.put(parsed.name, parsed); + + List conditions = new ArrayList<>(); + for (Class condition : rule.condition()) { + try + { + Constructor constr = condition.getDeclaredConstructor(); + constr.setAccessible(true); + conditions.add(((Condition) constr.newInstance()).isTrue()); + } + catch (ReflectiveOperationException e) + { + throw new RuntimeException(e); + } + } + + if (rule.condition().length == 0 || conditions.stream().allMatch(Boolean::valueOf)) + rules.put(parsed.name, parsed); } } From 7d4eeb464b9166b6b8220f35c96a4effda1da8aa Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 10 Jul 2021 21:49:50 -0300 Subject: [PATCH 7/7] short circuit rules condition checking --- src/main/java/carpet/settings/SettingsManager.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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); } }