mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-03 16:35:50 +00:00
redo ConfigType and loading
This commit is contained in:
parent
f756ebef44
commit
d96d834a08
@ -190,6 +190,7 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
for(C template : configTemplates) registry.add(template.getID(), factory.build(template, main));
|
for(C template : configTemplates) registry.add(template.getID(), factory.build(template, main));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
private void load(long start, TerraPlugin main) throws ConfigException {
|
private void load(long start, TerraPlugin main) throws ConfigException {
|
||||||
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this));
|
main.getEventManager().callEvent(new ConfigPackPreLoadEvent(this));
|
||||||
|
|
||||||
@ -230,7 +231,9 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(Map.Entry<ConfigType<? extends ConfigTemplate>, List<Configuration>> entry : configs.entrySet()) {
|
for(Map.Entry<ConfigType<? extends ConfigTemplate>, List<Configuration>> entry : configs.entrySet()) {
|
||||||
abstractConfigLoader.loadConfigs(entry.getValue(), () -> entry.getKey().getTemplate(this, main));
|
for(ConfigTemplate config : abstractConfigLoader.loadConfigs(entry.getValue(), () -> entry.getKey().getTemplate(this, main))) {
|
||||||
|
((ConfigType) entry.getKey()).callback(this, main, config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package com.dfsek.terra.config.prototype;
|
package com.dfsek.terra.config.prototype;
|
||||||
|
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface ConfigType<T extends ConfigTemplate> {
|
public interface ConfigType<T extends ConfigTemplate> {
|
||||||
T getTemplate(ConfigPack pack, TerraPlugin main);
|
T getTemplate(ConfigPack pack, TerraPlugin main);
|
||||||
|
|
||||||
|
void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.dfsek.terra.registry.config;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.config.factories.BiomeFactory;
|
||||||
|
import com.dfsek.terra.config.factories.CarverFactory;
|
||||||
|
import com.dfsek.terra.config.factories.ConfigFactory;
|
||||||
|
import com.dfsek.terra.config.factories.FloraFactory;
|
||||||
|
import com.dfsek.terra.config.factories.OreFactory;
|
||||||
|
import com.dfsek.terra.config.factories.PaletteFactory;
|
||||||
|
import com.dfsek.terra.config.factories.StructureFactory;
|
||||||
|
import com.dfsek.terra.config.factories.TreeFactory;
|
||||||
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
import com.dfsek.terra.config.prototype.ConfigType;
|
||||||
|
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.CarverTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.FloraTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.OreTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.PaletteTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.StructureTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.TreeTemplate;
|
||||||
|
import com.dfsek.terra.registry.OpenRegistry;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?>> {
|
||||||
|
public ConfigTypeRegistry(ConfigPack pack, TerraPlugin main) {
|
||||||
|
add("BIOME", new ConfigBuilder<>(pack.getBiomeRegistry(), new BiomeFactory(pack), () -> new BiomeTemplate(pack, main)));
|
||||||
|
add("PALETTE", new ConfigBuilder<>(pack.getPaletteRegistry(), new PaletteFactory(), PaletteTemplate::new));
|
||||||
|
add("ORE", new ConfigBuilder<>(pack.getOreRegistry(), new OreFactory(), OreTemplate::new));
|
||||||
|
add("FLORA", new ConfigBuilder<>(pack.getFloraRegistry(), new FloraFactory(), FloraTemplate::new));
|
||||||
|
add("CARVER", new ConfigBuilder<>(pack.getCarverRegistry(), new CarverFactory(pack), CarverTemplate::new));
|
||||||
|
add("STRUCTURE", new ConfigBuilder<>(pack.getStructureRegistry(), new StructureFactory(), StructureTemplate::new));
|
||||||
|
add("TREE", new ConfigBuilder<>(pack.getTreeRegistry(), new TreeFactory(), TreeTemplate::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class ConfigBuilder<T extends AbstractableTemplate, O> implements ConfigType<T> {
|
||||||
|
private final CheckedRegistry<O> registry;
|
||||||
|
private final ConfigFactory<T, O> factory;
|
||||||
|
private final Supplier<T> provider;
|
||||||
|
|
||||||
|
private ConfigBuilder(CheckedRegistry<O> registry, ConfigFactory<T, O> factory, Supplier<T> provider) {
|
||||||
|
this.registry = registry;
|
||||||
|
this.factory = factory;
|
||||||
|
this.provider = provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getTemplate(ConfigPack pack, TerraPlugin main) {
|
||||||
|
return provider.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void callback(ConfigPack pack, TerraPlugin main, T loadedConfig) throws LoadException {
|
||||||
|
registry.addUnchecked(loadedConfig.getID(), factory.build(loadedConfig, main));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,45 +0,0 @@
|
|||||||
package com.dfsek.terra.registry.master;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
|
||||||
import com.dfsek.terra.config.factories.BiomeFactory;
|
|
||||||
import com.dfsek.terra.config.factories.CarverFactory;
|
|
||||||
import com.dfsek.terra.config.factories.ConfigFactory;
|
|
||||||
import com.dfsek.terra.config.factories.FloraFactory;
|
|
||||||
import com.dfsek.terra.config.factories.OreFactory;
|
|
||||||
import com.dfsek.terra.config.factories.PaletteFactory;
|
|
||||||
import com.dfsek.terra.config.factories.StructureFactory;
|
|
||||||
import com.dfsek.terra.config.factories.TreeFactory;
|
|
||||||
import com.dfsek.terra.config.prototype.ConfigType;
|
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.CarverTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.FloraTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.OreTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.PaletteTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.StructureTemplate;
|
|
||||||
import com.dfsek.terra.config.templates.TreeTemplate;
|
|
||||||
import com.dfsek.terra.registry.OpenRegistry;
|
|
||||||
|
|
||||||
public class ConfigTypeRegistry extends OpenRegistry<ConfigType<?>> {
|
|
||||||
public ConfigTypeRegistry() {
|
|
||||||
add("BIOME", (pack, main) -> load(pack.getBiomeRegistry(), new BiomeTemplate(pack, main), new BiomeFactory(pack), main));
|
|
||||||
add("PALETTE", (pack, main) -> load(pack.getPaletteRegistry(), new PaletteTemplate(), new PaletteFactory(), main));
|
|
||||||
add("ORE", (pack, main) -> load(pack.getOreRegistry(), new OreTemplate(), new OreFactory(), main));
|
|
||||||
add("FLORA", (pack, main) -> load(pack.getFloraRegistry(), new FloraTemplate(), new FloraFactory(), main));
|
|
||||||
add("CARVER", (pack, main) -> load(pack.getCarverRegistry(), new CarverTemplate(), new CarverFactory(pack), main));
|
|
||||||
add("STRUCTURE", (pack, main) -> load(pack.getStructureRegistry(), new StructureTemplate(), new StructureFactory(), main));
|
|
||||||
add("TREE", (pack, main) -> load(pack.getTreeRegistry(), new TreeTemplate(), new TreeFactory(), main));
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
private <T extends AbstractableTemplate, O> T load(CheckedRegistry<O> registry, T object, ConfigFactory<T, O> factory, TerraPlugin main) {
|
|
||||||
try {
|
|
||||||
registry.addUnchecked(object.getID(), factory.build(object, main));
|
|
||||||
} catch(LoadException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user