mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-08-29 05:10:58 +00:00
create and implement ConfigLoadEvent
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ import com.dfsek.terra.api.config.ConfigFactory;
|
|||||||
import com.dfsek.terra.api.config.ConfigPack;
|
import com.dfsek.terra.api.config.ConfigPack;
|
||||||
import com.dfsek.terra.api.config.ConfigType;
|
import com.dfsek.terra.api.config.ConfigType;
|
||||||
import com.dfsek.terra.api.config.Loader;
|
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.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
|
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()))) {
|
for(AbstractConfiguration config : abstractConfigLoader.loadConfigs(configs.getOrDefault(configType, Collections.emptyList()))) {
|
||||||
try {
|
try {
|
||||||
registry.register(config.getID(), ((ConfigFactory) configType.getFactory()).build(selfLoader.load(configType.getTemplate(this, main), config), main));
|
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) {
|
} catch(DuplicateEntryException e) {
|
||||||
throw new LoadException("Duplicate registry entry: ", e);
|
throw new LoadException("Duplicate registry entry: ", e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user