From 4ceb4e22d4359f235ad971b70a10c36b70badd47 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 7 Dec 2020 00:24:40 -0700 Subject: [PATCH] make TerraBiomeGrid abstract, add TerraRadialBiomeGrid implementation & config options Also adds lots of BiomeGrid validation stuff --- src/main/java/com/dfsek/terra/TerraWorld.java | 10 +++- .../dfsek/terra/async/AsyncBiomeFinder.java | 2 +- .../dfsek/terra/async/AsyncFeatureFinder.java | 2 +- .../terra/async/AsyncStructureFinder.java | 2 +- .../biome/grid/master/TerraBiomeGrid.java | 17 ++++++ .../TerraRadialBiomeGrid.java} | 34 +++++------ .../grid/master/TerraStandardBiomeGrid.java | 57 +++++++++++++++++++ .../com/dfsek/terra/carving/CarverCache.java | 2 +- .../terra/command/biome/BiomeCommand.java | 2 +- .../dfsek/terra/config/base/ConfigPack.java | 10 ++++ .../terra/config/base/ConfigPackTemplate.java | 37 +++++++++++- .../generation/ElevationInterpolator.java | 2 +- .../com/dfsek/terra/image/ImageLoader.java | 2 +- .../terra/image/WorldImageGenerator.java | 2 +- .../terra/population/FloraPopulator.java | 2 +- .../terra/population/StructurePopulator.java | 2 +- .../dfsek/terra/population/TreePopulator.java | 2 +- .../terra/registry/BiomeGridRegistry.java | 6 ++ .../java/com/dfsek/terra/util/ConfigUtil.java | 2 + 19 files changed, 161 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/biome/grid/master/TerraBiomeGrid.java rename src/main/java/com/dfsek/terra/biome/grid/{TerraBiomeGrid.java => master/TerraRadialBiomeGrid.java} (73%) create mode 100644 src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index c4aaad7c6..a401d16f4 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -1,7 +1,9 @@ package com.dfsek.terra; import com.dfsek.terra.biome.BiomeZone; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraRadialBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraStandardBiomeGrid; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPackTemplate; import com.dfsek.terra.config.base.WorldConfig; @@ -52,7 +54,11 @@ public class TerraWorld { } } zone = new BiomeZone(w, worldConfig, definedGrids); - grid = new TerraBiomeGrid(w, template.getGridFreqX(), template.getGridFreqZ(), zone, config); + + if(template.getGridType().equals(TerraBiomeGrid.Type.RADIAL)) { + BiomeGrid internal = config.getBiomeGrid(template.getRadialInternalGrid()).build(w, worldConfig); + grid = new TerraRadialBiomeGrid(w, template.getGridFreqX(), template.getGridFreqZ(), zone, config, template.getRadialGridRadius(), internal); + } else grid = new TerraStandardBiomeGrid(w, template.getGridFreqX(), template.getGridFreqZ(), zone, config); } public static void loadWorld(WorldConfig w) { diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java index 464a2d334..539b0923d 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java @@ -1,6 +1,6 @@ package com.dfsek.terra.async; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.Location; import org.bukkit.util.Vector; diff --git a/src/main/java/com/dfsek/terra/async/AsyncFeatureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncFeatureFinder.java index 84ca11047..71761701b 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncFeatureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncFeatureFinder.java @@ -1,6 +1,6 @@ package com.dfsek.terra.async; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java index 506150ab2..87afc4fc4 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java @@ -1,7 +1,7 @@ package com.dfsek.terra.async; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.TerraStructure; import com.dfsek.terra.procgen.GridSpawn; import com.dfsek.terra.structure.Rotation; diff --git a/src/main/java/com/dfsek/terra/biome/grid/master/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/master/TerraBiomeGrid.java new file mode 100644 index 000000000..4b4c8dd92 --- /dev/null +++ b/src/main/java/com/dfsek/terra/biome/grid/master/TerraBiomeGrid.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.biome.grid.master; + +import com.dfsek.terra.biome.grid.UserDefinedGrid; +import org.bukkit.World; +import org.polydev.gaea.biome.BiomeGrid; + +public abstract class TerraBiomeGrid extends BiomeGrid { + public TerraBiomeGrid(World w, double freq1, double freq2, int sizeX, int sizeZ) { + super(w, freq1, freq2, sizeX, sizeZ); + } + + public abstract UserDefinedGrid getGrid(int x, int z); + + public enum Type { + RADIAL, STANDARD + } +} diff --git a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java similarity index 73% rename from src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java rename to src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java index 4812a0c03..85fbc414a 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/master/TerraRadialBiomeGrid.java @@ -1,29 +1,29 @@ -package com.dfsek.terra.biome.grid; +package com.dfsek.terra.biome.grid.master; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.biome.grid.UserDefinedGrid; import com.dfsek.terra.biome.postprocessing.CoordinatePerturb; import com.dfsek.terra.biome.postprocessing.ErosionNoise; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigPackTemplate; -import com.dfsek.terra.config.base.PluginConfig; -import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.procgen.math.Vector2; +import net.jafama.FastMath; import org.bukkit.Location; import org.bukkit.World; import org.polydev.gaea.biome.Biome; import org.polydev.gaea.biome.BiomeGrid; import org.polydev.gaea.generation.GenerationPhase; -import java.util.logging.Level; - -public class TerraBiomeGrid extends BiomeGrid { - private static int failNum = 0; +public class TerraRadialBiomeGrid extends TerraBiomeGrid { + private static final int failNum = 0; private final BiomeZone zone; + private final double radiusSq; + private final BiomeGrid internal; private CoordinatePerturb perturb; private ErosionNoise erode; - public TerraBiomeGrid(World w, double freq1, double freq2, BiomeZone zone, ConfigPack c) { + public TerraRadialBiomeGrid(World w, double freq1, double freq2, BiomeZone zone, ConfigPack c, double radius, BiomeGrid internal) { super(w, freq1, freq2, 0, 0); ConfigPackTemplate t = c.getTemplate(); if(c.getTemplate().isBlend()) { @@ -33,16 +33,18 @@ public class TerraBiomeGrid extends BiomeGrid { if(c.getTemplate().isErode()) { erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), w.getSeed()); } + this.radiusSq = FastMath.pow2(radius); + this.internal = internal; } + @Override public UserDefinedGrid getGrid(int x, int z) { return (UserDefinedGrid) zone.getGrid(x, z); } @Override public Biome getBiome(int x, int z, GenerationPhase phase) { - int xp = x; - int zp = z; + int xp = x, zp = z; if(perturb != null && (phase.equals(GenerationPhase.PALETTE_APPLY) || phase.equals(GenerationPhase.POPULATE))) { Vector2 perturbCoords = perturb.getShiftedCoords(x, z); xp = (int) perturbCoords.getX(); @@ -50,14 +52,10 @@ public class TerraBiomeGrid extends BiomeGrid { } UserDefinedBiome b; - try { + if(x * x + z * z > radiusSq) { b = (UserDefinedBiome) zone.getGrid(xp, zp).getBiome(xp, zp, phase); - } catch(NullPointerException e) { - if(PluginConfig.isDebug()) e.printStackTrace(); - if(failNum % 256 == 0) - LangUtil.log("error.severe-config", Level.SEVERE, String.valueOf(x), String.valueOf(z)); - failNum++; - return null; + } else { + b = (UserDefinedBiome) internal.getBiome(xp, zp, phase); } if(erode != null && erode.isEroded(xp, zp)) return b.getErode(); return b; @@ -67,6 +65,4 @@ public class TerraBiomeGrid extends BiomeGrid { public Biome getBiome(Location l, GenerationPhase phase) { return getBiome(l.getBlockX(), l.getBlockZ(), phase); } - - } diff --git a/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java new file mode 100644 index 000000000..3ade9babf --- /dev/null +++ b/src/main/java/com/dfsek/terra/biome/grid/master/TerraStandardBiomeGrid.java @@ -0,0 +1,57 @@ +package com.dfsek.terra.biome.grid.master; + +import com.dfsek.terra.biome.BiomeZone; +import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.biome.grid.UserDefinedGrid; +import com.dfsek.terra.biome.postprocessing.CoordinatePerturb; +import com.dfsek.terra.biome.postprocessing.ErosionNoise; +import com.dfsek.terra.config.base.ConfigPack; +import com.dfsek.terra.config.base.ConfigPackTemplate; +import com.dfsek.terra.procgen.math.Vector2; +import org.bukkit.Location; +import org.bukkit.World; +import org.polydev.gaea.biome.Biome; +import org.polydev.gaea.generation.GenerationPhase; + +public class TerraStandardBiomeGrid extends TerraBiomeGrid { + private static final int failNum = 0; + private final BiomeZone zone; + private CoordinatePerturb perturb; + private ErosionNoise erode; + + public TerraStandardBiomeGrid(World w, double freq1, double freq2, BiomeZone zone, ConfigPack c) { + super(w, freq1, freq2, 0, 0); + ConfigPackTemplate t = c.getTemplate(); + if(c.getTemplate().isBlend()) { + perturb = new CoordinatePerturb(t.getBlendFreq(), t.getBlendAmp(), w.getSeed()); + } + this.zone = zone; + if(c.getTemplate().isErode()) { + erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), w.getSeed()); + } + } + + @Override + public UserDefinedGrid getGrid(int x, int z) { + return (UserDefinedGrid) zone.getGrid(x, z); + } + + @Override + public Biome getBiome(int x, int z, GenerationPhase phase) { + int xp = x, zp = z; + if(perturb != null && (phase.equals(GenerationPhase.PALETTE_APPLY) || phase.equals(GenerationPhase.POPULATE))) { + Vector2 perturbCoords = perturb.getShiftedCoords(x, z); + xp = (int) perturbCoords.getX(); + zp = (int) perturbCoords.getZ(); + } + + UserDefinedBiome b = (UserDefinedBiome) zone.getGrid(xp, zp).getBiome(xp, zp, phase); + if(erode != null && erode.isEroded(xp, zp)) return b.getErode(); + return b; + } + + @Override + public Biome getBiome(Location l, GenerationPhase phase) { + return getBiome(l.getBlockX(), l.getBlockZ(), phase); + } +} diff --git a/src/main/java/com/dfsek/terra/carving/CarverCache.java b/src/main/java/com/dfsek/terra/carving/CarverCache.java index 5de81ee60..d5a1d8580 100644 --- a/src/main/java/com/dfsek/terra/carving/CarverCache.java +++ b/src/main/java/com/dfsek/terra/carving/CarverCache.java @@ -2,7 +2,7 @@ package com.dfsek.terra.carving; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.World; import org.bukkit.util.Vector; diff --git a/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java b/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java index 8eb36ae61..69eb48f59 100644 --- a/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java +++ b/src/main/java/com/dfsek/terra/command/biome/BiomeCommand.java @@ -2,7 +2,7 @@ package com.dfsek.terra.command.biome; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.lang.LangUtil; import org.bukkit.World; import org.bukkit.command.Command; 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 3f8141d43..fff58284a 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -5,6 +5,7 @@ import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.terra.biome.UserDefinedBiome; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder; import com.dfsek.terra.config.exception.FileMissingException; @@ -160,6 +161,15 @@ public class ConfigPack { throw new LoadException("Invalid erosion biome defined in biome \"" + b.getID() + "\"", e); } } + + for(String gridName : template.getGrids()) { + if(!biomeGridRegistry.contains(gridName)) throw new LoadException("No such BiomeGrid \"" + gridName + "\""); + } + + if(template.getGridType().equals(TerraBiomeGrid.Type.RADIAL) && !biomeGridRegistry.contains(template.getRadialInternalGrid())) { + throw new LoadException("No such BiomeGrid \"" + template.getRadialInternalGrid() + "\""); + } + template.getStructureLocatables().forEach((type, name) -> structureMap.put(Objects.requireNonNull(type), Objects.requireNonNull(structureRegistry.get(name)))); LangUtil.log("config-pack.loaded", Level.INFO, template.getID(), String.valueOf((System.nanoTime() - start) / 1000000D), template.getAuthor(), template.getVersion()); diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java b/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java index 4de6e3ae1..c574ada56 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPackTemplate.java @@ -2,7 +2,9 @@ package com.dfsek.terra.config.base; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; -import com.dfsek.tectonic.config.ConfigTemplate; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.util.StructureTypeEnum; @@ -11,7 +13,7 @@ import java.util.List; import java.util.Map; @SuppressWarnings({"unused", "FieldMayBeFinal"}) -public class ConfigPackTemplate implements ConfigTemplate { +public class ConfigPackTemplate implements ValidatedConfigTemplate { @Value("id") private String id; @@ -97,6 +99,18 @@ public class ConfigPackTemplate implements ConfigTemplate { @Default private String version = "0.1.0"; + @Value("grid-options.type") + @Default + private TerraBiomeGrid.Type gridType = TerraBiomeGrid.Type.STANDARD; + + @Value("grid-options.radial.radius") + @Default + private double radius = 1000D; + + @Value("grid-options.radial.internal-grid") + @Default + private String internalGrid = null; + public String getVersion() { return version; } @@ -184,4 +198,23 @@ public class ConfigPackTemplate implements ConfigTemplate { public int getErodeOctaves() { return erodeOctaves; } + + public double getRadialGridRadius() { + return radius; + } + + public String getRadialInternalGrid() { + return internalGrid; + } + + public TerraBiomeGrid.Type getGridType() { + return gridType; + } + + @Override + public boolean validate() throws ValidationException { + if(gridType.equals(TerraBiomeGrid.Type.RADIAL) && internalGrid == null) + throw new ValidationException("No internal BiomeGrid specified"); + return true; + } } diff --git a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java index c446775d0..e02ddb546 100644 --- a/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java +++ b/src/main/java/com/dfsek/terra/generation/ElevationInterpolator.java @@ -1,6 +1,6 @@ package com.dfsek.terra.generation; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.config.WorldGenerator; import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.math.Interpolator; diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index 467acea87..0af39313f 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -2,7 +2,7 @@ package com.dfsek.terra.image; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.BiomeZone; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.debug.gui.DebugGUI; import net.jafama.FastMath; diff --git a/src/main/java/com/dfsek/terra/image/WorldImageGenerator.java b/src/main/java/com/dfsek/terra/image/WorldImageGenerator.java index 3ced708c3..68fcedb0e 100644 --- a/src/main/java/com/dfsek/terra/image/WorldImageGenerator.java +++ b/src/main/java/com/dfsek/terra/image/WorldImageGenerator.java @@ -1,7 +1,7 @@ package com.dfsek.terra.image; import com.dfsek.terra.TerraWorld; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import org.bukkit.World; import org.polydev.gaea.biome.NormalizationUtil; diff --git a/src/main/java/com/dfsek/terra/population/FloraPopulator.java b/src/main/java/com/dfsek/terra/population/FloraPopulator.java index e8354175c..0d7531ed3 100644 --- a/src/main/java/com/dfsek/terra/population/FloraPopulator.java +++ b/src/main/java/com/dfsek/terra/population/FloraPopulator.java @@ -3,7 +3,7 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.flora.FloraLayer; import com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Chunk; diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java index fe32fb759..c85529d44 100644 --- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java +++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java @@ -3,7 +3,7 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.debug.Debug; import com.dfsek.terra.generation.items.TerraStructure; diff --git a/src/main/java/com/dfsek/terra/population/TreePopulator.java b/src/main/java/com/dfsek/terra/population/TreePopulator.java index 7bbb07977..e85ab6988 100644 --- a/src/main/java/com/dfsek/terra/population/TreePopulator.java +++ b/src/main/java/com/dfsek/terra/population/TreePopulator.java @@ -3,7 +3,7 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.biome.grid.TerraBiomeGrid; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.generation.items.tree.TreeLayer; import com.dfsek.terra.procgen.math.Vector2; import net.jafama.FastMath; diff --git a/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java b/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java index a4e97b233..b3f3a88c5 100644 --- a/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java +++ b/src/main/java/com/dfsek/terra/registry/BiomeGridRegistry.java @@ -15,4 +15,10 @@ public class BiomeGridRegistry extends TerraRegistry { if(id.startsWith("BIOME:")) return new SingleGridBuilder(biomeRegistry.get(id.substring(6))); return super.get(id); } + + @Override + public boolean contains(String name) { + if(name.startsWith("BIOME:")) return biomeRegistry.contains(name.substring(6)); + return super.contains(name); + } } diff --git a/src/main/java/com/dfsek/terra/util/ConfigUtil.java b/src/main/java/com/dfsek/terra/util/ConfigUtil.java index 4e7264723..c5c27ecca 100644 --- a/src/main/java/com/dfsek/terra/util/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/util/ConfigUtil.java @@ -1,6 +1,7 @@ package com.dfsek.terra.util; import com.dfsek.tectonic.loading.TypeRegistry; +import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.palette.PaletteHolder; import com.dfsek.terra.biome.palette.PaletteLayer; import com.dfsek.terra.carving.CarverPalette; @@ -69,6 +70,7 @@ public final class ConfigUtil { .registerLoader(Feature.class, new StructureFeatureLoader()) .registerLoader(ImageLoader.class, new ImageLoaderLoader()) .registerLoader(EntityType.class, (t, o, l) -> EntityType.valueOf((String) o)) + .registerLoader(TerraBiomeGrid.Type.class, (t, o, l) -> TerraBiomeGrid.Type.valueOf((String) o)) .registerLoader(StructureTypeEnum.class, (t, o, l) -> StructureTypeEnum.valueOf((String) o)) .registerLoader(ImageLoader.Channel.class, (t, o, l) -> ImageLoader.Channel.valueOf((String) o)) .registerLoader(ImageLoader.Align.class, (t, o, l) -> ImageLoader.Align.valueOf((String) o))