Vanilla biome setting (sort of) works on Fabric now

This commit is contained in:
dfsek
2020-12-13 17:18:19 -07:00
parent a058f1c58b
commit f609727afb
12 changed files with 125 additions and 101 deletions
@@ -1,11 +1,24 @@
package com.dfsek.terra.biome.grid.master;
import com.dfsek.terra.api.gaea.biome.BiomeGrid;
import com.dfsek.terra.api.generic.TerraPlugin;
import com.dfsek.terra.biome.BiomeZone;
import com.dfsek.terra.biome.grid.UserDefinedGrid;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigPackTemplate;
import com.dfsek.terra.config.builder.biomegrid.BiomeGridBuilder;
import com.dfsek.terra.debug.Debug;
public abstract class TerraBiomeGrid extends BiomeGrid {
public TerraBiomeGrid(long seed, double freq1, double freq2, int sizeX, int sizeZ) {
protected final BiomeZone zone;
public TerraBiomeGrid(long seed, double freq1, double freq2, int sizeX, int sizeZ, BiomeZone zone) {
super(seed, freq1, freq2, sizeX, sizeZ);
this.zone = zone;
}
public BiomeZone getZone() {
return zone;
}
public abstract UserDefinedGrid getGrid(int x, int z);
@@ -13,4 +26,44 @@ public abstract class TerraBiomeGrid extends BiomeGrid {
public enum Type {
RADIAL, STANDARD
}
public static final class TerraBiomeGridBuilder {
private final long seed;
private final ConfigPack config;
private final TerraPlugin main;
public TerraBiomeGridBuilder(long seed, ConfigPack config, TerraPlugin main) {
this.seed = seed;
this.config = config;
this.main = main;
}
public TerraBiomeGrid build() {
ConfigPackTemplate template = config.getTemplate();
int zoneSize = template.getGrids().size();
BiomeGrid[] definedGrids = new BiomeGrid[zoneSize];
for(int i = 0; i < zoneSize; i++) {
String partName = template.getGrids().get(i);
try {
BiomeGridBuilder g = config.getBiomeGrid(partName);
BiomeGrid b = g.build(seed, config);
definedGrids[i] = b;
} catch(NullPointerException e) {
Debug.stack(e);
main.getLogger().severe("No such BiomeGrid " + partName);
main.getLogger().severe("Please check configuration files for errors. Configuration errors will have been reported during initialization.");
main.getLogger().severe("ONLY report this to Terra if you are SURE your config is error-free.");
main.getLogger().severe("Terrain will NOT generate properly at this point. Correct your config before using your server!");
}
}
BiomeZone zone = new BiomeZone(seed, config, definedGrids);
if(template.getGridType().equals(TerraBiomeGrid.Type.RADIAL)) {
BiomeGrid internal = config.getBiomeGrid(template.getRadialInternalGrid()).build(seed, config);
return new TerraRadialBiomeGrid(seed, template.getGridFreqX(), template.getGridFreqZ(), zone, config, template.getRadialGridRadius(), internal);
} else return new TerraStandardBiomeGrid(seed, template.getGridFreqX(), template.getGridFreqZ(), zone, config);
}
}
}
@@ -16,19 +16,17 @@ import net.jafama.FastMath;
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 TerraRadialBiomeGrid(long seed, double freq1, double freq2, BiomeZone zone, ConfigPack c, double radius, BiomeGrid internal) {
super(seed, freq1, freq2, 0, 0);
super(seed, freq1, freq2, 0, 0, zone);
ConfigPackTemplate t = c.getTemplate();
if(c.getTemplate().isBlend()) {
perturb = new CoordinatePerturb(t.getBlendFreq(), t.getBlendAmp(), seed);
}
this.zone = zone;
if(c.getTemplate().isErode()) {
erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), seed);
}
@@ -14,17 +14,15 @@ import com.dfsek.terra.config.base.ConfigPackTemplate;
public class TerraStandardBiomeGrid extends TerraBiomeGrid {
private static final int failNum = 0;
private final BiomeZone zone;
private CoordinatePerturb perturb;
private ErosionNoise erode;
public TerraStandardBiomeGrid(long seed, double freq1, double freq2, BiomeZone zone, ConfigPack c) {
super(seed, freq1, freq2, 0, 0);
super(seed, freq1, freq2, 0, 0, zone);
ConfigPackTemplate t = c.getTemplate();
if(c.getTemplate().isBlend()) {
perturb = new CoordinatePerturb(t.getBlendFreq(), t.getBlendAmp(), seed);
}
this.zone = zone;
if(c.getTemplate().isErode()) {
erode = new ErosionNoise(t.getErodeFreq(), t.getErodeThresh(), t.getErodeOctaves(), seed);
}