From 6c69e3fad1b5bcd5ad64f23d5475abe691ce5335 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 4 Dec 2021 20:29:38 -0700 Subject: [PATCH] create RegistrationEvent --- .../dfsek/terra/api/config/ConfigPack.java | 2 +- .../events/config/RegistrationEvent.java | 40 +++++++++++++++++++ .../terra/config/pack/ConfigPackImpl.java | 6 ++- 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 common/api/core/src/main/java/com/dfsek/terra/api/event/events/config/RegistrationEvent.java diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java index 497372c6d..e2f28e74f 100644 --- a/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java +++ b/common/api/core/src/main/java/com/dfsek/terra/api/config/ConfigPack.java @@ -29,7 +29,7 @@ import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageP public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolder, StringIdentifiable { - void registerConfigType(ConfigType type, String id, int priority); + ConfigPack registerConfigType(ConfigType type, String id, int priority); Map addons(); diff --git a/common/api/core/src/main/java/com/dfsek/terra/api/event/events/config/RegistrationEvent.java b/common/api/core/src/main/java/com/dfsek/terra/api/event/events/config/RegistrationEvent.java new file mode 100644 index 000000000..3cb74a4d0 --- /dev/null +++ b/common/api/core/src/main/java/com/dfsek/terra/api/event/events/config/RegistrationEvent.java @@ -0,0 +1,40 @@ +package com.dfsek.terra.api.event.events.config; + +import com.dfsek.tectonic.loading.TypeLoader; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.event.events.PackEvent; + +import java.lang.reflect.Type; +import java.util.function.Supplier; + + +public class RegistrationEvent implements PackEvent { + private final ConfigPack pack; + + public RegistrationEvent(ConfigPack pack) { + this.pack = pack; + } + + @Override + public ConfigPack getPack() { + return pack; + } + + public RegistrationEvent registerConfigType(ConfigType type, String id, int priority) { + pack.registerConfigType(type, id, priority); + return this; + } + + public RegistrationEvent applyLoader(Type type, Supplier> loader) { + pack.applyLoader(type, loader); + return this; + } + + public RegistrationEvent applyLoader(Type type, TypeLoader loader) { + pack.applyLoader(type, loader); + return this; + } +} diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index 61abcffb9..46b37d6e7 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -31,6 +31,7 @@ import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.yaml.YamlConfiguration; +import com.dfsek.terra.api.event.events.config.RegistrationEvent; import com.dfsek.terra.api.util.generic.Construct; import org.slf4j.Logger; @@ -164,6 +165,8 @@ public class ConfigPackImpl implements ConfigPack { register(abstractConfigLoader); platform.register(abstractConfigLoader); + platform.getEventManager().callEvent(new RegistrationEvent(this)); + ConfigPackAddonsTemplate addonsTemplate = new ConfigPackAddonsTemplate(); selfLoader.load(addonsTemplate, packManifest); this.addons = addonsTemplate.getAddons(); @@ -263,13 +266,14 @@ public class ConfigPackImpl implements ConfigPack { } @Override - public void registerConfigType(ConfigType type, String id, int priority) { + public ConfigPack registerConfigType(ConfigType type, String id, int priority) { Set contained = new HashSet<>(); configTypes.forEach((p, configs) -> configs.forEach(pair -> { if(contained.contains(pair.getLeft())) throw new IllegalArgumentException("Duplicate config ID: " + id); contained.add(id); })); configTypes.computeIfAbsent(priority, p -> new ArrayList<>()).add(Pair.of(id, type)); + return this; } @Override