diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index aa24fe51c..7ac2eb8bf 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -1,13 +1,11 @@ package com.dfsek.terra; import com.dfsek.terra.biome.BiomeZone; -import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.SingleBiomeGrid; import com.dfsek.terra.biome.grid.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPackTemplate; import com.dfsek.terra.config.base.WorldConfig; -import com.dfsek.terra.config.builder.BiomeGridBuilder; +import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder; import com.dfsek.terra.generation.TerraChunkGenerator; import org.bukkit.Bukkit; import org.bukkit.World; @@ -39,14 +37,8 @@ public class TerraWorld { for(int i = 0; i < zoneSize; i++) { String partName = template.getGrids().get(i); try { - if(partName.startsWith("BIOME:")) { - UserDefinedBiome b = config.getBiome(partName.substring(6)); - definedGrids[i] = new SingleBiomeGrid(w, b); - Debug.info("Loaded single-biome grid " + partName); - } else { - BiomeGridBuilder g = config.getBiomeGrid(partName); - definedGrids[i] = g.build(w, worldConfig); - } + BiomeGridBuilder g = config.getBiomeGrid(partName); + definedGrids[i] = g.build(w, worldConfig); } catch(NullPointerException e) { safe = false; Debug.stack(e); @@ -60,14 +52,8 @@ public class TerraWorld { String erosionName = template.getErodeGrid(); if(template.isErode()) { try { - if(erosionName.startsWith("BIOME:")) { - UserDefinedBiome b = Objects.requireNonNull(config.getBiome(erosionName.substring(6))); - erosion = new SingleBiomeGrid(w, b); - Debug.info("Loaded single-biome erosion grid " + erosionName); - } else { - BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName)); - erosion = g.build(w, worldConfig); - } + BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName)); + erosion = g.build(w, worldConfig); } catch(NullPointerException e) { safe = false; Debug.stack(e); 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 3c6c2a43d..91a6eb680 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -6,7 +6,7 @@ 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; +import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder; import com.dfsek.terra.config.exception.FileMissingException; import com.dfsek.terra.config.factories.BiomeFactory; import com.dfsek.terra.config.factories.BiomeGridFactory; @@ -44,7 +44,7 @@ import java.util.logging.Level; public class ConfigPack { private final ConfigPackTemplate template = new ConfigPackTemplate(); private final BiomeRegistry biomeRegistry = new BiomeRegistry(); - private final BiomeGridRegistry biomeGridRegistry = new BiomeGridRegistry(); + private final BiomeGridRegistry biomeGridRegistry = new BiomeGridRegistry(biomeRegistry); private final StructureRegistry structureRegistry = new StructureRegistry(); private final CarverRegistry carverRegistry = new CarverRegistry(); private final PaletteRegistry paletteRegistry = new PaletteRegistry(); diff --git a/src/main/java/com/dfsek/terra/config/builder/biomegrid/BiomeGridBuilder.java b/src/main/java/com/dfsek/terra/config/builder/biomegrid/BiomeGridBuilder.java new file mode 100644 index 000000000..76faee1f3 --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/builder/biomegrid/BiomeGridBuilder.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.config.builder.biomegrid; + +import com.dfsek.terra.config.base.WorldConfig; +import org.bukkit.World; +import org.polydev.gaea.biome.BiomeGrid; + +public interface BiomeGridBuilder { + BiomeGrid build(World world, WorldConfig config); +} diff --git a/src/main/java/com/dfsek/terra/config/builder/biomegrid/SingleGridBuilder.java b/src/main/java/com/dfsek/terra/config/builder/biomegrid/SingleGridBuilder.java new file mode 100644 index 000000000..b1c0af95b --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/builder/biomegrid/SingleGridBuilder.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.config.builder.biomegrid; + +import com.dfsek.terra.biome.grid.SingleBiomeGrid; +import com.dfsek.terra.config.base.WorldConfig; +import org.bukkit.World; +import org.polydev.gaea.biome.Biome; + +public class SingleGridBuilder implements BiomeGridBuilder { + private final Biome biome; + + public SingleGridBuilder(Biome biome) { + this.biome = biome; + } + + @Override + public SingleBiomeGrid build(World world, WorldConfig config) { + return new SingleBiomeGrid(world, biome); + } +} diff --git a/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java b/src/main/java/com/dfsek/terra/config/builder/biomegrid/UserDefinedGridBuilder.java similarity index 86% rename from src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java rename to src/main/java/com/dfsek/terra/config/builder/biomegrid/UserDefinedGridBuilder.java index 9700ed953..6df57f2c9 100644 --- a/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java +++ b/src/main/java/com/dfsek/terra/config/builder/biomegrid/UserDefinedGridBuilder.java @@ -1,16 +1,17 @@ -package com.dfsek.terra.config.builder; +package com.dfsek.terra.config.builder.biomegrid; import com.dfsek.terra.biome.grid.UserDefinedGrid; import com.dfsek.terra.config.base.WorldConfig; import org.bukkit.World; import org.polydev.gaea.biome.Biome; -public class BiomeGridBuilder { +public class UserDefinedGridBuilder implements BiomeGridBuilder { private double xFreq; private double zFreq; private Biome[][] biomes; + @Override public UserDefinedGrid build(World world, WorldConfig config) { return new UserDefinedGrid(world, 1D / xFreq, 1D / zFreq, biomes, config); } diff --git a/src/main/java/com/dfsek/terra/config/factories/BiomeGridFactory.java b/src/main/java/com/dfsek/terra/config/factories/BiomeGridFactory.java index a4137bf08..11a808fef 100644 --- a/src/main/java/com/dfsek/terra/config/factories/BiomeGridFactory.java +++ b/src/main/java/com/dfsek/terra/config/factories/BiomeGridFactory.java @@ -1,18 +1,18 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.config.builder.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 { +public class BiomeGridFactory implements TerraFactory { @Override - public BiomeGridBuilder build(BiomeGridTemplate config) { + public UserDefinedGridBuilder build(BiomeGridTemplate config) { - BiomeGridBuilder holder = new BiomeGridBuilder(); + UserDefinedGridBuilder holder = new UserDefinedGridBuilder(); holder.setXFreq(config.getXFreq()); holder.setZFreq(config.getZFreq()); diff --git a/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java b/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java index f83192979..a4e97b233 100644 --- a/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java +++ b/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java @@ -1,6 +1,18 @@ package com.dfsek.terra.registry; -import com.dfsek.terra.config.builder.BiomeGridBuilder; +import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder; +import com.dfsek.terra.config.builder.biomegrid.SingleGridBuilder; public class BiomeGridRegistry extends TerraRegistry { + private final BiomeRegistry biomeRegistry; + + public BiomeGridRegistry(BiomeRegistry biomeRegistry) { + this.biomeRegistry = biomeRegistry; + } + + @Override + public BiomeGridBuilder get(String id) { + if(id.startsWith("BIOME:")) return new SingleGridBuilder(biomeRegistry.get(id.substring(6))); + return super.get(id); + } }