diff --git a/lib/Tectonic-0.1.0.jar b/lib/Tectonic-0.1.0.jar index 4ac0fea7c..40e2f36a1 100644 Binary files a/lib/Tectonic-0.1.0.jar and b/lib/Tectonic-0.1.0.jar differ diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 8c4d1a2da..f385f18fe 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -6,6 +6,7 @@ import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.base.WorldConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.generation.TerraChunkGenerator; +import com.dfsek.terra.registry.ConfigRegistry; import com.dfsek.terra.util.PaperUtil; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -49,6 +50,7 @@ public class Terra extends GaeaPlugin { PluginConfig.load(this); LangUtil.load(PluginConfig.getLanguage(), this); // Load language. TerraWorld.invalidate(); + ConfigRegistry.loadAll(this); PluginCommand c = Objects.requireNonNull(getCommand("terra")); TerraCommand command = new TerraCommand(this); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 0297bbf40..7fe7cceda 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -3,6 +3,7 @@ package com.dfsek.terra.config.base; import com.dfsek.tectonic.abstraction.AbstractConfigLoader; import com.dfsek.tectonic.exception.ConfigException; 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.BiomeGridBuilder; @@ -35,7 +36,6 @@ import java.util.logging.Level; * Represents a Terra configuration pack. */ public class ConfigPack { - private static final Map configs = new HashMap<>(); private final ConfigPackTemplate template = new ConfigPackTemplate(); private final Map biomes = new HashMap<>(); private final Map biomeGrids = new HashMap<>(); @@ -60,31 +60,35 @@ public class ConfigPack { AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader(); List structureTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "structures/single").toPath()), StructureTemplate::new); - structureTemplates.forEach(structure -> structures.put(structure.getId(), structure)); + structureTemplates.forEach(structure -> { + structures.put(structure.getID(), structure); + Debug.info("Loaded structure " + structure.getID()); + }); List carverTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "carving").toPath()), CarverTemplate::new); CarverFactory carverFactory = new CarverFactory(); - carverTemplates.forEach(carver -> carvers.put(carver.getId(), carverFactory.build(carver))); + carverTemplates.forEach(carver -> { + carvers.put(carver.getID(), carverFactory.build(carver)); + Debug.info("Loaded carver " + carver.getID()); + }); List biomeTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "biomes").toPath()), () -> new BiomeTemplate(this)); BiomeFactory biomeFactory = new BiomeFactory(); - biomeTemplates.forEach(biome -> biomes.put(biome.getID(), biomeFactory.build(biome))); + biomeTemplates.forEach(biome -> { + biomes.put(biome.getID(), biomeFactory.build(biome)); + Debug.info("Loaded biome " + biome.getID()); + }); List biomeGridTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "grids").toPath()), BiomeGridTemplate::new); BiomeGridFactory biomeGridFactory = new BiomeGridFactory(); - biomeGridTemplates.forEach(grid -> biomeGrids.put(grid.getID(), biomeGridFactory.build(grid))); - - - configs.put(template.getID(), this); - + biomeGridTemplates.forEach(grid -> { + biomeGrids.put(grid.getID(), biomeGridFactory.build(grid)); + Debug.info("Loaded BiomeGrid " + grid.getID()); + }); LangUtil.log("config-pack.loaded", Level.INFO, template.getID(), String.valueOf((System.nanoTime() - l) / 1000000D)); } - public static ConfigPack fromID(String id) { - return configs.get(id); - } - public UserDefinedBiome getBiome(String id) { return biomes.get(id); } diff --git a/src/main/java/com/dfsek/terra/config/base/PluginConfig.java b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java index 716c372ab..9cfba5641 100644 --- a/src/main/java/com/dfsek/terra/config/base/PluginConfig.java +++ b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java @@ -69,6 +69,7 @@ public class PluginConfig implements ConfigTemplate { } catch(ConfigException | IOException e) { e.printStackTrace(); } + logger.info("Debug: " + isDebug()); } public static String getLanguage() { diff --git a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java index 6038104c6..e8554ed48 100644 --- a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java +++ b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java @@ -4,6 +4,7 @@ import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.terra.Debug; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.image.ImageLoader; +import com.dfsek.terra.registry.ConfigRegistry; import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; @@ -54,7 +55,7 @@ public class WorldConfig implements ConfigTemplate { // Get values from config. fromImage = config.getBoolean("image.enable", false); - tConfig = ConfigPack.fromID(configID); + tConfig = ConfigRegistry.getRegistry().get(configID); // Load image stuff try { diff --git a/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java b/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java index b25c698d8..7658a8062 100644 --- a/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java +++ b/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java @@ -9,7 +9,7 @@ public class CarverFactory implements TerraFactory update = new HashSet<>(); - public String getId() { + public String getID() { return id; } diff --git a/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java b/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java index e5c7c73d2..694881957 100644 --- a/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java +++ b/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java @@ -48,7 +48,7 @@ public class StructureTemplate implements ConfigTemplate { return loot; } - public String getId() { + public String getID() { return id; } diff --git a/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java b/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java index ba4ab0c45..c9f60b44d 100644 --- a/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java +++ b/src/main/java/com/dfsek/terra/registry/ConfigRegistry.java @@ -1,6 +1,7 @@ package com.dfsek.terra.registry; import com.dfsek.tectonic.exception.ConfigException; +import com.dfsek.terra.Terra; import com.dfsek.terra.config.base.ConfigPack; import java.io.File; @@ -9,8 +10,30 @@ import java.io.File; * Class to hold config packs */ public class ConfigRegistry extends TerraRegistry { + private static ConfigRegistry singleton; + + private ConfigRegistry() { + + } + + public static ConfigRegistry getRegistry() { + if(singleton == null) singleton = new ConfigRegistry(); + return singleton; + } + public void load(File folder) throws ConfigException { ConfigPack pack = new ConfigPack(folder); add(pack.getTemplate().getID(), pack); } + + public static void loadAll(Terra main) { + File packsFolder = new File(main.getDataFolder(), "packs"); + for(File dir : packsFolder.listFiles(File::isDirectory)) { + try { + getRegistry().load(dir); + } catch(ConfigException e) { + e.printStackTrace(); + } + } + } } diff --git a/src/main/java/com/dfsek/terra/util/ConfigUtil.java b/src/main/java/com/dfsek/terra/util/ConfigUtil.java index 53f7fa9de..2aaa0a023 100644 --- a/src/main/java/com/dfsek/terra/util/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/util/ConfigUtil.java @@ -13,8 +13,9 @@ import java.util.stream.Stream; public final class ConfigUtil { public static List loadFromPath(Path folder) { List streams = new ArrayList<>(); + folder.toFile().mkdirs(); try(Stream paths = Files.walk(folder)) { - paths.filter(Files::isRegularFile).filter(file -> file.endsWith(".yml")).forEach(file -> { + paths.filter(Files::isRegularFile).filter(file -> file.toString().toLowerCase().endsWith(".yml")).forEach(file -> { try { streams.add(new FileInputStream(file.toFile())); } catch(FileNotFoundException e) {