diff --git a/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigLoadEvent.java b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigLoadEvent.java new file mode 100644 index 000000000..9e188d381 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigLoadEvent.java @@ -0,0 +1,44 @@ +package com.dfsek.terra.api.event.events.config; + +import com.dfsek.tectonic.abstraction.AbstractConfiguration; +import com.dfsek.tectonic.config.ConfigTemplate; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.event.events.PackEvent; + +import java.util.function.Consumer; + +/** + * Fired when each individual configuration is loaded. + */ +public class ConfigLoadEvent implements PackEvent { + private final ConfigPack pack; + private final AbstractConfiguration configuration; + private final Consumer loader; + private final ConfigType type; + + public ConfigLoadEvent(ConfigPack pack, AbstractConfiguration configuration, Consumer loader, ConfigType type) { + this.pack = pack; + this.configuration = configuration; + this.loader = loader; + this.type = type; + } + + @Override + public ConfigPack getPack() { + return pack; + } + + public AbstractConfiguration getConfiguration() { + return configuration; + } + + public T load(T template) { + loader.accept(template); + return template; + } + + public ConfigType getType() { + return type; + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index abbf7a0fb..4a48fdcfa 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -18,6 +18,7 @@ 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.config.Loader; +import com.dfsek.terra.api.event.events.config.ConfigLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; @@ -241,6 +242,7 @@ public class ConfigPackImpl implements ConfigPack { for(AbstractConfiguration config : abstractConfigLoader.loadConfigs(configs.getOrDefault(configType, Collections.emptyList()))) { try { registry.register(config.getID(), ((ConfigFactory) configType.getFactory()).build(selfLoader.load(configType.getTemplate(this, main), config), main)); + main.getEventManager().callEvent(new ConfigLoadEvent(this, config, template -> selfLoader.load(template, configuration), configType)); } catch(DuplicateEntryException e) { throw new LoadException("Duplicate registry entry: ", e); }