From 72e9e0cf9af8cdcaa50955845956069f10ad2407 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 17 Oct 2021 14:44:13 -0700 Subject: [PATCH 1/8] Initial commit --- common/addons/config-feature/build.gradle.kts | 2 + .../addons/feature/ConfiguredFeature.java | 41 +++++++++++++++ .../terra/addons/feature/FeatureAddon.java | 28 ++++++++++ .../addons/feature/FeatureConfigType.java | 39 ++++++++++++++ .../terra/addons/feature/FeatureFactory.java | 15 ++++++ .../terra/addons/feature/FeatureTemplate.java | 52 +++++++++++++++++++ 6 files changed, 177 insertions(+) create mode 100644 common/addons/config-feature/build.gradle.kts create mode 100644 common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java create mode 100644 common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java create mode 100644 common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java create mode 100644 common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java create mode 100644 common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java diff --git a/common/addons/config-feature/build.gradle.kts b/common/addons/config-feature/build.gradle.kts new file mode 100644 index 000000000..7d82dc72f --- /dev/null +++ b/common/addons/config-feature/build.gradle.kts @@ -0,0 +1,2 @@ +dependencies { +} diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java new file mode 100644 index 000000000..8fe4eab9e --- /dev/null +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java @@ -0,0 +1,41 @@ +package com.dfsek.terra.addons.feature; + +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.structure.feature.Distributor; +import com.dfsek.terra.api.structure.feature.Feature; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.api.world.World; + + +public class ConfiguredFeature implements Feature { + private final ProbabilityCollection structures; + + private final NoiseSampler structureSelector; + private final Distributor distributor; + private final Locator locator; + + public ConfiguredFeature(ProbabilityCollection structures, NoiseSampler structureSelector, Distributor distributor, + Locator locator) { + this.structures = structures; + this.structureSelector = structureSelector; + this.distributor = distributor; + this.locator = locator; + } + + @Override + public Structure getStructure(World world, int x, int y, int z) { + return structures.get(structureSelector, x, y, z, world.getSeed()); + } + + @Override + public Distributor getDistributor() { + return distributor; + } + + @Override + public Locator getLocator() { + return locator; + } +} diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java new file mode 100644 index 000000000..64568b40a --- /dev/null +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.addons.feature; + +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.inject.annotations.Inject; + + +@Addon("config-feature") +@Version("1.0.0") +@Author("Terra") +public class FeatureAddon extends TerraAddon { + @Inject + private Platform platform; + + @Override + public void initialize() { + platform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack().registerConfigType(new FeatureConfigType(), "FEATURE", 3)) + .failThrough(); + } +} diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java new file mode 100644 index 000000000..cb761e5e2 --- /dev/null +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java @@ -0,0 +1,39 @@ +package com.dfsek.terra.addons.feature; + +import java.util.function.Supplier; + +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.config.ConfigFactory; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.structure.feature.Feature; +import com.dfsek.terra.api.util.reflection.TypeKey; + + +public class FeatureConfigType implements ConfigType { + public static final TypeKey FEATURE_TYPE_KEY = new TypeKey<>() { + }; + + private final FeatureFactory factory = new FeatureFactory(); + + @Override + public Supplier> registrySupplier(ConfigPack pack) { + return pack.getRegistryFactory()::create; + } + + @Override + public FeatureTemplate getTemplate(ConfigPack pack, Platform platform) { + return new FeatureTemplate(); + } + + @Override + public ConfigFactory getFactory() { + return factory; + } + + @Override + public TypeKey getTypeKey() { + return FEATURE_TYPE_KEY; + } +} diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java new file mode 100644 index 000000000..7ad615929 --- /dev/null +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java @@ -0,0 +1,15 @@ +package com.dfsek.terra.addons.feature; + +import com.dfsek.tectonic.exception.LoadException; + +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.config.ConfigFactory; +import com.dfsek.terra.api.structure.feature.Feature; + + +public class FeatureFactory implements ConfigFactory { + @Override + public Feature build(FeatureTemplate config, Platform platform) throws LoadException { + return new ConfiguredFeature(config.getStructures(), config.getStructureNoise(), config.getDistributor(), config.getLocator()); + } +} diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java new file mode 100644 index 000000000..1357987a2 --- /dev/null +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java @@ -0,0 +1,52 @@ +package com.dfsek.terra.addons.feature; + +import com.dfsek.tectonic.annotations.Final; +import com.dfsek.tectonic.annotations.Value; + +import com.dfsek.terra.api.config.AbstractableTemplate; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.structure.feature.Distributor; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; + + +public class FeatureTemplate implements AbstractableTemplate { + @Value("id") + @Final + private String id; + + @Value("distributor") + private @Meta Distributor distributor; + + @Value("locator") + private @Meta Locator locator; + + @Value("structures.distribution") + private @Meta NoiseSampler structureNoise; + + @Value("structures.structures") + private @Meta ProbabilityCollection structures; + + @Override + public String getID() { + return id; + } + + public Distributor getDistributor() { + return distributor; + } + + public Locator getLocator() { + return locator; + } + + public NoiseSampler getStructureNoise() { + return structureNoise; + } + + public ProbabilityCollection getStructures() { + return structures; + } +} From ed35d62b8b9b26601b0b556008134a7d108de418 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 10:20:05 -0700 Subject: [PATCH 2/8] create addon manifests --- .../src/main/resources/terra.addon.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 common/addons/config-feature/src/main/resources/terra.addon.yml diff --git a/common/addons/config-feature/src/main/resources/terra.addon.yml b/common/addons/config-feature/src/main/resources/terra.addon.yml new file mode 100644 index 000000000..a3f67376a --- /dev/null +++ b/common/addons/config-feature/src/main/resources/terra.addon.yml @@ -0,0 +1,12 @@ +schema-version: 1 +contributors: + - Terra contributors +id: config-feature +version: 0.1.0 +entrypoints: + - "com.dfsek.terra.addons.feature.FeatureAddon" +website: + issues: https://github.com/PolyhedralDev/Terra-config-feature/issues + source: https://github.com/PolyhedralDev/Terra-config-feature + docs: https://github.com/PolyhedralDev/Terra/wiki +license: GNU LGPL v3.0 \ No newline at end of file From 0205b7ac5590ca50c3912286ee328eb106fe3750 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 12:20:18 -0700 Subject: [PATCH 3/8] depend on manifest addons in core addon modules --- common/addons/config-feature/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/common/addons/config-feature/build.gradle.kts b/common/addons/config-feature/build.gradle.kts index 7d82dc72f..147905b20 100644 --- a/common/addons/config-feature/build.gradle.kts +++ b/common/addons/config-feature/build.gradle.kts @@ -1,2 +1,3 @@ dependencies { + "shadedApi"(project(":common:addons:manifest-addon-loader")) } From 26e5e4c0c8918f7dc227856e91cc7c7c16eb6b50 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 12:39:24 -0700 Subject: [PATCH 4/8] create addon manifests --- .../dfsek/terra/addons/feature/FeatureAddon.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java index 64568b40a..04c8767f7 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java @@ -1,27 +1,25 @@ package com.dfsek.terra.addons.feature; +import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.TerraAddon; -import com.dfsek.terra.api.addon.annotations.Addon; -import com.dfsek.terra.api.addon.annotations.Author; -import com.dfsek.terra.api.addon.annotations.Version; +import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; -@Addon("config-feature") -@Version("1.0.0") -@Author("Terra") -public class FeatureAddon extends TerraAddon { +public class FeatureAddon implements AddonInitializer { @Inject private Platform platform; + @Inject + private BaseAddon addon; + @Override public void initialize() { platform.getEventManager() .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPreLoadEvent.class) + .register(addon, ConfigPackPreLoadEvent.class) .then(event -> event.getPack().registerConfigType(new FeatureConfigType(), "FEATURE", 3)) .failThrough(); } From b2a50e61411b146f5b7aeed73b91c81e1b378bb5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 18 Nov 2021 21:38:46 -0700 Subject: [PATCH 5/8] add feature dependencies --- .../addons/config-feature/src/main/resources/terra.addon.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/addons/config-feature/src/main/resources/terra.addon.yml b/common/addons/config-feature/src/main/resources/terra.addon.yml index a3f67376a..bf25533f5 100644 --- a/common/addons/config-feature/src/main/resources/terra.addon.yml +++ b/common/addons/config-feature/src/main/resources/terra.addon.yml @@ -9,4 +9,6 @@ website: issues: https://github.com/PolyhedralDev/Terra-config-feature/issues source: https://github.com/PolyhedralDev/Terra-config-feature docs: https://github.com/PolyhedralDev/Terra/wiki -license: GNU LGPL v3.0 \ No newline at end of file +license: GNU LGPL v3.0 +depends: + generation-stage-feature: "0.1.+" \ No newline at end of file From a2907e580892ac6adf3ab66fda4ea30577455f83 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 19 Nov 2021 08:47:17 -0700 Subject: [PATCH 6/8] relicense addons under MIT license --- common/addons/config-feature/LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 common/addons/config-feature/LICENSE diff --git a/common/addons/config-feature/LICENSE b/common/addons/config-feature/LICENSE new file mode 100644 index 000000000..64c1cd516 --- /dev/null +++ b/common/addons/config-feature/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2021 Polyhedral Development + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From c55c404973cf7f1f8ccef7b8e21b026ebc55c912 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 19 Nov 2021 15:42:25 -0700 Subject: [PATCH 7/8] add license headers --- .../com/dfsek/terra/addons/feature/ConfiguredFeature.java | 7 +++++++ .../java/com/dfsek/terra/addons/feature/FeatureAddon.java | 7 +++++++ .../com/dfsek/terra/addons/feature/FeatureConfigType.java | 7 +++++++ .../com/dfsek/terra/addons/feature/FeatureFactory.java | 7 +++++++ .../com/dfsek/terra/addons/feature/FeatureTemplate.java | 7 +++++++ 5 files changed, 35 insertions(+) diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java index 8fe4eab9e..43af9ade3 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/ConfiguredFeature.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature; import com.dfsek.terra.api.noise.NoiseSampler; diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java index 04c8767f7..65928db99 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureAddon.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature; import com.dfsek.terra.addons.manifest.api.AddonInitializer; diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java index cb761e5e2..73d9e33e6 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature; import java.util.function.Supplier; diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java index 7ad615929..db1db68be 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureFactory.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature; import com.dfsek.tectonic.exception.LoadException; diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java index 1357987a2..2c11f21eb 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature; import com.dfsek.tectonic.annotations.Final; From e5ab20e1678dac4c144cd5ebcb1bcc2e28e013c3 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 20 Nov 2021 12:44:32 -0700 Subject: [PATCH 8/8] default impl of ConfigType#registrySupplier --- .../com/dfsek/terra/addons/feature/FeatureConfigType.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java index 73d9e33e6..46e28ffcc 100644 --- a/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java +++ b/common/addons/config-feature/src/main/java/com/dfsek/terra/addons/feature/FeatureConfigType.java @@ -24,11 +24,6 @@ public class FeatureConfigType implements ConfigType { private final FeatureFactory factory = new FeatureFactory(); - @Override - public Supplier> registrySupplier(ConfigPack pack) { - return pack.getRegistryFactory()::create; - } - @Override public FeatureTemplate getTemplate(ConfigPack pack, Platform platform) { return new FeatureTemplate();