Extra fancy loading

This commit is contained in:
dfsek 2020-11-29 15:24:33 -07:00
parent fe6ea9511b
commit 1c0954d0cf
13 changed files with 34 additions and 85 deletions

View File

@ -6,7 +6,7 @@ end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 120
max_line_length = 140
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off

View File

@ -4,7 +4,6 @@ import com.dfsek.tectonic.abstraction.AbstractConfigLoader;
import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.terra.Debug;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder;
@ -15,10 +14,12 @@ import com.dfsek.terra.config.factories.CarverFactory;
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.TerraFactory;
import com.dfsek.terra.config.files.FolderLoader;
import com.dfsek.terra.config.files.Loader;
import com.dfsek.terra.config.files.ZIPLoader;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.config.templates.AbstractableTemplate;
import com.dfsek.terra.config.templates.BiomeGridTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;
@ -34,6 +35,7 @@ import com.dfsek.terra.registry.FloraRegistry;
import com.dfsek.terra.registry.OreRegistry;
import com.dfsek.terra.registry.PaletteRegistry;
import com.dfsek.terra.registry.StructureRegistry;
import com.dfsek.terra.registry.TerraRegistry;
import com.dfsek.terra.util.ConfigUtil;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.world.Flora;
@ -127,71 +129,17 @@ public class ConfigPack {
for(Map.Entry<String, Double> var : template.getVariables().entrySet()) {
varScope.create(var.getKey()).setValue(var.getValue());
}
loader
.open("palettes").then(streams -> buildAll(new PaletteFactory(), paletteRegistry, abstractConfigLoader.load(streams, PaletteTemplate::new))).close()
.open("ores").then(streams -> buildAll(new OreFactory(), oreRegistry, abstractConfigLoader.load(streams, OreTemplate::new))).close()
.open("flora").then(streams -> buildAll(new FloraFactory(), floraRegistry, abstractConfigLoader.load(streams, FloraTemplate::new))).close()
.open("carving").then(streams -> buildAll(new CarverFactory(this), carverRegistry, abstractConfigLoader.load(streams, CarverTemplate::new))).close()
.open("biomes").then(streams -> buildAll(new BiomeFactory(this), biomeRegistry, abstractConfigLoader.load(streams, () -> new BiomeTemplate(this)))).close()
.open("grids").then(streams -> buildAll(new BiomeGridFactory(), biomeGridRegistry, abstractConfigLoader.load(streams, BiomeGridTemplate::new))).close();
}
loader.open("palettes")
.then(streams -> {
PaletteFactory paletteFactory = new PaletteFactory();
abstractConfigLoader.load(streams, PaletteTemplate::new).forEach(palette -> {
paletteRegistry.add(palette.getID(), paletteFactory.build(palette));
Debug.info("Loaded palette " + palette.getID());
});
})
.close()
.open("ores")
.then(streams -> {
OreFactory oreFactory = new OreFactory();
abstractConfigLoader.load(streams, OreTemplate::new).forEach(ore -> {
oreRegistry.add(ore.getID(), oreFactory.build(ore));
Debug.info("Loaded ore " + ore.getID());
});
})
.close()
.open("flora")
.then(streams -> {
FloraFactory floraFactory = new FloraFactory();
abstractConfigLoader.load(streams, FloraTemplate::new).forEach(flora -> {
floraRegistry.add(flora.getID(), floraFactory.build(flora));
Debug.info("Loaded flora " + flora.getID());
});
})
.close()
.open("structures/single")
.then(streams -> abstractConfigLoader.load(streams, StructureTemplate::new).forEach(structure -> {
structureRegistry.add(structure.getID(), structure);
Debug.info("Loaded structure " + structure.getID());
}))
.close()
.open("carving")
.then(streams -> {
CarverFactory carverFactory = new CarverFactory(this);
abstractConfigLoader.load(streams, CarverTemplate::new).forEach(carver -> {
try {
carverRegistry.add(carver.getID(), carverFactory.build(carver));
} catch(LoadException e) {
throw new RuntimeException(e);
}
Debug.info("Loaded carver " + carver.getID());
});
})
.close()
.open("biomes")
.then(streams -> {
BiomeFactory biomeFactory = new BiomeFactory(this);
abstractConfigLoader.load(streams, () -> new BiomeTemplate(this)).forEach(biome -> {
biomeRegistry.add(biome.getID(), biomeFactory.build(biome));
Debug.info("Loaded biome " + biome.getID());
});
})
.close()
.open("grids")
.then(streams -> {
BiomeGridFactory biomeGridFactory = new BiomeGridFactory();
abstractConfigLoader.load(streams, BiomeGridTemplate::new).forEach(grid -> {
biomeGridRegistry.add(grid.getID(), biomeGridFactory.build(grid));
Debug.info("Loaded BiomeGrid " + grid.getID());
});
})
.close();
private <C extends AbstractableTemplate, O> void buildAll(TerraFactory<C, O> factory, TerraRegistry<O> registry, List<C> configTemplates) throws LoadException {
for(C template : configTemplates) registry.add(template.getID(), factory.build(template));
}
public UserDefinedBiome getBiome(String id) {

View File

@ -1,13 +1,14 @@
package com.dfsek.terra.config.factories;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder;
import com.dfsek.terra.config.builder.biomegrid.UserDefinedGridBuilder;
import com.dfsek.terra.config.templates.BiomeGridTemplate;
import org.polydev.gaea.biome.Biome;
import java.util.List;
public class BiomeGridFactory implements TerraFactory<BiomeGridTemplate, UserDefinedGridBuilder> {
public class BiomeGridFactory implements TerraFactory<BiomeGridTemplate, BiomeGridBuilder> {
@Override
public UserDefinedGridBuilder build(BiomeGridTemplate config) {

View File

@ -5,10 +5,11 @@ import com.dfsek.terra.config.templates.FloraTemplate;
import com.dfsek.terra.generation.items.flora.TerraFlora;
import org.bukkit.block.data.BlockData;
import org.polydev.gaea.util.FastRandom;
import org.polydev.gaea.world.Flora;
import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette;
public class FloraFactory implements TerraFactory<FloraTemplate, TerraFlora> {
public class FloraFactory implements TerraFactory<FloraTemplate, Flora> {
@Override
public TerraFlora build(FloraTemplate config) {
Palette<BlockData> palette = new RandomPalette<>(new FastRandom(2403));

View File

@ -0,0 +1,7 @@
package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.config.ConfigTemplate;
public abstract class AbstractableTemplate implements ConfigTemplate {
public abstract String getID();
}

View File

@ -2,13 +2,12 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import org.polydev.gaea.biome.Biome;
import java.util.List;
@SuppressWarnings("unused")
public class BiomeGridTemplate implements ConfigTemplate {
public class BiomeGridTemplate extends AbstractableTemplate {
@Value("grid")
@Abstractable

View File

@ -3,7 +3,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.biome.palette.SinglePalette;
import com.dfsek.terra.carving.UserDefinedCarver;
@ -23,7 +22,7 @@ import java.util.List;
import java.util.Map;
@SuppressWarnings({"FieldMayBeFinal", "unused"})
public class BiomeTemplate implements ConfigTemplate {
public class BiomeTemplate extends AbstractableTemplate {
private final ConfigPack pack;
@Value("id")

View File

@ -3,7 +3,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.carving.CarverPalette;
import org.bukkit.Material;
import org.polydev.gaea.math.Range;
@ -14,7 +13,7 @@ import java.util.Map;
import java.util.Set;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class CarverTemplate implements ConfigTemplate {
public class CarverTemplate extends AbstractableTemplate {
@Value("id")
private String id;

View File

@ -3,7 +3,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.biome.palette.PaletteLayer;
import com.google.common.collect.Sets;
import org.bukkit.Material;
@ -12,7 +11,7 @@ import java.util.List;
import java.util.Set;
@SuppressWarnings({"FieldMayBeFinal", "unused"})
public class FloraTemplate implements ConfigTemplate {
public class FloraTemplate extends AbstractableTemplate {
@Value("id")
private String id;

View File

@ -3,7 +3,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.generation.items.ores.Ore;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
@ -14,7 +13,7 @@ import java.util.List;
import java.util.Set;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class OreTemplate implements ConfigTemplate {
public class OreTemplate extends AbstractableTemplate {
@Value("id")
private String id;

View File

@ -3,13 +3,12 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.biome.palette.PaletteLayer;
import java.util.List;
@SuppressWarnings({"FieldMayBeFinal", "unused"})
public class PaletteTemplate implements ConfigTemplate {
public class PaletteTemplate extends AbstractableTemplate {
@Value("id")
private String id;

View File

@ -2,7 +2,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.procgen.GridSpawn;
import com.dfsek.terra.structure.Structure;
import org.polydev.gaea.math.ProbabilityCollection;
@ -12,7 +11,7 @@ import org.polydev.gaea.structures.loot.LootTable;
import java.util.Map;
@SuppressWarnings("unused")
public class StructureTemplate implements ConfigTemplate {
public class StructureTemplate extends AbstractableTemplate {
@Value("id")
private String id;

View File

@ -3,7 +3,6 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.structure.Structure;
import org.bukkit.Material;
import org.polydev.gaea.math.ProbabilityCollection;
@ -11,7 +10,7 @@ import org.polydev.gaea.math.ProbabilityCollection;
import java.util.Set;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class TreeTemplate implements ConfigTemplate {
public class TreeTemplate extends AbstractableTemplate {
@Value("files")
@Abstractable
private ProbabilityCollection<Structure> structures;
@ -32,7 +31,7 @@ public class TreeTemplate implements ConfigTemplate {
return structures;
}
public String getId() {
public String getID() {
return id;
}