Begin work on user defined Biomes and BiomeGrids

This commit is contained in:
dfsek
2020-09-08 23:02:45 -07:00
parent affef6196d
commit c5dc13f514
12 changed files with 327 additions and 73 deletions

View File

@@ -1,34 +0,0 @@
package com.dfsek.terra.biome;
import com.dfsek.terra.biome.generators.MountainGenerator;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.biome.BiomeTerrain;
import org.polydev.gaea.biome.Decorator;
import org.polydev.gaea.structures.features.Feature;
import java.util.List;
public enum TerraBiome implements Biome {
PLAINS(null), MOUNTAINS(new MountainGenerator());
private BiomeTerrain t;
TerraBiome(BiomeTerrain t) {
this.t = t;
}
public org.bukkit.block.Biome getVanillaBiome() {
return org.bukkit.block.Biome.PLAINS;
}
public BiomeTerrain getGenerator() {
return t;
}
public List<Feature> getStructureFeatures() {
return null;
}
public Decorator getDecorator() {
return null;
}
}

View File

@@ -1,29 +1,36 @@
package com.dfsek.terra.biome;
import com.dfsek.terra.Terra;
import com.dfsek.terra.config.WorldConfig;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.polydev.gaea.biome.BiomeGrid;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class TerraBiomeGrid extends BiomeGrid {
private final TerraBiome[][] grid = new TerraBiome[][] {
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS},
{TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS, TerraBiome.MOUNTAINS}};
private UserDefinedBiome[][] grid;
private final World w;
public TerraBiomeGrid(World w) {
super(w, 1f/256, 1f/512);
this.w = w;
grid = new UserDefinedBiome[16][16];
load();
}
public void load() {
for(int x = 0; x < 16; x++) {
for(int z = 0; z < 16; z++) {
WorldConfig.fromWorld(w);
grid[x][z] = WorldConfig.getBiomes().get(WorldConfig.fromWorld(w).biomeGrid.get(x).get(z)).getBiome();
}
}
super.setGrid(grid);
}
}

View File

@@ -0,0 +1,61 @@
package com.dfsek.terra.biome;
import org.bukkit.configuration.file.FileConfiguration;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.biome.BiomeTerrain;
import org.polydev.gaea.biome.Decorator;
import org.polydev.gaea.math.parsii.eval.Parser;
import org.polydev.gaea.math.parsii.eval.Scope;
import org.polydev.gaea.math.parsii.tokenizer.ParseException;
import org.polydev.gaea.structures.features.Feature;
import java.util.Collections;
import java.util.List;
public class UserDefinedBiome implements Biome {
private final UserDefinedGenerator gen;
public UserDefinedBiome(String noiseEq) throws ParseException {
Scope s = Scope.create();
gen = new UserDefinedGenerator(s, Parser.parse(noiseEq, s), Collections.emptyList());
}
/**
* Gets the Vanilla biome to represent the custom biome.
*
* @return Biome - The Vanilla biome.
*/
@Override
public org.bukkit.block.Biome getVanillaBiome() {
return org.bukkit.block.Biome.PLAINS;
}
/**
* Gets the BiomeTerrain instance used to generate the biome.
*
* @return BiomeTerrain - The terrain generation instance.
*/
@Override
public BiomeTerrain getGenerator() {
return gen;
}
/**
* Gets a list of Structure Features to be applied to all structures in the biome.
*
* @return List&lt;Feature&gt; - The list of Features.
*/
@Override
public List<Feature> getStructureFeatures() {
return null;
}
/**
* Returns the Decorator instance containing information about the population in the biome.
*
* @return Decorator - the Decorator instance.
*/
@Override
public Decorator getDecorator() {
return null;
}
}

View File

@@ -0,0 +1,77 @@
package com.dfsek.terra.biome;
import org.polydev.gaea.biome.BiomeTerrain;
import org.polydev.gaea.math.FastNoise;
import org.polydev.gaea.math.parsii.eval.Expression;
import org.polydev.gaea.math.parsii.eval.Scope;
import org.polydev.gaea.math.parsii.eval.Variable;
import org.polydev.gaea.world.BlockPalette;
import java.util.List;
public class UserDefinedGenerator extends BiomeTerrain {
private final Expression noiseExp;
private final List<Variable> vars;
private final Variable xVar;
private final Variable yVar;
private final Variable zVar;
private final Variable noise2D;
private final Variable noise3D;
public UserDefinedGenerator(Scope s, Expression e, List<Variable> v) {
this.noiseExp = e;
this.vars = v;
this.xVar = s.getVariable("x");
this.yVar = s.getVariable("y");
this.zVar = s.getVariable("z");
this.noise2D = s.getVariable("w");
this.noise3D = s.getVariable("t");
}
/**
* Gets the 2D noise at a pair of coordinates using the provided FastNoise instance.
*
* @param gen - The FastNoise instance to use.
* @param x - The x coordinate.
* @param z - The z coordinate.
* @return double - Noise value at the specified coordinates.
*/
@Override
public double getNoise(FastNoise gen, int x, int z) {
xVar.setValue(x);
yVar.setValue(0);
zVar.setValue(z);
noise2D.setValue(gen.getSimplexFractal(x, z));
noise3D.setValue(0);
return noiseExp.evaluate();
}
/**
* Gets the 3D noise at a pair of coordinates using the provided FastNoise instance.
*
* @param gen - The FastNoise instance to use.
* @param x - The x coordinate.
* @param y - The y coordinate.
* @param z - The z coordinate.
* @return double - Noise value at the specified coordinates.
*/
@Override
public double getNoise(FastNoise gen, int x, int y, int z) {
xVar.setValue(x);
yVar.setValue(y);
zVar.setValue(z);
noise2D.setValue(gen.getSimplexFractal(x, z));
noise3D.setValue(gen.getSimplexFractal(x, y, z));
return noiseExp.evaluate();
}
/**
* Gets the BlocPalette to generate the biome with.
*
* @return BlocPalette - The biome's palette.
*/
@Override
public BlockPalette getPalette() {
return null;
}
}

View File

@@ -1,21 +0,0 @@
package com.dfsek.terra.biome.generators;
import org.bukkit.Material;
import org.polydev.gaea.biome.BiomeTerrain;
import org.polydev.gaea.math.FastNoise;
import org.polydev.gaea.world.BlockPalette;
public class MountainGenerator extends BiomeTerrain {
private final BlockPalette p = new BlockPalette().add(Material.STONE, 1);
public double getNoise(FastNoise fastNoise, int i, int i1) {
return 0;
}
public double getNoise(FastNoise fastNoise, int x, int y, int z) {
return (-Math.pow((float)y/96, 2))+1D + (fastNoise.getSimplexFractal(x, y, z)/2);
}
public BlockPalette getPalette() {
return p;
}
}