create and implement ConfigLoadEvent

This commit is contained in:
dfsek
2021-07-14 07:15:16 -07:00
parent bac5557873
commit 7fa2e8251e
2 changed files with 46 additions and 0 deletions

View File

@@ -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<ConfigTemplate> loader;
private final ConfigType<?, ?> type;
public ConfigLoadEvent(ConfigPack pack, AbstractConfiguration configuration, Consumer<ConfigTemplate> 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 extends ConfigTemplate> T load(T template) {
loader.accept(template);
return template;
}
public ConfigType<?, ?> getType() {
return type;
}
}

View File

@@ -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);
}