From 7b9891150d2a1eddb240805fb782f29ab850bc58 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 5 Jan 2022 08:12:00 -0700 Subject: [PATCH] create and register mutated structure config --- .../mutator/MutatedStructureConfigType.java | 33 +++++++++++++++ .../mutator/MutatedStructureFactory.java | 25 +++++++++++ .../mutator/StructureMutatorAddon.java | 10 ++++- .../config/MutatedStructureTemplate.java | 42 +++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureConfigType.java create mode 100644 common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureFactory.java create mode 100644 common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/config/MutatedStructureTemplate.java diff --git a/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureConfigType.java b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureConfigType.java new file mode 100644 index 000000000..23eb5e802 --- /dev/null +++ b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureConfigType.java @@ -0,0 +1,33 @@ +package com.dfsek.terra.addons.structure.mutator; + +import com.dfsek.terra.addons.structure.mutator.config.MutatedStructureTemplate; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.config.ConfigFactory; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.util.reflection.TypeKey; + + +public class MutatedStructureConfigType implements ConfigType { + private final BaseAddon addon; + + public MutatedStructureConfigType(BaseAddon addon) { + this.addon = addon; + } + + @Override + public MutatedStructureTemplate getTemplate(ConfigPack pack, Platform platform) { + return new MutatedStructureTemplate(); + } + + @Override + public ConfigFactory getFactory() { + return new MutatedStructureFactory(addon); + } + + @Override + public TypeKey getTypeKey() { + return TypeKey.of(MutatedStructure.class); + } +} diff --git a/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureFactory.java b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureFactory.java new file mode 100644 index 000000000..a8f953d3c --- /dev/null +++ b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/MutatedStructureFactory.java @@ -0,0 +1,25 @@ +package com.dfsek.terra.addons.structure.mutator; + +import com.dfsek.tectonic.api.exception.LoadException; + +import com.dfsek.terra.addons.structure.mutator.config.MutatedStructureTemplate; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.config.ConfigFactory; + + +public class MutatedStructureFactory implements ConfigFactory { + private final BaseAddon addon; + + public MutatedStructureFactory(BaseAddon addon) { + this.addon = addon; + } + + @Override + public MutatedStructure build(MutatedStructureTemplate config, Platform platform) throws LoadException { + return new MutatedStructure(addon.key(config.getID()), + config.getDelegate(), + config.getReadInterceptor(), + config.getWriteInterceptor()); + } +} 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 f0f44dc34..b5a3fab7f 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 @@ -3,6 +3,8 @@ package com.dfsek.terra.addons.structure.mutator; 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.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.inject.annotations.Inject; @@ -16,6 +18,12 @@ public class StructureMutatorAddon implements AddonInitializer { @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(); } } diff --git a/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/config/MutatedStructureTemplate.java b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/config/MutatedStructureTemplate.java new file mode 100644 index 000000000..3f0ec33d2 --- /dev/null +++ b/common/addons/structure-mutator/src/main/java/com/dfsek/terra/addons/structure/mutator/config/MutatedStructureTemplate.java @@ -0,0 +1,42 @@ +package com.dfsek.terra.addons.structure.mutator.config; + +import com.dfsek.tectonic.api.config.template.ConfigTemplate; + +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.api.config.AbstractableTemplate; +import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.world.util.ReadInterceptor; +import com.dfsek.terra.api.world.util.WriteInterceptor; + + +public class MutatedStructureTemplate implements AbstractableTemplate { + @Value("id") + private String id; + + @Value("mutate.read") + private ReadInterceptor readInterceptor; + + @Value("mutate.write") + private WriteInterceptor writeInterceptor; + + @Value("structure") + private Structure delegate; + + @Override + public String getID() { + return id; + } + + public ReadInterceptor getReadInterceptor() { + return readInterceptor; + } + + public WriteInterceptor getWriteInterceptor() { + return writeInterceptor; + } + + public Structure getDelegate() { + return delegate; + } +}