mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-26 22:10:22 +00:00
basic implementation
This commit is contained in:
1 parent
58b5f3a5fe
commit
e6931a53d6
4 files changed
+95
-22
No files matched your search
@@ -2,6 +2,8 @@ package com.dfsek.terra.config.pack;
|
|||||||
|
|
||||||
import com.dfsek.paralithic.eval.parser.Scope;
|
import com.dfsek.paralithic.eval.parser.Scope;
|
||||||
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
|
import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
|
||||||
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
import com.dfsek.tectonic.config.Configuration;
|
||||||
import com.dfsek.tectonic.exception.ConfigException;
|
import com.dfsek.tectonic.exception.ConfigException;
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||||
@@ -24,14 +26,7 @@ import com.dfsek.terra.api.world.palette.Palette;
|
|||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
import com.dfsek.terra.carving.UserDefinedCarver;
|
||||||
import com.dfsek.terra.config.builder.BiomeBuilder;
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import com.dfsek.terra.config.dummy.DummyWorld;
|
import com.dfsek.terra.config.dummy.DummyWorld;
|
||||||
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.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.fileloaders.FolderLoader;
|
import com.dfsek.terra.config.fileloaders.FolderLoader;
|
||||||
import com.dfsek.terra.config.fileloaders.Loader;
|
import com.dfsek.terra.config.fileloaders.Loader;
|
||||||
import com.dfsek.terra.config.fileloaders.ZIPLoader;
|
import com.dfsek.terra.config.fileloaders.ZIPLoader;
|
||||||
@@ -41,14 +36,9 @@ import com.dfsek.terra.config.loaders.config.biome.templates.provider.ImageProvi
|
|||||||
import com.dfsek.terra.config.loaders.config.biome.templates.provider.SingleBiomeProviderTemplate;
|
import com.dfsek.terra.config.loaders.config.biome.templates.provider.SingleBiomeProviderTemplate;
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
|
import com.dfsek.terra.config.loaders.config.sampler.NoiseSamplerBuilderLoader;
|
||||||
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
import com.dfsek.terra.config.loaders.config.sampler.templates.ImageSamplerTemplate;
|
||||||
|
import com.dfsek.terra.config.prototype.ConfigType;
|
||||||
|
import com.dfsek.terra.config.prototype.ProtoConfig;
|
||||||
import com.dfsek.terra.config.templates.AbstractableTemplate;
|
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 com.dfsek.terra.registry.OpenRegistry;
|
||||||
import com.dfsek.terra.registry.config.BiomeRegistry;
|
import com.dfsek.terra.registry.config.BiomeRegistry;
|
||||||
import com.dfsek.terra.registry.config.CarverRegistry;
|
import com.dfsek.terra.registry.config.CarverRegistry;
|
||||||
@@ -74,7 +64,9 @@ import java.io.FileNotFoundException;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -224,14 +216,22 @@ public class ConfigPack implements LoaderRegistrar {
|
|||||||
}
|
}
|
||||||
}).close();
|
}).close();
|
||||||
|
|
||||||
loader
|
List<Configuration> configurations = new ArrayList<>();
|
||||||
.open("carving", ".yml").then(streams -> buildAll(new CarverFactory(this), carverRegistry, abstractConfigLoader.load(streams, CarverTemplate::new), main)).close()
|
|
||||||
.open("palettes", ".yml").then(streams -> buildAll(new PaletteFactory(), paletteRegistry, abstractConfigLoader.load(streams, PaletteTemplate::new), main)).close()
|
loader.open("", ".yml").then(streams -> streams.forEach(stream -> configurations.add(new Configuration(stream))));
|
||||||
.open("ores", ".yml").then(streams -> buildAll(new OreFactory(), oreRegistry, abstractConfigLoader.load(streams, OreTemplate::new), main)).close()
|
|
||||||
.open("structures/trees", ".yml").then(streams -> buildAll(new TreeFactory(), treeRegistry, abstractConfigLoader.load(streams, TreeTemplate::new), main)).close()
|
ConfigLoader protoLoader = new ConfigLoader();
|
||||||
.open("structures/structures", ".yml").then(streams -> buildAll(new StructureFactory(), structureRegistry, abstractConfigLoader.load(streams, StructureTemplate::new), main)).close()
|
Map<ConfigType<? extends ConfigTemplate>, List<Configuration>> configs = new HashMap<>();
|
||||||
.open("flora", ".yml").then(streams -> buildAll(new FloraFactory(), floraRegistry, abstractConfigLoader.load(streams, FloraTemplate::new), main)).close()
|
|
||||||
.open("biomes", ".yml").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this, main)), main)).close();
|
for(Configuration configuration : configurations) {
|
||||||
|
ProtoConfig config = new ProtoConfig();
|
||||||
|
protoLoader.load(config, configuration);
|
||||||
|
configs.computeIfAbsent(config.getType(), configType -> new ArrayList<>()).add(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Map.Entry<ConfigType<? extends ConfigTemplate>, List<Configuration>> entry : configs.entrySet()) {
|
||||||
|
abstractConfigLoader.loadConfigs(entry.getValue(), () -> entry.getKey().getTemplate(this, main));
|
||||||
|
}
|
||||||
|
|
||||||
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
main.getEventManager().callEvent(new ConfigPackPostLoadEvent(this));
|
||||||
main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms.");
|
main.logger().info("Loaded config pack \"" + template.getID() + "\" v" + template.getVersion() + " by " + template.getAuthor() + " in " + (System.nanoTime() - start) / 1000000D + "ms.");
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.dfsek.terra.config.prototype;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface ConfigType<T extends ConfigTemplate> {
|
||||||
|
T getTemplate(ConfigPack pack, TerraPlugin main);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.dfsek.terra.config.prototype;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
|
||||||
|
public class ProtoConfig implements ConfigTemplate {
|
||||||
|
@Value("id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@Value("type")
|
||||||
|
private ConfigType<?> type;
|
||||||
|
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigType<?> getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
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) throws LoadException {
|
||||||
|
registry.addUnchecked(object.getID(), factory.build(object, main));
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user