From 74f9c4f9b1794c0304437aa810112dd3af4c4d87 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 16 Aug 2022 14:36:03 -0700 Subject: [PATCH] convert all addons to use monad initialiser --- .../biome/extrusion/BiomeExtrusionAddon.java | 71 ++++---- .../biome/image/ImageBiomeProviderAddon.java | 41 +++-- .../biome/pipeline/BiomePipelineAddon.java | 86 ++++----- .../single/SingleBiomeProviderAddon.java | 32 ++-- .../biome/query/BiomeQueryAPIAddon.java | 56 +++--- .../NoiseChunkGenerator3DAddon.java | 84 +++++---- .../commands/addons/AddonsCommandAddon.java | 112 ++++++------ .../commands/packs/PacksCommandAddon.java | 142 ++++++++------- .../profiler/ProfilerCommandAddon.java | 113 ++++++------ .../structure/StructureCommandAddon.java | 74 ++++---- .../dfsek/terra/addons/biome/BiomeAddon.java | 37 ++-- .../feature/distributor/DistributorAddon.java | 60 +++---- .../terra/addons/feature/FeatureAddon.java | 31 ++-- .../dfsek/terra/addons/flora/FloraAddon.java | 35 ++-- .../addons/feature/locator/LocatorAddon.java | 90 +++++----- .../dfsek/terra/addons/noise/NoiseAddon.java | 164 +++++++++--------- .../com/dfsek/terra/addons/ore/OreAddon.java | 4 +- .../terra/addons/palette/PaletteAddon.java | 43 +++-- .../addons/structure/StructureAddon.java | 24 ++- .../feature/FeatureGenerationAddon.java | 97 ++++++----- .../structure/StructureGenerationAddon.java | 57 +++--- .../dfsek/terra/addons/yaml/YamlAddon.java | 39 +++-- .../block/PaletteBlockShortcutAddon.java | 38 ++-- .../block/StructureBlockShortcutAddon.java | 36 ++-- .../mutator/StructureMutatorAddon.java | 34 ++-- .../addons/sponge/SpongeSchematicAddon.java | 52 +++--- .../addons/terrascript/TerraScriptAddon.java | 78 +++++---- .../check/TerraScriptCheckFunctionAddon.java | 38 ++-- .../TerraScriptSamplerFunctionAddon.java | 40 ++--- 29 files changed, 953 insertions(+), 855 deletions(-) diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java index cd4b1c9a4..10c77f9b4 100644 --- a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java @@ -10,58 +10,59 @@ import com.dfsek.terra.addons.biome.extrusion.config.BiomeExtrusionTemplate; import com.dfsek.terra.addons.biome.extrusion.config.ReplaceableBiomeLoader; import com.dfsek.terra.addons.biome.extrusion.config.extrusions.ReplaceExtrusionTemplate; import com.dfsek.terra.addons.biome.extrusion.config.extrusions.SetExtrusionTemplate; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; 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; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -public class BiomeExtrusionAddon implements AddonInitializer { +public class BiomeExtrusionAddon implements MonadAddonInitializer { public static final TypeKey>> EXTRUSION_REGISTRY_KEY = new TypeKey<>() { }; public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() { }; - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> providerRegistry = - event.getPack() - .getOrCreateRegistry(PROVIDER_REGISTRY_KEY); - providerRegistry.register(addon.key("EXTRUSION"), BiomeExtrusionTemplate::new); - }) - .then(event -> { - CheckedRegistry>> extrusionRegistry = event.getPack().getOrCreateRegistry( - EXTRUSION_REGISTRY_KEY); - extrusionRegistry.register(addon.key("SET"), SetExtrusionTemplate::new); - extrusionRegistry.register(addon.key("REPLACE"), ReplaceExtrusionTemplate::new); - }) - .failThrough(); - - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPostLoadEvent.class) - .then(event -> { - Registry biomeRegistry = event.getPack().getRegistry(Biome.class); - event.getPack().applyLoader(ReplaceableBiome.class, new ReplaceableBiomeLoader(biomeRegistry)); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure(Construct.construct(() -> { + functionalEventHandler.register(base, ConfigPackPostLoadEvent.class) + .then(event -> { + Registry biomeRegistry = event.getPack().getRegistry(Biome.class); + event.getPack().applyLoader(ReplaceableBiome.class, + new ReplaceableBiomeLoader(biomeRegistry)); + }); + return functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = + event.getPack() + .getOrCreateRegistry(PROVIDER_REGISTRY_KEY); + providerRegistry.register(base.key("EXTRUSION"), BiomeExtrusionTemplate::new); + }) + .then(event -> { + CheckedRegistry>> extrusionRegistry = + event.getPack().getOrCreateRegistry( + EXTRUSION_REGISTRY_KEY); + extrusionRegistry.register(base.key("SET"), SetExtrusionTemplate::new); + extrusionRegistry.register(base.key("REPLACE"), ReplaceExtrusionTemplate::new); + }) + .failThrough(); + })) + )); } } diff --git a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java index 5db8dd51f..6108a197a 100644 --- a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java +++ b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProviderAddon.java @@ -11,39 +11,42 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import java.util.function.Supplier; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -public class ImageBiomeProviderAddon implements AddonInitializer { +public class ImageBiomeProviderAddon implements MonadAddonInitializer { public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() { }; - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry( - PROVIDER_REGISTRY_KEY); - providerRegistry.register(addon.key("IMAGE"), - () -> new ImageProviderTemplate(event.getPack().getRegistry(Biome.class))); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry( + PROVIDER_REGISTRY_KEY); + providerRegistry.register(base.key("IMAGE"), + () -> new ImageProviderTemplate(event.getPack().getRegistry(Biome.class))); + }) + .failThrough())) + ); + } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java index 42aa95b0e..ee374a256 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineAddon.java @@ -23,7 +23,10 @@ import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMut import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; @@ -32,12 +35,14 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -public class BiomePipelineAddon implements AddonInitializer { +public class BiomePipelineAddon implements MonadAddonInitializer { public static final TypeKey>> SOURCE_REGISTRY_KEY = new TypeKey<>() { }; @@ -46,44 +51,47 @@ public class BiomePipelineAddon implements AddonInitializer { }; public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() { }; - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry( - PROVIDER_REGISTRY_KEY); - providerRegistry.register(addon.key("PIPELINE"), BiomePipelineTemplate::new); - }) - .then(event -> { - CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry( - SOURCE_REGISTRY_KEY); - sourceRegistry.register(addon.key("SAMPLER"), SamplerSourceTemplate::new); - }) - .then(event -> { - CheckedRegistry>> stageRegistry = event.getPack().getOrCreateRegistry( - STAGE_REGISTRY_KEY); - stageRegistry.register(addon.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new); - stageRegistry.register(addon.key("SMOOTH"), SmoothMutatorTemplate::new); - stageRegistry.register(addon.key("REPLACE"), ReplaceMutatorTemplate::new); - stageRegistry.register(addon.key("REPLACE_LIST"), ReplaceListMutatorTemplate::new); - stageRegistry.register(addon.key("BORDER"), BorderMutatorTemplate::new); - stageRegistry.register(addon.key("BORDER_LIST"), BorderListMutatorTemplate::new); - }) - .failThrough(); - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPostLoadEvent.class) - .then(event -> { - Registry biomeRegistry = event.getPack().getRegistry(Biome.class); - event.getPack().applyLoader(BiomeDelegate.class, new BiomeDelegateLoader(biomeRegistry)); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((functionalEventHandler, base) -> Init.ofPure(Construct.construct(() -> { + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = + event.getPack().getOrCreateRegistry( + PROVIDER_REGISTRY_KEY); + providerRegistry.register(base.key("PIPELINE"), BiomePipelineTemplate::new); + }) + .then(event -> { + CheckedRegistry>> sourceRegistry = + event.getPack().getOrCreateRegistry( + SOURCE_REGISTRY_KEY); + sourceRegistry.register(base.key("SAMPLER"), SamplerSourceTemplate::new); + }) + .then(event -> { + CheckedRegistry>> stageRegistry = + event.getPack().getOrCreateRegistry( + STAGE_REGISTRY_KEY); + stageRegistry.register(base.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new); + stageRegistry.register(base.key("SMOOTH"), SmoothMutatorTemplate::new); + stageRegistry.register(base.key("REPLACE"), ReplaceMutatorTemplate::new); + stageRegistry.register(base.key("REPLACE_LIST"), ReplaceListMutatorTemplate::new); + stageRegistry.register(base.key("BORDER"), BorderMutatorTemplate::new); + stageRegistry.register(base.key("BORDER_LIST"), BorderListMutatorTemplate::new); + }) + .failThrough(); + return functionalEventHandler.register(base, ConfigPackPostLoadEvent.class) + .then(event -> { + Registry biomeRegistry = event.getPack().getRegistry(Biome.class); + event.getPack().applyLoader(BiomeDelegate.class, + new BiomeDelegateLoader(biomeRegistry)); + }); + + }))) + ); + } } diff --git a/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java index ecf4a9c7b..a7584f2a5 100644 --- a/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java +++ b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderAddon.java @@ -11,18 +11,22 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import java.util.function.Supplier; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -public class SingleBiomeProviderAddon implements AddonInitializer { +public class SingleBiomeProviderAddon implements MonadAddonInitializer { public static final TypeKey>> PROVIDER_REGISTRY_KEY = new TypeKey<>() { }; @@ -33,15 +37,19 @@ public class SingleBiomeProviderAddon implements AddonInitializer { private BaseAddon addon; @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry( - PROVIDER_REGISTRY_KEY); - providerRegistry.register(addon.key("SINGLE"), SingleBiomeProviderTemplate::new); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(addon, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> providerRegistry = event.getPack().getOrCreateRegistry( + PROVIDER_REGISTRY_KEY); + providerRegistry.register(addon.key("SINGLE"), SingleBiomeProviderTemplate::new); + }) + .failThrough())) + ); } } diff --git a/common/addons/biome-query-api/src/main/java/com/dfsek/terra/addons/biome/query/BiomeQueryAPIAddon.java b/common/addons/biome-query-api/src/main/java/com/dfsek/terra/addons/biome/query/BiomeQueryAPIAddon.java index 9def4378b..80a9e5ba4 100644 --- a/common/addons/biome-query-api/src/main/java/com/dfsek/terra/addons/biome/query/BiomeQueryAPIAddon.java +++ b/common/addons/biome-query-api/src/main/java/com/dfsek/terra/addons/biome/query/BiomeQueryAPIAddon.java @@ -4,43 +4,43 @@ import java.util.Collection; import com.dfsek.terra.addons.biome.query.impl.BiomeTagFlattener; import com.dfsek.terra.addons.biome.query.impl.BiomeTagHolder; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; -import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.properties.Context; import com.dfsek.terra.api.properties.PropertyKey; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.world.biome.Biome; -public class BiomeQueryAPIAddon implements AddonInitializer { +public class BiomeQueryAPIAddon implements MonadAddonInitializer { public static PropertyKey BIOME_TAG_KEY = Context.create(BiomeTagHolder.class); - @Inject - private Platform platform; - @Inject - private BaseAddon addon; @Override - public void initialize() { - - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPostLoadEvent.class) - .then(event -> { - Collection biomes = event - .getPack() - .getRegistry(Biome.class) - .entries(); - - BiomeTagFlattener flattener = new BiomeTagFlattener(biomes - .stream() - .flatMap(biome -> biome.getTags().stream()) - .toList()); - - biomes.forEach(biome -> biome.getContext().put(BIOME_TAG_KEY, new BiomeTagHolder(biome, flattener))); - }) - .global(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((functionalEventHandler, base) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPostLoadEvent.class) + .then(event -> { + Collection biomes = event + .getPack() + .getRegistry(Biome.class) + .entries(); + + BiomeTagFlattener flattener = new BiomeTagFlattener( + biomes.stream() + .flatMap(biome -> biome.getTags().stream()) + .toList()); + + biomes.forEach(biome -> biome.getContext() + .put(BIOME_TAG_KEY, new BiomeTagHolder(biome, flattener))); + }) + .global() + ))); } } diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java index 06450b613..6f9e45cf7 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java @@ -14,60 +14,58 @@ import com.dfsek.terra.addons.chunkgenerator.config.palette.BiomePaletteTemplate import com.dfsek.terra.addons.chunkgenerator.config.palette.PaletteInfo; import com.dfsek.terra.addons.chunkgenerator.config.palette.SlantLayer; import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; 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; import com.dfsek.terra.api.properties.Context; import com.dfsek.terra.api.properties.PropertyKey; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider; -public class NoiseChunkGenerator3DAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class NoiseChunkGenerator3DAddon implements MonadAddonInitializer { @Override - public void initialize() { + public Monad> initialize() { PropertyKey paletteInfoPropertyKey = Context.create(PaletteInfo.class); PropertyKey noisePropertiesPropertyKey = Context.create(BiomeNoiseProperties.class); - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .priority(1000) - .then(event -> { - NoiseChunkGeneratorPackConfigTemplate config = event.loadTemplate(new NoiseChunkGeneratorPackConfigTemplate()); - - event.getPack() - .getOrCreateRegistry(ChunkGeneratorProvider.class) - .register(addon.key("NOISE_3D"), - pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(), - config.getHorizontalRes(), - config.getVerticalRes(), noisePropertiesPropertyKey, - paletteInfoPropertyKey)); - event.getPack() - .applyLoader(SlantLayer.class, SlantLayer::new); - }) - .failThrough(); - - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigurationLoadEvent.class) - .then(event -> { - if(event.is(Biome.class)) { - event.getLoadedObject(Biome.class).getContext().put(paletteInfoPropertyKey, - event.load(new BiomePaletteTemplate(platform)).get()); - event.getLoadedObject(Biome.class).getContext().put(noisePropertiesPropertyKey, - event.load(new BiomeNoiseConfigTemplate()).get()); - } - }) - .failThrough(); + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure(Construct.construct(() -> { + handler.register(base, ConfigPackPreLoadEvent.class) + .priority(1000) + .then(event -> { + NoiseChunkGeneratorPackConfigTemplate config = event.loadTemplate(new NoiseChunkGeneratorPackConfigTemplate()); + + event.getPack() + .getOrCreateRegistry(ChunkGeneratorProvider.class) + .register(base.key("NOISE_3D"), + pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(), + config.getHorizontalRes(), + config.getVerticalRes(), noisePropertiesPropertyKey, + paletteInfoPropertyKey)); + event.getPack() + .applyLoader(SlantLayer.class, SlantLayer::new); + }) + .failThrough(); + return handler.register(base, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(Biome.class)) { + event.getLoadedObject(Biome.class).getContext().put(paletteInfoPropertyKey, + event.load(new BiomePaletteTemplate(platform)).get()); + event.getLoadedObject(Biome.class).getContext().put(noisePropertiesPropertyKey, + event.load(new BiomeNoiseConfigTemplate()).get()); + } + }) + .failThrough(); + })))); + } } diff --git a/common/addons/command-addons/src/main/java/com/dfsek/terra/addons/commands/addons/AddonsCommandAddon.java b/common/addons/command-addons/src/main/java/com/dfsek/terra/addons/commands/addons/AddonsCommandAddon.java index 289ed09e9..bb676fc62 100644 --- a/common/addons/command-addons/src/main/java/com/dfsek/terra/addons/commands/addons/AddonsCommandAddon.java +++ b/common/addons/command-addons/src/main/java/com/dfsek/terra/addons/commands/addons/AddonsCommandAddon.java @@ -3,7 +3,10 @@ package com.dfsek.terra.addons.commands.addons; import cloud.commandframework.ArgumentDescription; import cloud.commandframework.CommandManager; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.command.CommandSender; @@ -11,59 +14,64 @@ import com.dfsek.terra.api.command.arguments.RegistryArgument; import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; +import com.dfsek.terra.api.util.function.monad.Monad; -public class AddonsCommandAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - - +public class AddonsCommandAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, CommandRegistrationEvent.class) - .then(event -> { - CommandManager manager = event.getCommandManager(); - - manager.command( - manager.commandBuilder("addons", ArgumentDescription.of("List installed Terra addons")) - .permission("terra.addons") - .handler(context -> { - StringBuilder addons = new StringBuilder("Installed addons:\n"); - platform.getAddons() - .forEach(addon -> addons - .append(" - ") - .append(addon.getID()) - .append('@') - .append(addon.getVersion().getFormatted()) - .append('\n')); - context.getSender().sendMessage(addons.toString()); - }) - ) - .command( - manager.commandBuilder("addons") - .argument(RegistryArgument.of("addon", platform.getAddons())) - .permission("terra.addons.info") - .handler(context -> { - BaseAddon addon = context.get("addon"); - StringBuilder addonInfo = new StringBuilder("Addon ").append(addon.getID()).append('\n'); - - addonInfo.append("Version: ").append(addon.getVersion().getFormatted()).append('\n'); - - addonInfo.append("Dependencies:\n"); - addon.getDependencies().forEach((id, versions) -> addonInfo - .append(" - ") - .append(id) - .append('@') - .append(versions.getFormatted()) - .append('\n')); - context.getSender().sendMessage(addonInfo.toString()); - }) - ); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler + .register(base, CommandRegistrationEvent.class) + .then(event -> { + CommandManager manager = event.getCommandManager(); + + manager.command( + manager.commandBuilder("addons", ArgumentDescription.of( + "List installed Terra addons")) + .permission("terra.addons") + .handler(context -> { + StringBuilder addons = new StringBuilder( + "Installed addons:\n"); + platform.getAddons() + .forEach(addon -> addons + .append(" - ") + .append(addon.getID()) + .append('@') + .append(addon.getVersion().getFormatted()) + .append('\n')); + context.getSender().sendMessage(addons.toString()); + }) + ) + .command( + manager.commandBuilder("addons") + .argument( + RegistryArgument.of("addon", platform.getAddons())) + .permission("terra.addons.info") + .handler(context -> { + BaseAddon addon = context.get("addon"); + StringBuilder addonInfo = new StringBuilder( + "Addon ").append(addon.getID()).append('\n'); + + addonInfo.append("Version: ").append( + addon.getVersion().getFormatted()).append('\n'); + + addonInfo.append("Dependencies:\n"); + addon.getDependencies().forEach( + (id, versions) -> addonInfo + .append(" - ") + .append(id) + .append('@') + .append(versions.getFormatted()) + .append('\n')); + context.getSender().sendMessage(addonInfo.toString()); + }) + ); + }))) + ); } } diff --git a/common/addons/command-packs/src/main/java/com/dfsek/terra/addons/commands/packs/PacksCommandAddon.java b/common/addons/command-packs/src/main/java/com/dfsek/terra/addons/commands/packs/PacksCommandAddon.java index 7a5326552..0a6bbcc3f 100644 --- a/common/addons/command-packs/src/main/java/com/dfsek/terra/addons/commands/packs/PacksCommandAddon.java +++ b/common/addons/command-packs/src/main/java/com/dfsek/terra/addons/commands/packs/PacksCommandAddon.java @@ -2,10 +2,21 @@ package com.dfsek.terra.addons.commands.packs; import cloud.commandframework.ArgumentDescription; import cloud.commandframework.CommandManager; +import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; + +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.command.CommandSender; @@ -15,74 +26,73 @@ import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; +import java.util.function.Supplier; -public class PacksCommandAddon implements AddonInitializer { + +public class PacksCommandAddon implements MonadAddonInitializer { private static final Logger logger = LoggerFactory.getLogger(PacksCommandAddon.class); - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - - @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, CommandRegistrationEvent.class) - .then(event -> { - CommandManager manager = event.getCommandManager(); - - manager.command( - manager.commandBuilder("packs", ArgumentDescription.of("List installed config packs")) - .permission("terra.packs") - .handler(context -> { - StringBuilder packs = new StringBuilder("Installed packs:\n"); - platform.getConfigRegistry().forEach(pack -> packs.append(" - ") - .append(pack.getID()) - .append('@') - .append(pack.getVersion().getFormatted())); - context.getSender().sendMessage(packs.toString()); - }) - ) - .command( - manager.commandBuilder("packs") - .literal("info", ArgumentDescription.of("Get information about a pack")) - .permission("terra.packs.info") - .argument(RegistryArgument.of("pack", platform.getConfigRegistry())) - .handler(context -> { - ConfigPack pack = context.get("pack"); - StringBuilder packInfo = new StringBuilder("Pack ").append(pack.getID()).append('\n'); - - packInfo.append("Version: ").append(pack.getVersion().getFormatted()).append('\n'); - packInfo.append("Author: ").append(pack.getAuthor()).append('\n'); - - packInfo.append("Addon Dependencies:\n"); - pack.addons().forEach((id, versions) -> packInfo - .append(" - ") - .append(id.getID()) - .append('@') - .append(versions.getFormatted()) - .append('\n')); - context.getSender().sendMessage(packInfo.toString()); - })) - .command( - manager.commandBuilder("packs") - .literal("reload", ArgumentDescription.of("Reload config packs")) - .permission("terra.packs.reload") - .handler(context -> { - context.getSender().sendMessage("Reloading Terra..."); - logger.info("Reloading Terra..."); - if(platform.reload()) { - logger.info("Terra reloaded successfully."); - context.getSender().sendMessage("Terra reloaded successfully."); - } else { - logger.error("Terra failed to reload."); - context.getSender().sendMessage( - "Terra failed to reload. See logs for more information."); - } - })); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler.register(base, CommandRegistrationEvent.class) + .then(event -> { + CommandManager manager = event.getCommandManager(); + + manager.command( + manager.commandBuilder("packs", ArgumentDescription.of("List installed config packs")) + .permission("terra.packs") + .handler(context -> { + StringBuilder packs = new StringBuilder("Installed packs:\n"); + platform.getConfigRegistry().forEach(pack -> packs.append(" - ") + .append(pack.getID()) + .append('@') + .append(pack.getVersion().getFormatted())); + context.getSender().sendMessage(packs.toString()); + }) + ) + .command( + manager.commandBuilder("packs") + .literal("info", ArgumentDescription.of("Get information about a pack")) + .permission("terra.packs.info") + .argument(RegistryArgument.of("pack", platform.getConfigRegistry())) + .handler(context -> { + ConfigPack pack = context.get("pack"); + StringBuilder packInfo = new StringBuilder("Pack ").append(pack.getID()).append('\n'); + + packInfo.append("Version: ").append(pack.getVersion().getFormatted()).append('\n'); + packInfo.append("Author: ").append(pack.getAuthor()).append('\n'); + + packInfo.append("Addon Dependencies:\n"); + pack.addons().forEach((id, versions) -> packInfo + .append(" - ") + .append(id.getID()) + .append('@') + .append(versions.getFormatted()) + .append('\n')); + context.getSender().sendMessage(packInfo.toString()); + })) + .command( + manager.commandBuilder("packs") + .literal("reload", ArgumentDescription.of("Reload config packs")) + .permission("terra.packs.reload") + .handler(context -> { + context.getSender().sendMessage("Reloading Terra..."); + logger.info("Reloading Terra..."); + if(platform.reload()) { + logger.info("Terra reloaded successfully."); + context.getSender().sendMessage("Terra reloaded successfully."); + } else { + logger.error("Terra failed to reload."); + context.getSender().sendMessage( + "Terra failed to reload. See logs for more information."); + } + })); + }))) + ); } } diff --git a/common/addons/command-profiler/src/main/java/com/dfsek/terra/addons/commands/profiler/ProfilerCommandAddon.java b/common/addons/command-profiler/src/main/java/com/dfsek/terra/addons/commands/profiler/ProfilerCommandAddon.java index adf966845..9b56931ed 100644 --- a/common/addons/command-profiler/src/main/java/com/dfsek/terra/addons/commands/profiler/ProfilerCommandAddon.java +++ b/common/addons/command-profiler/src/main/java/com/dfsek/terra/addons/commands/profiler/ProfilerCommandAddon.java @@ -2,10 +2,18 @@ package com.dfsek.terra.addons.commands.profiler; import cloud.commandframework.ArgumentDescription; import cloud.commandframework.CommandManager; + +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; + +import com.dfsek.terra.api.util.function.monad.Monad; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.command.CommandSender; @@ -14,61 +22,58 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; -public class ProfilerCommandAddon implements AddonInitializer { +public class ProfilerCommandAddon implements MonadAddonInitializer { private static final Logger logger = LoggerFactory.getLogger(ProfilerCommandAddon.class); - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - - @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, CommandRegistrationEvent.class) - .then(event -> { - CommandManager manager = event.getCommandManager(); - manager - .command( - manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) - .literal("start", ArgumentDescription.of("Start profiling"), "st") - .permission("terra.profiler.start") - .handler(context -> { - platform.getProfiler().start(); - context.getSender().sendMessage("Profiling started."); - })) - .command( - manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) - .literal("stop", ArgumentDescription.of("Stop profiling"), "s") - .permission("terra.profiler.stop") - .handler(context -> { - platform.getProfiler().stop(); - context.getSender().sendMessage("Profiling stopped."); - })) - .command( - manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) - .literal("query", ArgumentDescription.of("Query profiler results"), "q") - .permission("terra.profiler.query") - .handler(context -> { - StringBuilder data = new StringBuilder("Terra Profiler data: \n"); - platform.getProfiler().getTimings().forEach((id, timings) -> data.append(id) - .append(": ") - .append(timings.toString()) - .append('\n')); - logger.info(data.toString()); - context.getSender().sendMessage("Profiling data dumped to console."); - })) - .command( - manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) - .literal("reset", ArgumentDescription.of("Reset the profiler"), "r") - .permission("terra.profiler.reset") - .handler(context -> { - platform.getProfiler().reset(); - context.getSender().sendMessage("Profiler reset."); - })); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, CommandRegistrationEvent.class) + .then(event -> { + CommandManager manager = event.getCommandManager(); + manager + .command( + manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) + .literal("start", ArgumentDescription.of("Start profiling"), "st") + .permission("terra.profiler.start") + .handler(context -> { + platform.getProfiler().start(); + context.getSender().sendMessage("Profiling started."); + })) + .command( + manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) + .literal("stop", ArgumentDescription.of("Stop profiling"), "s") + .permission("terra.profiler.stop") + .handler(context -> { + platform.getProfiler().stop(); + context.getSender().sendMessage("Profiling stopped."); + })) + .command( + manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) + .literal("query", ArgumentDescription.of("Query profiler results"), "q") + .permission("terra.profiler.query") + .handler(context -> { + StringBuilder data = new StringBuilder("Terra Profiler data: \n"); + platform.getProfiler().getTimings().forEach((id, timings) -> data.append(id) + .append(": ") + .append(timings.toString()) + .append('\n')); + logger.info(data.toString()); + context.getSender().sendMessage("Profiling data dumped to console."); + })) + .command( + manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler")) + .literal("reset", ArgumentDescription.of("Reset the profiler"), "r") + .permission("terra.profiler.reset") + .handler(context -> { + platform.getProfiler().reset(); + context.getSender().sendMessage("Profiler reset."); + })); + }))) + ); } } diff --git a/common/addons/command-structures/src/main/java/com/dfsek/terra/addons/commands/structure/StructureCommandAddon.java b/common/addons/command-structures/src/main/java/com/dfsek/terra/addons/commands/structure/StructureCommandAddon.java index ce98abfce..f1d8d552c 100644 --- a/common/addons/command-structures/src/main/java/com/dfsek/terra/addons/commands/structure/StructureCommandAddon.java +++ b/common/addons/command-structures/src/main/java/com/dfsek/terra/addons/commands/structure/StructureCommandAddon.java @@ -8,60 +8,62 @@ import cloud.commandframework.context.CommandContext; import java.util.Random; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.command.CommandSender; import com.dfsek.terra.api.command.arguments.RegistryArgument; import com.dfsek.terra.api.entity.Entity; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.util.Rotation; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; -public class StructureCommandAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class StructureCommandAddon implements MonadAddonInitializer { private static Registry getStructureRegistry(CommandContext sender) { return sender.getSender().getEntity().orElseThrow().world().getPack().getRegistry(Structure.class); } @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, CommandRegistrationEvent.class) - .then(event -> { - CommandManager manager = event.getCommandManager(); - - manager.command( - manager.commandBuilder("structures", ArgumentDescription.of("Manage or generate structures")) - .literal("generate") - .argument(RegistryArgument.builder("structure", - StructureCommandAddon::getStructureRegistry, - TypeKey.of(Structure.class))) - .argument(LongArgument.optional("seed", 0)) - .argument(EnumArgument.optional(Rotation.class, "rotation", Rotation.NONE)) - .handler(context -> { - Structure structure = context.get("structure"); - Entity sender = context.getSender().getEntity().orElseThrow(); - structure.generate( - sender.position().toInt(), - sender.world(), - ((Long) context.get("seed") == 0) ? new Random() : new Random(context.get("seed")), - context.get("rotation") - ); - }) - .permission("terra.structures.generate") - ); - }); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((handler, base) -> Init.ofPure( + handler.register(base, CommandRegistrationEvent.class) + .then(event -> { + CommandManager manager = event.getCommandManager(); + + manager.command( + manager.commandBuilder("structures", ArgumentDescription.of("Manage or generate structures")) + .literal("generate") + .argument(RegistryArgument.builder("structure", + StructureCommandAddon::getStructureRegistry, + TypeKey.of(Structure.class))) + .argument(LongArgument.optional("seed", 0)) + .argument(EnumArgument.optional(Rotation.class, "rotation", Rotation.NONE)) + .handler(context -> { + Structure structure = context.get("structure"); + Entity sender = context.getSender().getEntity().orElseThrow(); + structure.generate( + sender.position().toInt(), + sender.world(), + ((Long) context.get("seed") == 0) ? new Random() : new Random(context.get("seed")), + context.get("rotation") + ); + }) + .permission("terra.structures.generate") + ); + }))) + ); } } diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeAddon.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeAddon.java index e850400e8..2d77e763c 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeAddon.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeAddon.java @@ -9,30 +9,33 @@ package com.dfsek.terra.addons.biome; import com.dfsek.terra.addons.biome.holder.PaletteHolder; import com.dfsek.terra.addons.biome.holder.PaletteHolderLoader; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class BiomeAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class BiomeAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - event.getPack().registerConfigType(new BiomeConfigType(event.getPack()), addon.key("BIOME"), 1000); - event.getPack().applyLoader(PaletteHolder.class, new PaletteHolderLoader()); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + event.getPack().registerConfigType(new BiomeConfigType(event.getPack()), + base.key("BIOME"), 1000); + event.getPack().applyLoader(PaletteHolder.class, new PaletteHolderLoader()); + }) + .failThrough() + ))); } } diff --git a/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/DistributorAddon.java b/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/DistributorAddon.java index 2227a499d..1b30b78d3 100644 --- a/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/DistributorAddon.java +++ b/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/DistributorAddon.java @@ -21,7 +21,10 @@ import com.dfsek.terra.addons.feature.distributor.config.XorDistributorTemplate; import com.dfsek.terra.addons.feature.distributor.config.YesDistributorTemplate; import com.dfsek.terra.addons.feature.distributor.util.Point; import com.dfsek.terra.addons.feature.distributor.util.PointTemplate; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; @@ -29,40 +32,39 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.structure.feature.Distributor; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; -public class DistributorAddon implements AddonInitializer { +public class DistributorAddon implements MonadAddonInitializer { public static final TypeKey>> DISTRIBUTOR_TOKEN = new TypeKey<>() { }; - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> distributorRegistry = event - .getPack() - .getOrCreateRegistry(DISTRIBUTOR_TOKEN); - - distributorRegistry.register(addon.key("SAMPLER"), SamplerDistributorTemplate::new); - distributorRegistry.register(addon.key("POINTS"), PointSetDistributorTemplate::new); - distributorRegistry.register(addon.key("PADDED_GRID"), PaddedGridDistributorTemplate::new); - distributorRegistry.register(addon.key("AND"), AndDistributorTemplate::new); - distributorRegistry.register(addon.key("OR"), OrDistributorTemplate::new); - distributorRegistry.register(addon.key("XOR"), XorDistributorTemplate::new); - distributorRegistry.register(addon.key("YES"), YesDistributorTemplate::new); - distributorRegistry.register(addon.key("NO"), NoDistributorTemplate::new); - - event.getPack() - .applyLoader(Point.class, PointTemplate::new); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((functionalEventHandler, base) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> distributorRegistry = event + .getPack() + .getOrCreateRegistry(DISTRIBUTOR_TOKEN); + + distributorRegistry.register(base.key("SAMPLER"), SamplerDistributorTemplate::new); + distributorRegistry.register(base.key("POINTS"), PointSetDistributorTemplate::new); + distributorRegistry.register(base.key("PADDED_GRID"), PaddedGridDistributorTemplate::new); + distributorRegistry.register(base.key("AND"), AndDistributorTemplate::new); + distributorRegistry.register(base.key("OR"), OrDistributorTemplate::new); + distributorRegistry.register(base.key("XOR"), XorDistributorTemplate::new); + distributorRegistry.register(base.key("YES"), YesDistributorTemplate::new); + distributorRegistry.register(base.key("NO"), NoDistributorTemplate::new); + + event.getPack() + .applyLoader(Point.class, PointTemplate::new); + }) + .failThrough() + ))); } } 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 07d8ba9d9..139596996 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 @@ -7,27 +7,30 @@ package com.dfsek.terra.addons.feature; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class FeatureAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class FeatureAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().registerConfigType(new FeatureConfigType(), addon.key("FEATURE"), 500)) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((functionalEventHandler, base) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack() + .registerConfigType(new FeatureConfigType(), base.key("FEATURE"), 500)) + .failThrough())) + ); + } } diff --git a/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraAddon.java b/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraAddon.java index 68b43b364..c12f1bb95 100644 --- a/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraAddon.java +++ b/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraAddon.java @@ -9,30 +9,31 @@ package com.dfsek.terra.addons.flora; import com.dfsek.terra.addons.flora.config.BlockLayerTemplate; import com.dfsek.terra.addons.flora.flora.gen.BlockLayer; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class FloraAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class FloraAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - event.getPack().registerConfigType(new FloraConfigType(), addon.key("FLORA"), 2); - event.getPack().applyLoader(BlockLayer.class, BlockLayerTemplate::new); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((functionalEventHandler, base) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + event.getPack().registerConfigType(new FloraConfigType(), base.key("FLORA"), 2); + event.getPack().applyLoader(BlockLayer.class, BlockLayerTemplate::new); + }) + .failThrough())) + ); } } diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index a0166076e..9cb6282e7 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -31,7 +31,10 @@ import com.dfsek.terra.addons.feature.locator.config.pattern.SingleBlockMatchPat import com.dfsek.terra.addons.feature.locator.config.pattern.SolidMatchPatternTemplate; import com.dfsek.terra.addons.feature.locator.config.pattern.XorPatternTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; @@ -39,56 +42,57 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; -public class LocatorAddon implements AddonInitializer { +public class LocatorAddon implements MonadAddonInitializer { public static final TypeKey>> LOCATOR_TOKEN = new TypeKey<>() { }; public static final TypeKey>> PATTERN_TOKEN = new TypeKey<>() { }; - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - + @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); - locatorRegistry.register(addon.key("SURFACE"), SurfaceLocatorTemplate::new); - locatorRegistry.register(addon.key("TOP"), TopLocatorTemplate::new); - - locatorRegistry.register(addon.key("RANDOM"), RandomLocatorTemplate::new); - locatorRegistry.register(addon.key("GAUSSIAN_RANDOM"), GaussianRandomLocatorTemplate::new); - - locatorRegistry.register(addon.key("PATTERN"), PatternLocatorTemplate::new); - locatorRegistry.register(addon.key("ADJACENT_PATTERN"), AdjacentPatternLocatorTemplate::new); - - locatorRegistry.register(addon.key("SAMPLER"), SamplerLocatorTemplate::new); - locatorRegistry.register(addon.key("SAMPLER_3D"), Sampler3DLocatorTemplate::new); - - locatorRegistry.register(addon.key("AND"), AndLocatorTemplate::new); - locatorRegistry.register(addon.key("OR"), OrLocatorTemplate::new); - locatorRegistry.register(addon.key("XOR"), XorLocatorTemplate::new); - }) - .then(event -> { - CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); - patternRegistry.register(addon.key("MATCH_AIR"), AirMatchPatternTemplate::new); - patternRegistry.register(addon.key("MATCH_SOLID"), SolidMatchPatternTemplate::new); - patternRegistry.register(addon.key("MATCH"), SingleBlockMatchPatternTemplate::new); - patternRegistry.register(addon.key("MATCH_SET"), BlockSetMatchPatternTemplate::new); - - patternRegistry.register(addon.key("AND"), AndPatternTemplate::new); - patternRegistry.register(addon.key("OR"), OrPatternTemplate::new); - patternRegistry.register(addon.key("XOR"), XorPatternTemplate::new); - patternRegistry.register(addon.key("NOT"), NotPatternTemplate::new); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); + locatorRegistry.register(base.key("SURFACE"), SurfaceLocatorTemplate::new); + locatorRegistry.register(base.key("TOP"), TopLocatorTemplate::new); + + locatorRegistry.register(base.key("RANDOM"), RandomLocatorTemplate::new); + locatorRegistry.register(base.key("GAUSSIAN_RANDOM"), GaussianRandomLocatorTemplate::new); + + locatorRegistry.register(base.key("PATTERN"), PatternLocatorTemplate::new); + locatorRegistry.register(base.key("ADJACENT_PATTERN"), AdjacentPatternLocatorTemplate::new); + + locatorRegistry.register(base.key("SAMPLER"), SamplerLocatorTemplate::new); + locatorRegistry.register(base.key("SAMPLER_3D"), Sampler3DLocatorTemplate::new); + + locatorRegistry.register(base.key("AND"), AndLocatorTemplate::new); + locatorRegistry.register(base.key("OR"), OrLocatorTemplate::new); + locatorRegistry.register(base.key("XOR"), XorLocatorTemplate::new); + }) + .then(event -> { + CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); + patternRegistry.register(base.key("MATCH_AIR"), AirMatchPatternTemplate::new); + patternRegistry.register(base.key("MATCH_SOLID"), SolidMatchPatternTemplate::new); + patternRegistry.register(base.key("MATCH"), SingleBlockMatchPatternTemplate::new); + patternRegistry.register(base.key("MATCH_SET"), BlockSetMatchPatternTemplate::new); + + patternRegistry.register(base.key("AND"), AndPatternTemplate::new); + patternRegistry.register(base.key("OR"), OrPatternTemplate::new); + patternRegistry.register(base.key("XOR"), XorPatternTemplate::new); + patternRegistry.register(base.key("NOT"), NotPatternTemplate::new); + }) + .failThrough())) + ); + } } diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java index 06bf082b9..913d4e7bc 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java @@ -13,7 +13,10 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.function.Supplier; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler; import com.dfsek.terra.addons.noise.config.templates.BinaryArithmeticTemplate; import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate; @@ -58,90 +61,93 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.util.reflection.TypeKey; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -public class NoiseAddon implements AddonInitializer { +public class NoiseAddon implements MonadAddonInitializer { public static final TypeKey>> NOISE_SAMPLER_TOKEN = new TypeKey<>() { }; - @Inject - private Platform plugin; - - @Inject - private BaseAddon addon; @Override - public void initialize() { - plugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry>> noiseRegistry = event.getPack().getOrCreateRegistry( - NOISE_SAMPLER_TOKEN); - event.getPack() - .applyLoader(CellularSampler.DistanceFunction.class, - (type, o, loader, depthTracker) -> CellularSampler.DistanceFunction.valueOf((String) o)) - .applyLoader(CellularSampler.ReturnType.class, - (type, o, loader, depthTracker) -> CellularSampler.ReturnType.valueOf((String) o)) - .applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new) - .applyLoader(FunctionTemplate.class, FunctionTemplate::new); - - noiseRegistry.register(addon.key("LINEAR"), LinearNormalizerTemplate::new); - noiseRegistry.register(addon.key("NORMAL"), NormalNormalizerTemplate::new); - noiseRegistry.register(addon.key("CLAMP"), ClampNormalizerTemplate::new); - noiseRegistry.register(addon.key("PROBABILITY"), ProbabilityNormalizerTemplate::new); - noiseRegistry.register(addon.key("SCALE"), ScaleNormalizerTemplate::new); - noiseRegistry.register(addon.key("POSTERIZATION"), PosterizationNormalizerTemplate::new); - - noiseRegistry.register(addon.key("IMAGE"), ImageSamplerTemplate::new); - - noiseRegistry.register(addon.key("DOMAIN_WARP"), DomainWarpTemplate::new); - - noiseRegistry.register(addon.key("FBM"), BrownianMotionTemplate::new); - noiseRegistry.register(addon.key("PING_PONG"), PingPongTemplate::new); - noiseRegistry.register(addon.key("RIDGED"), RidgedFractalTemplate::new); - - noiseRegistry.register(addon.key("OPEN_SIMPLEX_2"), () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new)); - noiseRegistry.register(addon.key("OPEN_SIMPLEX_2S"), () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new)); - noiseRegistry.register(addon.key("PERLIN"), () -> new SimpleNoiseTemplate(PerlinSampler::new)); - noiseRegistry.register(addon.key("SIMPLEX"), () -> new SimpleNoiseTemplate(SimplexSampler::new)); - noiseRegistry.register(addon.key("GABOR"), GaborNoiseTemplate::new); - - - noiseRegistry.register(addon.key("VALUE"), () -> new SimpleNoiseTemplate(ValueSampler::new)); - noiseRegistry.register(addon.key("VALUE_CUBIC"), () -> new SimpleNoiseTemplate(ValueCubicSampler::new)); - - noiseRegistry.register(addon.key("CELLULAR"), CellularNoiseTemplate::new); - - noiseRegistry.register(addon.key("WHITE_NOISE"), () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new)); - noiseRegistry.register(addon.key("POSITIVE_WHITE_NOISE"), () -> new SimpleNoiseTemplate(PositiveWhiteNoiseSampler::new)); - noiseRegistry.register(addon.key("GAUSSIAN"), () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new)); - - noiseRegistry.register(addon.key("CONSTANT"), ConstantNoiseTemplate::new); - - noiseRegistry.register(addon.key("KERNEL"), KernelTemplate::new); - - noiseRegistry.register(addon.key("LINEAR_HEIGHTMAP"), LinearHeightmapSamplerTemplate::new); - - noiseRegistry.register(addon.key("ADD"), () -> new BinaryArithmeticTemplate<>(AdditionSampler::new)); - noiseRegistry.register(addon.key("SUB"), () -> new BinaryArithmeticTemplate<>(SubtractionSampler::new)); - noiseRegistry.register(addon.key("MUL"), () -> new BinaryArithmeticTemplate<>(MultiplicationSampler::new)); - noiseRegistry.register(addon.key("DIV"), () -> new BinaryArithmeticTemplate<>(DivisionSampler::new)); - noiseRegistry.register(addon.key("MAX"), () -> new BinaryArithmeticTemplate<>(MaxSampler::new)); - noiseRegistry.register(addon.key("MIN"), () -> new BinaryArithmeticTemplate<>(MinSampler::new)); - - - Map packSamplers = new LinkedHashMap<>(); - Map packFunctions = new LinkedHashMap<>(); - noiseRegistry.register(addon.key("EXPRESSION"), () -> new ExpressionFunctionTemplate(packSamplers, packFunctions)); - - - NoiseConfigPackTemplate template = event.loadTemplate(new NoiseConfigPackTemplate()); - packSamplers.putAll(template.getSamplers()); - packFunctions.putAll(template.getFunctions()); - event.getPack().getContext().put(template); - }) - .priority(50) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((functionalEventHandler, base, platform) -> Init.ofPure( + functionalEventHandler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> noiseRegistry = event.getPack().getOrCreateRegistry( + NOISE_SAMPLER_TOKEN); + event.getPack() + .applyLoader(CellularSampler.DistanceFunction.class, + (type, o, loader, depthTracker) -> CellularSampler.DistanceFunction.valueOf((String) o)) + .applyLoader(CellularSampler.ReturnType.class, + (type, o, loader, depthTracker) -> CellularSampler.ReturnType.valueOf((String) o)) + .applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new) + .applyLoader(FunctionTemplate.class, FunctionTemplate::new); + + noiseRegistry.register(base.key("LINEAR"), LinearNormalizerTemplate::new); + noiseRegistry.register(base.key("NORMAL"), NormalNormalizerTemplate::new); + noiseRegistry.register(base.key("CLAMP"), ClampNormalizerTemplate::new); + noiseRegistry.register(base.key("PROBABILITY"), ProbabilityNormalizerTemplate::new); + noiseRegistry.register(base.key("SCALE"), ScaleNormalizerTemplate::new); + noiseRegistry.register(base.key("POSTERIZATION"), PosterizationNormalizerTemplate::new); + + noiseRegistry.register(base.key("IMAGE"), ImageSamplerTemplate::new); + + noiseRegistry.register(base.key("DOMAIN_WARP"), DomainWarpTemplate::new); + + noiseRegistry.register(base.key("FBM"), BrownianMotionTemplate::new); + noiseRegistry.register(base.key("PING_PONG"), PingPongTemplate::new); + noiseRegistry.register(base.key("RIDGED"), RidgedFractalTemplate::new); + + noiseRegistry.register(base.key("OPEN_SIMPLEX_2"), () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new)); + noiseRegistry.register(base.key("OPEN_SIMPLEX_2S"), () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new)); + noiseRegistry.register(base.key("PERLIN"), () -> new SimpleNoiseTemplate(PerlinSampler::new)); + noiseRegistry.register(base.key("SIMPLEX"), () -> new SimpleNoiseTemplate(SimplexSampler::new)); + noiseRegistry.register(base.key("GABOR"), GaborNoiseTemplate::new); + + + noiseRegistry.register(base.key("VALUE"), () -> new SimpleNoiseTemplate(ValueSampler::new)); + noiseRegistry.register(base.key("VALUE_CUBIC"), () -> new SimpleNoiseTemplate(ValueCubicSampler::new)); + + noiseRegistry.register(base.key("CELLULAR"), CellularNoiseTemplate::new); + + noiseRegistry.register(base.key("WHITE_NOISE"), () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new)); + noiseRegistry.register(base.key("POSITIVE_WHITE_NOISE"), () -> new SimpleNoiseTemplate(PositiveWhiteNoiseSampler::new)); + noiseRegistry.register(base.key("GAUSSIAN"), () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new)); + + noiseRegistry.register(base.key("CONSTANT"), ConstantNoiseTemplate::new); + + noiseRegistry.register(base.key("KERNEL"), KernelTemplate::new); + + noiseRegistry.register(base.key("LINEAR_HEIGHTMAP"), LinearHeightmapSamplerTemplate::new); + + noiseRegistry.register(base.key("ADD"), () -> new BinaryArithmeticTemplate<>(AdditionSampler::new)); + noiseRegistry.register(base.key("SUB"), () -> new BinaryArithmeticTemplate<>(SubtractionSampler::new)); + noiseRegistry.register(base.key("MUL"), () -> new BinaryArithmeticTemplate<>(MultiplicationSampler::new)); + noiseRegistry.register(base.key("DIV"), () -> new BinaryArithmeticTemplate<>(DivisionSampler::new)); + noiseRegistry.register(base.key("MAX"), () -> new BinaryArithmeticTemplate<>(MaxSampler::new)); + noiseRegistry.register(base.key("MIN"), () -> new BinaryArithmeticTemplate<>(MinSampler::new)); + + + Map packSamplers = new LinkedHashMap<>(); + Map packFunctions = new LinkedHashMap<>(); + noiseRegistry.register(base.key("EXPRESSION"), () -> new ExpressionFunctionTemplate(packSamplers, packFunctions)); + + + NoiseConfigPackTemplate template = event.loadTemplate(new NoiseConfigPackTemplate()); + packSamplers.putAll(template.getSamplers()); + packFunctions.putAll(template.getFunctions()); + event.getPack().getContext().put(template); + }) + .priority(50) + .failThrough())) + ); + } } diff --git a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java index 6b8fc1d7d..ab2e1dbdb 100644 --- a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java +++ b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreAddon.java @@ -22,13 +22,13 @@ public class OreAddon implements MonadAddonInitializer { return Do.with( Get.eventManager().map(manager -> manager.getHandler(FunctionalEventHandler.class)), Get.addon(), - ((eventHandler, addon) -> Init + (eventHandler, addon) -> Init .ofPure(eventHandler .register(addon, ConfigPackPreLoadEvent.class) .then(event -> event .getPack() .registerConfigType(new OreConfigType(), addon.key("ORE"), 1)) - .failThrough())) + .failThrough()) ); } } diff --git a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java index 78744e42d..6f7e501b8 100644 --- a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java +++ b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteAddon.java @@ -7,7 +7,12 @@ package com.dfsek.terra.addons.palette; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; + +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.addons.palette.palette.PaletteLayerHolder; import com.dfsek.terra.addons.palette.palette.PaletteLayerLoader; import com.dfsek.terra.api.Platform; @@ -15,24 +20,28 @@ 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; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + +import java.util.function.Supplier; -public class PaletteAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class PaletteAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - event.getPack().registerConfigType(new PaletteConfigType(platform), addon.key("PALETTE"), 2); - event.getPack().applyLoader(PaletteLayerHolder.class, PaletteLayerLoader::new); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + event.getPack().registerConfigType(new PaletteConfigType(platform), base.key("PALETTE"), 2); + event.getPack().applyLoader(PaletteLayerHolder.class, PaletteLayerLoader::new); + }) + .failThrough())) + ); } } diff --git a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/StructureAddon.java b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/StructureAddon.java index d578b7721..ab8980ebc 100644 --- a/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/StructureAddon.java +++ b/common/addons/config-structure/src/main/java/com/dfsek/terra/addons/structure/StructureAddon.java @@ -7,15 +7,19 @@ package com.dfsek.terra.addons.structure; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class StructureAddon implements AddonInitializer { +public class StructureAddon implements MonadAddonInitializer { @Inject private Platform platform; @@ -23,11 +27,15 @@ public class StructureAddon implements AddonInitializer { private BaseAddon addon; @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().registerConfigType(new StructureConfigType(), addon.key("STRUCTURE"), 2)) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(addon, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack().registerConfigType(new StructureConfigType(), addon.key("STRUCTURE"), 2)) + .failThrough())) + ); } } diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java index ac0475d7e..75c7df42b 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java @@ -20,7 +20,10 @@ import java.util.function.Supplier; import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures; import com.dfsek.terra.addons.generation.feature.config.FeatureStageTemplate; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.config.meta.Meta; @@ -31,65 +34,67 @@ import com.dfsek.terra.api.inject.annotations.Inject; import com.dfsek.terra.api.properties.Context; import com.dfsek.terra.api.properties.PropertyKey; import com.dfsek.terra.api.structure.feature.Feature; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; +import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider; -public class FeatureGenerationAddon implements AddonInitializer { +public class FeatureGenerationAddon implements MonadAddonInitializer { public static final TypeKey>> STAGE_TYPE_KEY = new TypeKey<>() { }; public static final TypeKey<@Meta List<@Meta Feature>> FEATURE_LIST_TYPE_KEY = new TypeKey<>() { }; - @Inject - private Platform platform; - @Inject - private BaseAddon addon; @SuppressWarnings("unchecked") @Override - public void initialize() { + public Monad> initialize() { PropertyKey biomeFeaturesKey = Context.create(BiomeFeatures.class); - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack() - .getOrCreateRegistry(STAGE_TYPE_KEY) - .register(addon.key("FEATURE"), () -> new FeatureStageTemplate(platform, biomeFeaturesKey))) - .failThrough(); - - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigurationLoadEvent.class) - .then(event -> { - if(event.is(Biome.class)) { - DynamicTemplate.Builder templateBuilder = DynamicTemplate.builder(); - - List featureGenerationStages = new ArrayList<>(); - event.getPack().getStages().forEach(stage -> { - if(stage instanceof FeatureGenerationStage featureGenerationStage) { - featureGenerationStages.add(featureGenerationStage); - templateBuilder - .value(featureGenerationStage.getID(), - DynamicValue - .builder("features." + featureGenerationStage.getID(), List.class) - .annotatedType(FEATURE_LIST_TYPE_KEY.getAnnotatedType()) - .setDefault(Collections.emptyList()) - .build()); - } - }); - - DynamicTemplate template = event.load(templateBuilder.build()); - - Map> features = new HashMap<>(); - - featureGenerationStages.forEach(stage -> features.put(stage, template.get(stage.getID(), List.class))); - - event.getLoadedObject(Biome.class).getContext().put(biomeFeaturesKey, new BiomeFeatures(features)); - } - }) - .failThrough(); + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure(Construct.construct(() -> { + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack() + .getOrCreateRegistry(STAGE_TYPE_KEY) + .register(base.key("FEATURE"), () -> new FeatureStageTemplate(platform, biomeFeaturesKey))) + .failThrough(); + return handler.register(base, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(Biome.class)) { + DynamicTemplate.Builder templateBuilder = DynamicTemplate.builder(); + + List featureGenerationStages = new ArrayList<>(); + event.getPack().getStages().forEach(stage -> { + if(stage instanceof FeatureGenerationStage featureGenerationStage) { + featureGenerationStages.add(featureGenerationStage); + templateBuilder + .value(featureGenerationStage.getID(), + DynamicValue + .builder("features." + featureGenerationStage.getID(), List.class) + .annotatedType(FEATURE_LIST_TYPE_KEY.getAnnotatedType()) + .setDefault(Collections.emptyList()) + .build()); + } + }); + + DynamicTemplate template = event.load(templateBuilder.build()); + + Map> features = new HashMap<>(); + + featureGenerationStages.forEach( + stage -> features.put(stage, template.get(stage.getID(), List.class))); + + event.getLoadedObject(Biome.class).getContext().put(biomeFeaturesKey, + new BiomeFeatures(features)); + } + }) + .failThrough(); + })))); } } diff --git a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java index 3bf03ec6f..020835d6c 100644 --- a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java +++ b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationAddon.java @@ -1,43 +1,40 @@ package com.dfsek.terra.addons.generation.structure; import com.dfsek.terra.addons.generation.structure.config.BiomeStructuresTemplate; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; 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; +import com.dfsek.terra.api.util.function.monad.Monad; +import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider; -public class StructureGenerationAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class StructureGenerationAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack() - .getOrCreateRegistry(GenerationStageProvider.class) - .register(addon.key("STRUCTURE"), pack -> new StructureGenerationStage(platform))) - .failThrough(); - - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigurationLoadEvent.class) - .then(event -> { - if(event.is(Biome.class)) { - event.getLoadedObject(Biome.class).getContext().put(event.load(new BiomeStructuresTemplate()).get()); - } - }) - .failThrough(); - + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure(Construct.construct(() -> { + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack() + .getOrCreateRegistry(GenerationStageProvider.class) + .register(base.key("STRUCTURE"), pack -> new StructureGenerationStage(platform))) + .failThrough(); + return handler.register(base, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(Biome.class)) { + event.getLoadedObject(Biome.class).getContext().put( + event.load(new BiomeStructuresTemplate()).get()); + } + }) + .failThrough(); + })))); } } diff --git a/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java b/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java index dc5772dc3..94a45a7bf 100644 --- a/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java +++ b/common/addons/language-yaml/src/main/java/com/dfsek/terra/addons/yaml/YamlAddon.java @@ -8,10 +8,17 @@ package com.dfsek.terra.addons.yaml; import com.dfsek.tectonic.yaml.YamlConfiguration; + +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; + +import com.dfsek.terra.api.util.function.monad.Monad; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.event.events.config.ConfigurationDiscoveryEvent; @@ -19,24 +26,22 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; -public class YamlAddon implements AddonInitializer { +public class YamlAddon implements MonadAddonInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(YamlAddon.class); - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - + @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigurationDiscoveryEvent.class) - .then(event -> event.getLoader().open("", ".yml").thenEntries(entries -> entries.forEach(entry -> { - LOGGER.debug("Discovered config {}", entry.getKey()); - event.register(entry.getKey(), new YamlConfiguration(entry.getValue(), entry.getKey())); - })).close()) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((handler, base) -> Init.ofPure( + handler.register(base, ConfigurationDiscoveryEvent.class) + .then(event -> event.getLoader().open("", ".yml").thenEntries(entries -> entries.forEach(entry -> { + LOGGER.debug("Discovered config {}", entry.getKey()); + event.register(entry.getKey(), new YamlConfiguration(entry.getValue(), entry.getKey())); + })).close()) + .failThrough())) + ); } } diff --git a/common/addons/palette-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/PaletteBlockShortcutAddon.java b/common/addons/palette-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/PaletteBlockShortcutAddon.java index c3a2f3ea4..10c397345 100644 --- a/common/addons/palette-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/PaletteBlockShortcutAddon.java +++ b/common/addons/palette-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/PaletteBlockShortcutAddon.java @@ -1,30 +1,32 @@ package com.dfsek.terra.addons.palette.shortcut.block; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.block.state.BlockState; 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; +import com.dfsek.terra.api.util.function.monad.Monad; import com.dfsek.terra.api.world.chunk.generation.util.Palette; -public class PaletteBlockShortcutAddon implements AddonInitializer { - @Inject - private BaseAddon addon; - @Inject - private Platform platform; +public class PaletteBlockShortcutAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack() - .registerShortcut(Palette.class, "BLOCK", - (configLoader, input, tracker) -> new SingletonPalette( - configLoader.loadType(BlockState.class, input, tracker)))) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack() + .registerShortcut(Palette.class, "BLOCK", + (configLoader, input, tracker) -> new SingletonPalette( + configLoader.loadType(BlockState.class, input, tracker)))) + .failThrough())) + ); + } } diff --git a/common/addons/structure-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/StructureBlockShortcutAddon.java b/common/addons/structure-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/StructureBlockShortcutAddon.java index 210ab98d1..cf6708c05 100644 --- a/common/addons/structure-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/StructureBlockShortcutAddon.java +++ b/common/addons/structure-block-shortcut/src/main/java/com/dfsek/terra/addons/palette/shortcut/block/StructureBlockShortcutAddon.java @@ -1,6 +1,9 @@ package com.dfsek.terra.addons.palette.shortcut.block; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.block.state.BlockState; @@ -8,24 +11,23 @@ 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; import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.util.function.monad.Monad; -public class StructureBlockShortcutAddon implements AddonInitializer { - @Inject - private BaseAddon addon; - @Inject - private Platform platform; - +public class StructureBlockShortcutAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack() - .registerShortcut(Structure.class, "BLOCK", - (configLoader, input, tracker) -> new SingletonStructure( - configLoader.loadType(BlockState.class, input, tracker) - ))) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((handler, base) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack() + .registerShortcut(Structure.class, "BLOCK", + (configLoader, input, tracker) -> new SingletonStructure( + configLoader.loadType(BlockState.class, input, tracker) + ))) + .failThrough())) + ); } } diff --git a/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/StructureMutatorAddon.java b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/StructureMutatorAddon.java index b5a3fab7f..83467739a 100644 --- a/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/StructureMutatorAddon.java +++ b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/StructureMutatorAddon.java @@ -1,29 +1,29 @@ package com.dfsek.terra.addons.structure.mutator; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class StructureMutatorAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - - +public class StructureMutatorAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - event.getPack().registerConfigType(new MutatedStructureConfigType(addon), addon.key("MUTATED_STRUCTURE"), 499); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((handler, base) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + event.getPack().registerConfigType(new MutatedStructureConfigType(base), base.key("MUTATED_STRUCTURE"), 499); + }) + .failThrough())) + ); } } diff --git a/common/addons/structure-sponge-loader/src/main/java/com/dfsek/terra/addons/sponge/SpongeSchematicAddon.java b/common/addons/structure-sponge-loader/src/main/java/com/dfsek/terra/addons/sponge/SpongeSchematicAddon.java index caf7f47b5..cd4053d4c 100644 --- a/common/addons/structure-sponge-loader/src/main/java/com/dfsek/terra/addons/sponge/SpongeSchematicAddon.java +++ b/common/addons/structure-sponge-loader/src/main/java/com/dfsek/terra/addons/sponge/SpongeSchematicAddon.java @@ -7,6 +7,13 @@ package com.dfsek.terra.addons.sponge; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; + +import com.dfsek.terra.api.util.function.monad.Monad; + import net.querz.nbt.io.NBTDeserializer; import net.querz.nbt.tag.ByteArrayTag; import net.querz.nbt.tag.CompoundTag; @@ -20,7 +27,6 @@ import java.util.HashMap; import java.util.Map; import java.util.zip.GZIPInputStream; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.block.state.BlockState; @@ -32,13 +38,7 @@ import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.util.StringUtil; -public class SpongeSchematicAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class SpongeSchematicAddon implements MonadAddonInitializer { private static InputStream detectDecompression(InputStream is) throws IOException { PushbackInputStream pbis = new PushbackInputStream(is, 2); int signature = (pbis.read() & 0xFF) + (pbis.read() << 8); @@ -51,24 +51,28 @@ public class SpongeSchematicAddon implements AddonInitializer { } @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry structureRegistry = event.getPack().getOrCreateRegistry(Structure.class); - event.getPack() - .getLoader() - .open("", ".schem") - .thenEntries(entries -> entries - .stream() - .map(entry -> convert(entry.getValue(), StringUtil.fileName(entry.getKey()))) - .forEach(structureRegistry::register)).close(); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry structureRegistry = event.getPack().getOrCreateRegistry(Structure.class); + event.getPack() + .getLoader() + .open("", ".schem") + .thenEntries(entries -> entries + .stream() + .map(entry -> convert(entry.getValue(), StringUtil.fileName(entry.getKey()), platform, base)) + .forEach(structureRegistry::register)).close(); + }) + .failThrough())) + ); } - public SpongeStructure convert(InputStream in, String id) { + public SpongeStructure convert(InputStream in, String id, Platform platform, BaseAddon addon) { try { CompoundTag baseTag = (CompoundTag) new NBTDeserializer(false).fromStream(detectDecompression(in)).getTag(); int wid = baseTag.getShort("Width"); diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/TerraScriptAddon.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/TerraScriptAddon.java index f2e1d0055..49d4dc6c6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/TerraScriptAddon.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/TerraScriptAddon.java @@ -7,7 +7,10 @@ package com.dfsek.terra.addons.terrascript; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.StructureScript; @@ -20,45 +23,44 @@ import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.structure.LootTable; import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.util.StringUtil; +import com.dfsek.terra.api.util.function.monad.Monad; -public class TerraScriptAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class TerraScriptAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .then(event -> { - CheckedRegistry structureRegistry = event.getPack().getOrCreateRegistry(Structure.class); - CheckedRegistry lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class); - event.getPack().getLoader().open("", ".tesf").thenEntries( - entries -> - entries.stream() - .parallel() - .map(entry -> { - try { - String id = StringUtil.fileName(entry.getKey()); - return new StructureScript(entry.getValue(), - addon.key(id), - platform, - structureRegistry, - lootRegistry, - event.getPack().getOrCreateRegistry(FunctionBuilder.class)); - } catch(ParseException e) { - throw new RuntimeException("Failed to load script \"" + entry.getKey() + "\"", e); - } - }) - .toList() - .forEach(structureRegistry::register)) - .close(); - }) - .priority(100) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry structureRegistry = event.getPack().getOrCreateRegistry(Structure.class); + CheckedRegistry lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class); + event.getPack().getLoader().open("", ".tesf").thenEntries( + entries -> + entries.stream() + .parallel() + .map(entry -> { + try { + String id = StringUtil.fileName(entry.getKey()); + return new StructureScript(entry.getValue(), + base.key(id), + platform, + structureRegistry, + lootRegistry, + event.getPack().getOrCreateRegistry(FunctionBuilder.class)); + } catch(ParseException e) { + throw new RuntimeException("Failed to load script \"" + entry.getKey() + "\"", e); + } + }) + .toList() + .forEach(structureRegistry::register)) + .close(); + }) + .priority(100) + .failThrough())) + ); } } diff --git a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/TerraScriptCheckFunctionAddon.java b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/TerraScriptCheckFunctionAddon.java index 26a1ca358..ce950c1e8 100644 --- a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/TerraScriptCheckFunctionAddon.java +++ b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/TerraScriptCheckFunctionAddon.java @@ -1,31 +1,33 @@ package com.dfsek.terra.addon.terrascript.check; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.api.Platform; 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class TerraScriptCheckFunctionAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - +public class TerraScriptCheckFunctionAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .priority(1) - .then(event -> { - event.getPack().getOrCreateRegistry(FunctionBuilder.class).register(addon.key("check"), - new CheckFunctionBuilder(platform)); - }) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + Get.platform(), + ((handler, base, platform) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .priority(1) + .then(event -> event + .getPack() + .getOrCreateRegistry(FunctionBuilder.class) + .register(base.key("check"), new CheckFunctionBuilder(platform))) + .failThrough())) + ); } } diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/TerraScriptSamplerFunctionAddon.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/TerraScriptSamplerFunctionAddon.java index cdb4b92bd..9249d61ef 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/TerraScriptSamplerFunctionAddon.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/TerraScriptSamplerFunctionAddon.java @@ -1,6 +1,9 @@ package com.dfsek.terra.addons.terrascript.sampler; -import com.dfsek.terra.addons.manifest.api.AddonInitializer; +import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer; +import com.dfsek.terra.addons.manifest.api.monad.Do; +import com.dfsek.terra.addons.manifest.api.monad.Get; +import com.dfsek.terra.addons.manifest.api.monad.Init; import com.dfsek.terra.addons.noise.NoiseConfigPackTemplate; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.api.Platform; @@ -8,27 +11,24 @@ 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; +import com.dfsek.terra.api.util.function.monad.Monad; -public class TerraScriptSamplerFunctionAddon implements AddonInitializer { - @Inject - private Platform platform; - - @Inject - private BaseAddon addon; - - +public class TerraScriptSamplerFunctionAddon implements MonadAddonInitializer { @Override - public void initialize() { - platform.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(addon, ConfigPackPreLoadEvent.class) - .priority(51) - .then(event -> event - .getPack() - .getOrCreateRegistry(FunctionBuilder.class) - .register(addon.key("sampler"), new SamplerFunctionBuilder(event.getPack().getContext().get( - NoiseConfigPackTemplate.class).getSamplers()))) - .failThrough(); + public Monad> initialize() { + return Do.with( + Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)), + Get.addon(), + ((handler, base) -> Init.ofPure( + handler.register(base, ConfigPackPreLoadEvent.class) + .priority(51) + .then(event -> event + .getPack() + .getOrCreateRegistry(FunctionBuilder.class) + .register(base.key("sampler"), new SamplerFunctionBuilder(event.getPack().getContext().get( + NoiseConfigPackTemplate.class).getSamplers()))) + .failThrough())) + ); } }