From 208cbbd8e0f916b8652efb295fb13055d9c50114 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 17:22:29 -0700 Subject: [PATCH] addon initialization --- common/addons/api-addon-loader | 2 +- common/addons/biome-provider-image | 2 +- common/addons/biome-provider-pipeline | 2 +- common/addons/biome-provider-single | 2 +- common/addons/chunk-generator-noise-3d | 2 +- common/addons/config-biome | 2 +- common/addons/config-carver | 2 +- common/addons/config-distributors | 2 +- common/addons/config-flora | 2 +- common/addons/config-locators | 2 +- common/addons/config-noise-function | 2 +- common/addons/config-ore | 2 +- common/addons/config-palette | 2 +- common/addons/config-structure | 2 +- common/addons/generation-stage-feature | 2 +- common/addons/language-yaml | 2 +- common/addons/manifest-addon-loader | 2 +- common/addons/structure-sponge-loader | 2 +- common/addons/structure-terrascript-loader | 2 +- .../dfsek/terra/api/config/ConfigPack.java | 5 ++++- .../dfsek/terra/config/GenericLoaders.java | 3 +++ .../config/loaders/VersionRangeLoader.java | 22 +++++++++++++++++++ .../config/pack/ConfigPackAddonsTemplate.java | 10 +++++---- .../terra/config/pack/ConfigPackImpl.java | 7 +++--- .../event/FunctionalEventHandlerImpl.java | 2 +- 25 files changed, 59 insertions(+), 28 deletions(-) create mode 100644 common/implementation/src/main/java/com/dfsek/terra/config/loaders/VersionRangeLoader.java diff --git a/common/addons/api-addon-loader b/common/addons/api-addon-loader index 6e250ed49..bcea245c2 160000 --- a/common/addons/api-addon-loader +++ b/common/addons/api-addon-loader @@ -1 +1 @@ -Subproject commit 6e250ed495db23d88d252fb017cf0588f3d9057d +Subproject commit bcea245c217dead342bb927b81cc4cb6c8e27e5d diff --git a/common/addons/biome-provider-image b/common/addons/biome-provider-image index 8df4f9176..9e0444d5c 160000 --- a/common/addons/biome-provider-image +++ b/common/addons/biome-provider-image @@ -1 +1 @@ -Subproject commit 8df4f9176e4d2c4efc9cde26837067d59e1a4393 +Subproject commit 9e0444d5c46fa7c96eb80685e8782fbcf3c63897 diff --git a/common/addons/biome-provider-pipeline b/common/addons/biome-provider-pipeline index 5892c95cc..21316418d 160000 --- a/common/addons/biome-provider-pipeline +++ b/common/addons/biome-provider-pipeline @@ -1 +1 @@ -Subproject commit 5892c95ccbe2885aef95e01fb8e5650f9ad947ca +Subproject commit 21316418dafd46de2035d5f16e72f3312eeb0c8c diff --git a/common/addons/biome-provider-single b/common/addons/biome-provider-single index da104d0a6..fe5a6f5ec 160000 --- a/common/addons/biome-provider-single +++ b/common/addons/biome-provider-single @@ -1 +1 @@ -Subproject commit da104d0a6523fde205b6fb9c82226dd20682603c +Subproject commit fe5a6f5ec0707515316debafda010c1aaa302259 diff --git a/common/addons/chunk-generator-noise-3d b/common/addons/chunk-generator-noise-3d index 0e0652491..6dd30020d 160000 --- a/common/addons/chunk-generator-noise-3d +++ b/common/addons/chunk-generator-noise-3d @@ -1 +1 @@ -Subproject commit 0e06524911da594e508262155525bdcfa1ce6fff +Subproject commit 6dd30020de9c82fd374272d514a09687ab1bae4c diff --git a/common/addons/config-biome b/common/addons/config-biome index b0256d2f5..86742e212 160000 --- a/common/addons/config-biome +++ b/common/addons/config-biome @@ -1 +1 @@ -Subproject commit b0256d2f5f97c22d337683ca13cbc1ffd2260a7a +Subproject commit 86742e212c9d2df393ce80716824ef7ffa847608 diff --git a/common/addons/config-carver b/common/addons/config-carver index e61fa64bf..5e7d8084d 160000 --- a/common/addons/config-carver +++ b/common/addons/config-carver @@ -1 +1 @@ -Subproject commit e61fa64bf8e2fa395e47296fb99f1f179b8bf158 +Subproject commit 5e7d8084de003664be0e08b924d98c4c598ef585 diff --git a/common/addons/config-distributors b/common/addons/config-distributors index ad2e4f20e..63f907860 160000 --- a/common/addons/config-distributors +++ b/common/addons/config-distributors @@ -1 +1 @@ -Subproject commit ad2e4f20e809a52befd20f575161d5b593408ecf +Subproject commit 63f9078601657ce79cfd7a94c926ccbb63eed73a diff --git a/common/addons/config-flora b/common/addons/config-flora index b097f3e27..0fe48c6d7 160000 --- a/common/addons/config-flora +++ b/common/addons/config-flora @@ -1 +1 @@ -Subproject commit b097f3e270daa93a240ee86a8b0857b69379ac94 +Subproject commit 0fe48c6d7bd03dffc9ca5d7ef35baa9b29ca53fa diff --git a/common/addons/config-locators b/common/addons/config-locators index 2249b8cab..9aca4dad9 160000 --- a/common/addons/config-locators +++ b/common/addons/config-locators @@ -1 +1 @@ -Subproject commit 2249b8cab4ec3063887110efe584d60ca55e5481 +Subproject commit 9aca4dad904dc1e0b4a4e2e8cb89683e68890aa7 diff --git a/common/addons/config-noise-function b/common/addons/config-noise-function index 3fd6b1cbd..2d8de2687 160000 --- a/common/addons/config-noise-function +++ b/common/addons/config-noise-function @@ -1 +1 @@ -Subproject commit 3fd6b1cbdb7cad9dc68208c9622c5a311be9660d +Subproject commit 2d8de2687e4521363b911be961b3a8ea154f5e69 diff --git a/common/addons/config-ore b/common/addons/config-ore index 56ff75af0..0b6991033 160000 --- a/common/addons/config-ore +++ b/common/addons/config-ore @@ -1 +1 @@ -Subproject commit 56ff75af0d44c2c49aa770167fb7fd5b65839550 +Subproject commit 0b6991033d2e8c762536b9861419964bf7440bbb diff --git a/common/addons/config-palette b/common/addons/config-palette index 51013ccc5..46fd70e97 160000 --- a/common/addons/config-palette +++ b/common/addons/config-palette @@ -1 +1 @@ -Subproject commit 51013ccc555e1f21dca04646e38215c8143674ba +Subproject commit 46fd70e9715ca832ca915c8da6e73f4aa8e854f9 diff --git a/common/addons/config-structure b/common/addons/config-structure index 9059b861e..0ca3c86b4 160000 --- a/common/addons/config-structure +++ b/common/addons/config-structure @@ -1 +1 @@ -Subproject commit 9059b861e7551c6923b5b52a7c2434913302aa7f +Subproject commit 0ca3c86b4d0b16870ecb96f6533f7bcd53458e05 diff --git a/common/addons/generation-stage-feature b/common/addons/generation-stage-feature index 3070a11d7..0d359ca0a 160000 --- a/common/addons/generation-stage-feature +++ b/common/addons/generation-stage-feature @@ -1 +1 @@ -Subproject commit 3070a11d7610adbff4aef8f5f5341f6fadc9e9c4 +Subproject commit 0d359ca0af30b2bf2a8b383ecba0976ad7f00e71 diff --git a/common/addons/language-yaml b/common/addons/language-yaml index 032c1b45d..1a34bf0bc 160000 --- a/common/addons/language-yaml +++ b/common/addons/language-yaml @@ -1 +1 @@ -Subproject commit 032c1b45ddfa6f65c2398b63f7d6e407fbdc7c14 +Subproject commit 1a34bf0bcbdc1b032437baa5e4fdf93e7dbba60c diff --git a/common/addons/manifest-addon-loader b/common/addons/manifest-addon-loader index 31456bf9c..7ef78d5d7 160000 --- a/common/addons/manifest-addon-loader +++ b/common/addons/manifest-addon-loader @@ -1 +1 @@ -Subproject commit 31456bf9cd9bffdefbac263a4e62b74c8b58ea21 +Subproject commit 7ef78d5d79ea03c86d6fa47730ad3473447389a1 diff --git a/common/addons/structure-sponge-loader b/common/addons/structure-sponge-loader index c6f85221c..0058c9420 160000 --- a/common/addons/structure-sponge-loader +++ b/common/addons/structure-sponge-loader @@ -1 +1 @@ -Subproject commit c6f85221c06f5311b2cc62d6f0d5eafc660e2544 +Subproject commit 0058c94206906bdb023ac711f0936ee53d1725d3 diff --git a/common/addons/structure-terrascript-loader b/common/addons/structure-terrascript-loader index a21413314..4561fffc2 160000 --- a/common/addons/structure-terrascript-loader +++ b/common/addons/structure-terrascript-loader @@ -1 +1 @@ -Subproject commit a21413314abfd94f51e35de445719ca45e84315f +Subproject commit 4561fffc278a01263d01daf26e37a7ba143aa99b diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java index 7a3412c81..e170c76c3 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import ca.solostudios.strata.version.VersionRange; + +import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.meta.RegistryFactory; @@ -24,7 +27,7 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde void registerConfigType(ConfigType type, String id, int priority); - Set addons(); + Map addons(); boolean vanillaMobs(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java b/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java index 9f3237ccd..e5f652a7d 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java @@ -1,5 +1,6 @@ package com.dfsek.terra.config; +import ca.solostudios.strata.version.VersionRange; import com.dfsek.tectonic.loading.TypeRegistry; import java.util.LinkedHashMap; @@ -16,6 +17,7 @@ import com.dfsek.terra.config.loaders.LinkedHashMapLoader; import com.dfsek.terra.config.loaders.MaterialSetLoader; import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader; import com.dfsek.terra.config.loaders.RangeLoader; +import com.dfsek.terra.config.loaders.VersionRangeLoader; public class GenericLoaders implements LoaderRegistrar { @@ -30,6 +32,7 @@ public class GenericLoaders implements LoaderRegistrar { registry.registerLoader(ProbabilityCollection.class, new ProbabilityCollectionLoader()) .registerLoader(Range.class, new RangeLoader()) .registerLoader(MaterialSet.class, new MaterialSetLoader()) + .registerLoader(VersionRange.class, new VersionRangeLoader()) .registerLoader(LinkedHashMap.class, new LinkedHashMapLoader()); if(platform != null) { diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/VersionRangeLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/VersionRangeLoader.java new file mode 100644 index 000000000..f7243134d --- /dev/null +++ b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/VersionRangeLoader.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.config.loaders; + +import ca.solostudios.strata.Versions; +import ca.solostudios.strata.parser.tokenizer.ParseException; +import ca.solostudios.strata.version.VersionRange; +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.tectonic.loading.TypeLoader; + +import java.lang.reflect.AnnotatedType; + + +public class VersionRangeLoader implements TypeLoader { + @Override + public VersionRange load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException { + try { + return Versions.parseVersionRange((String) c); + } catch(ParseException e) { + throw new LoadException("Failed to parse version range: ", e); + } + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackAddonsTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackAddonsTemplate.java index 9d38317dd..e6f813211 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackAddonsTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackAddonsTemplate.java @@ -1,23 +1,25 @@ package com.dfsek.terra.config.pack; +import ca.solostudios.strata.version.VersionRange; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ConfigTemplate; +import java.util.HashMap; import java.util.HashSet; -import java.util.Set; +import java.util.Map; -import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.BaseAddon; @SuppressWarnings("FieldMayBeFinal") public class ConfigPackAddonsTemplate implements ConfigTemplate { @Value("addons") @Default - private Set addons = new HashSet<>(); + private Map addons = new HashMap<>(); - public Set getAddons() { + public Map getAddons() { return addons; } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index afd14ce4e..e793d377d 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -1,5 +1,6 @@ package com.dfsek.terra.config.pack; +import ca.solostudios.strata.version.VersionRange; import com.dfsek.paralithic.eval.parser.Scope; import com.dfsek.tectonic.abstraction.AbstractConfigLoader; import com.dfsek.tectonic.abstraction.AbstractConfiguration; @@ -34,7 +35,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; @@ -90,7 +91,7 @@ public class ConfigPackImpl implements ConfigPack { private final Configuration configuration; - private final Set addons; + private final Map addons; private final BiomeProvider seededBiomeProvider; @@ -237,7 +238,7 @@ public class ConfigPackImpl implements ConfigPack { } @Override - public Set addons() { + public Map addons() { return addons; } diff --git a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java index e7b6abea6..2143c10e4 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/event/FunctionalEventHandlerImpl.java @@ -35,7 +35,7 @@ public class FunctionalEventHandlerImpl implements FunctionalEventHandler { contextMap.getOrDefault(event.getClass(), Collections.emptyList()).forEach(context -> { try { if(event instanceof PackEvent) { - if((context.isGlobal() || ((PackEvent) event).getPack().addons().contains(context.getAddon()))) { + if((context.isGlobal() || ((PackEvent) event).getPack().addons().containsKey(context.getAddon()))) { ((EventContextImpl) context).handle(event); } } else {