diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 3778da03a..92fb3e71a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -2,6 +2,7 @@ package com.dfsek.terra.fabric; import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addons.TerraAddon; @@ -36,6 +37,7 @@ import com.dfsek.terra.config.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; +import com.dfsek.terra.fabric.config.DimensionConfig; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; @@ -70,6 +72,8 @@ import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; @@ -121,6 +125,8 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { private final PluginConfig config = new PluginConfig(); + private final DimensionConfig dimensionConfig = new DimensionConfig(); + private final Transformer biomeFixer = new Transformer.Builder() .addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse(id)), Validator.notNull()) .addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse("minecraft:" + id.toLowerCase())), Validator.notNull()).build(); @@ -243,6 +249,18 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { registry.forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", FabricUtil.createBiomeID(pack, id)), FabricUtil.createBiome(fabricAddon, biome, pack)))); // Register all Terra biomes. + File configFile = new File(getDataFolder(), "config.yml"); + ConfigLoader loader = new ConfigLoader(); + loader.registerLoader(ConfigPack.class, registry); + register(loader); + try { + logger.info("Loading dimension config..."); + loader.load(dimensionConfig, new FileInputStream(configFile)); + logger.info("Loaded " + dimensionConfig.getDimensionPacks().size() + " dimension overrides."); + } catch(ConfigException | FileNotFoundException e) { + throw new RuntimeException("Failed to load dimension config", e); + } + logger.info("Loaded packs."); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/DimensionConfig.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/DimensionConfig.java new file mode 100644 index 000000000..7a8124218 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/DimensionConfig.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.fabric.config; + +import com.dfsek.tectonic.annotations.Default; +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ConfigTemplate; +import com.dfsek.terra.config.pack.ConfigPack; +import net.minecraft.util.Identifier; + +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("FieldMayBeFinal") +public class DimensionConfig implements ConfigTemplate { + @Value("dimensions") + @Default + private Map dimensionPacks = new HashMap<>(); + + public Map getDimensionPacks() { + return dimensionPacks; + } +}