Begin work on config cleanup

This commit is contained in:
dfsek 2020-10-03 02:05:48 -07:00
parent b820d11f49
commit 65d50d7def
31 changed files with 443 additions and 405 deletions

View File

@ -51,5 +51,10 @@
<option name="name" value="gaea-local" />
<option name="url" value="file:$PROJECT_DIR$/../Gaea/repo" />
</remote-repository>
<remote-repository>
<option name="id" value="CodeMC" />
<option name="name" value="CodeMC" />
<option name="url" value="https://repo.codemc.org/repository/maven-public" />
</remote-repository>
</component>
</project>

14
pom.xml
View File

@ -33,6 +33,10 @@
<pattern>org.apache.commons</pattern>
<shadedPattern>com.dfsek.terra.lib.commons</shadedPattern>
</relocation>
<relocation>
<pattern>org.bstats.bukkit</pattern>
<shadedPattern>com.dfsek.terra.lib.bstats</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
@ -64,6 +68,10 @@
<id>enginehub-maven</id>
<url>http://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>CodeMC</id>
<url>https://repo.codemc.org/repository/maven-public</url>
</repository>
</repositories>
<dependencies>
@ -106,6 +114,12 @@
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>1.7</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -3,6 +3,7 @@ package com.dfsek.terra;
import com.dfsek.terra.command.TerraCommand;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.generation.TerraChunkGenerator;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration;
@ -14,7 +15,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.Objects;
public class Terra extends JavaPlugin {
private static FileConfiguration config;
private static Terra instance;
public static Terra getInstance() {
@ -29,6 +29,8 @@ public class Terra extends JavaPlugin {
@Override
public void onEnable() {
instance = this;
Metrics metrics = new Metrics(this, 9017);
metrics.addCustomChart(new Metrics.SingleLineChart("worlds", TerraWorld::numWorlds));
Debug.setMain(this);
ConfigUtil.loadConfig(this);
@ -38,7 +40,6 @@ public class Terra extends JavaPlugin {
c.setTabCompleter(command);
saveDefaultConfig();
config = getConfig();
Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave);
}

View File

@ -4,7 +4,7 @@ import com.dfsek.terra.biome.BiomeZone;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedGrid;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
@ -18,7 +18,7 @@ public class TerraWorld {
private static final Map<World, TerraWorld> map = new HashMap<>();
private final TerraBiomeGrid grid;
private final BiomeZone zone;
private final TerraConfig config;
private final ConfigPack config;
private final WorldConfig worldConfig;
private TerraWorld(World w) {
worldConfig = new WorldConfig(w, Terra.getInstance());
@ -50,7 +50,7 @@ public class TerraWorld {
grid = new TerraBiomeGrid(w, config.freq1, config.freq2, zone, config);
}
public static TerraWorld getWorld(World w) {
public static synchronized TerraWorld getWorld(World w) {
return map.computeIfAbsent(w, TerraWorld::new);
}
@ -58,7 +58,7 @@ public class TerraWorld {
return grid;
}
public TerraConfig getConfig() {
public ConfigPack getConfig() {
return config;
}
@ -70,7 +70,11 @@ public class TerraWorld {
return zone;
}
public static void invalidate() {
public static synchronized void invalidate() {
map.clear();
}
public static int numWorlds() {
return map.size();
}
}

View File

@ -1,19 +1,14 @@
package com.dfsek.terra.biome;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.base.WorldConfig;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.biome.BiomeGrid;
import org.polydev.gaea.generation.GenerationPhase;
import java.util.HashMap;
import java.util.Map;
public class TerraBiomeGrid extends BiomeGrid {
private static int failNum = 0;
private CoordinatePerturb perturb;
@ -21,7 +16,7 @@ public class TerraBiomeGrid extends BiomeGrid {
private final BiomeZone zone;
private final boolean perturbPaletteOnly;
public TerraBiomeGrid(World w, float freq1, float freq2, BiomeZone zone, TerraConfig c) {
public TerraBiomeGrid(World w, float freq1, float freq2, BiomeZone zone, ConfigPack c) {
super(w, freq1, freq2);
if(c.biomeBlend) {
perturb = new CoordinatePerturb(c.blendFreq, c.blendAmp, w.getSeed());

View File

@ -1,20 +1,15 @@
package com.dfsek.terra.carving;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.ConfigPack;
import org.polydev.gaea.math.Range;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import org.bukkit.World;
import org.bukkit.util.Vector;
import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.world.carving.Carver;
import org.polydev.gaea.world.carving.Worm;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class UserDefinedCarver extends Carver {
@ -47,7 +42,7 @@ public class UserDefinedCarver extends Carver {
@Override
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
TerraConfig c = TerraWorld.getWorld(w).getConfig();
ConfigPack c = TerraWorld.getWorld(w).getConfig();
return new Random(random.nextLong()+hash).nextInt(100) < c.getBiome((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getCarverChance(this);
}

View File

@ -18,7 +18,7 @@ import java.util.Map;
import java.util.stream.Stream;
public class ConfigLoader {
public static <T extends TerraConfigObject> Map<String, T> load(JavaPlugin main, Path file, TerraConfig config, Class<T> clazz) {
public static <T extends TerraConfig> Map<String, T> load(JavaPlugin main, Path file, ConfigPack config, Class<T> clazz) {
long l = System.nanoTime();
Map<String, T> configs = new HashMap<>();
file.toFile().mkdirs();
@ -27,7 +27,7 @@ public class ConfigLoader {
paths.filter(path -> FilenameUtils.wildcardMatch(path.toFile().getName(), "*.yml"))
.forEach(path -> {
try {
Constructor<T> c = clazz.getConstructor(File.class, TerraConfig.class);
Constructor<T> c = clazz.getConstructor(File.class, ConfigPack.class);
T o = c.newInstance(path.toFile(), config);
if(ids.contains(o.getID())) Bukkit.getLogger().severe("Duplicate ID found in file: " + path.toString());
ids.add(o.getID());

View File

@ -0,0 +1,191 @@
package com.dfsek.terra.config;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.genconfig.biome.AbstractBiomeConfig;
import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
import com.dfsek.terra.config.genconfig.CarverConfig;
import com.dfsek.terra.config.genconfig.FloraConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
import com.dfsek.terra.config.genconfig.PaletteConfig;
import com.dfsek.terra.config.genconfig.StructureConfig;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class ConfigPack extends YamlConfiguration {
private static final Map<String, ConfigPack> configs = new HashMap<>();
private final Map<String, OreConfig> ores;
private final Map<String, PaletteConfig> palettes;
private final Map<String, CarverConfig> carvers;
private final Map<String, FloraConfig> flora;
private final Map<String, StructureConfig> structures;
private final Map<String, AbstractBiomeConfig> abstractBiomes;
private final Map<String, BiomeConfig> biomes;
private final Map<String, BiomeGridConfig> grids;
private final File dataFolder;
private final String id;
public List<String> biomeList;
public float zoneFreq;
public float freq1;
public float freq2;
public int blendAmp;
public boolean biomeBlend;
public float blendFreq;
public boolean perturbPaletteOnly;
public ConfigPack(JavaPlugin main, File file) throws IOException, InvalidConfigurationException {
long l = System.nanoTime();
load(new File(file, "config.yml"));
dataFolder = file;
Logger logger = main.getLogger();
if(!contains("id")) throw new ConfigException("No ID specified!", "null");
this.id = getString("id");
ores = ConfigLoader.load(main, new File(file, "ores").toPath(), this, OreConfig.class);
palettes = ConfigLoader.load(main, new File(file, "palettes").toPath(), this, PaletteConfig.class);
carvers = ConfigLoader.load(main, new File(file, "carving").toPath(), this, CarverConfig.class);
flora = ConfigLoader.load(main, new File(file, "flora").toPath(), this, FloraConfig.class);
structures = ConfigLoader.load(main, new File(file, "structures").toPath(), this, StructureConfig.class);
abstractBiomes = ConfigLoader.load(main, new File(file, "abstract" + File.separator + "biomes").toPath(), this, AbstractBiomeConfig.class);
biomes = ConfigLoader.load(main, new File(file, "biomes").toPath(), this, BiomeConfig.class);
grids = ConfigLoader.load(main, new File(file, "grids").toPath(), this, BiomeGridConfig.class);
zoneFreq = 1f/getInt("frequencies.zone", 1536);
freq1 = 1f/getInt("frequencies.grid-x", 256);
freq2 = 1f/getInt("frequencies.grid-z", 512);
biomeBlend = getBoolean("blend.enable", false);
blendAmp = getInt("blend.amplitude", 8);
blendFreq = (float) getDouble("blend.frequency", 0.01);
perturbPaletteOnly = getBoolean("blend.ignore-terrain", true);
// Load BiomeGrids from BiomeZone
biomeList = getStringList("grids");
configs.put(id, this);
logger.info("\n\nLoaded config \"" + getID() + "\" in " + (System.nanoTime() - l)/1000000D + "ms\n\n\n");
}
public Map<String, AbstractBiomeConfig> getAbstractBiomes() {
return abstractBiomes;
}
public Map<String, BiomeConfig> getBiomes() {
return biomes;
}
public Map<String, CarverConfig> getCarvers() {
return carvers;
}
public static void loadAll(JavaPlugin main) {
configs.clear();
List<Path> subfolder;
try {
subfolder = Files.walk(new File(main.getDataFolder(), "config").toPath(), 1)
.filter(Files::isDirectory)
.collect(Collectors.toList());
} catch(IOException e) {
e.printStackTrace();
return;
}
subfolder.remove(0);
for(Path folder : subfolder) {
ConfigPack config;
try {
config = new ConfigPack(main, folder.toFile());
configs.put(config.getID(), config);
} catch(IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}
}
public File getDataFolder() {
return dataFolder;
}
public String getID() {
return id;
}
public static ConfigPack fromID(String id) {
return configs.get(id);
}
public BiomeConfig getBiome(UserDefinedBiome b) {
for(BiomeConfig biome : biomes.values()) {
if(biome.getBiome().equals(b)) return biome;
}
throw new IllegalArgumentException("No BiomeConfig for provided biome.");
}
public BiomeConfig getBiome(String id) {
return biomes.get(id);
}
public CarverConfig getCarver(String id) {
return carvers.get(id);
}
public CarverConfig getCarver(UserDefinedCarver c) {
for(CarverConfig co : carvers.values()) {
if(co.getCarver().equals(c)) return co;
}
throw new IllegalArgumentException("Unable to find carver!");
}
public StructureConfig getStructure(String id) {
return structures.get(id);
}
public PaletteConfig getPalette(String id) {
return palettes.get(id);
}
public OreConfig getOre(String id) {
return ores.get(id);
}
public List<String> getBiomeIDs() {
List<String> fill = new ArrayList<>();
for(BiomeConfig b : biomes.values()) {
fill.add(b.getID());
}
return fill;
}
public FloraConfig getFlora(String id) {
return flora.get(id);
}
public BiomeGridConfig getBiomeGrid(String id) {
return grids.get(id);
}
}

View File

@ -1,193 +1,21 @@
package com.dfsek.terra.config;
import com.dfsek.terra.Debug;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.genconfig.AbstractBiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
import com.dfsek.terra.config.genconfig.CarverConfig;
import com.dfsek.terra.config.genconfig.FloraConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
import com.dfsek.terra.config.genconfig.PaletteConfig;
import com.dfsek.terra.config.genconfig.StructureConfig;
import org.bukkit.Bukkit;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class TerraConfig extends YamlConfiguration {
private static final Map<String, TerraConfig> configs = new HashMap<>();
private final Map<String, OreConfig> ores;
private final Map<String, PaletteConfig> palettes;
private final Map<String, CarverConfig> carvers;
private final Map<String, FloraConfig> flora;
private final Map<String, StructureConfig> structures;
private final Map<String, AbstractBiomeConfig> abstractBiomes;
private final Map<String, BiomeConfig> biomes;
private final Map<String, BiomeGridConfig> grids;
private final File dataFolder;
private final String id;
public List<String> biomeList;
public float zoneFreq;
public float freq1;
public float freq2;
public int blendAmp;
public boolean biomeBlend;
public float blendFreq;
public boolean perturbPaletteOnly;
public TerraConfig(JavaPlugin main, File file) throws IOException, InvalidConfigurationException {
long l = System.nanoTime();
load(new File(file, "config.yml"));
dataFolder = file;
Logger logger = main.getLogger();
if(!contains("id")) throw new ConfigException("No ID specified!", "null");
this.id = getString("id");
ores = ConfigLoader.load(main, new File(file, "ores").toPath(), this, OreConfig.class);
palettes = ConfigLoader.load(main, new File(file, "palettes").toPath(), this, PaletteConfig.class);
carvers = ConfigLoader.load(main, new File(file, "carving").toPath(), this, CarverConfig.class);
flora = ConfigLoader.load(main, new File(file, "flora").toPath(), this, FloraConfig.class);
structures = ConfigLoader.load(main, new File(file, "structures").toPath(), this, StructureConfig.class);
abstractBiomes = ConfigLoader.load(main, new File(file, "abstract" + File.separator + "biomes").toPath(), this, AbstractBiomeConfig.class);
biomes = ConfigLoader.load(main, new File(file, "biomes").toPath(), this, BiomeConfig.class);
grids = ConfigLoader.load(main, new File(file, "grids").toPath(), this, BiomeGridConfig.class);
zoneFreq = 1f/getInt("frequencies.zone", 1536);
freq1 = 1f/getInt("frequencies.grid-x", 256);
freq2 = 1f/getInt("frequencies.grid-z", 512);
biomeBlend = getBoolean("blend.enable", false);
blendAmp = getInt("blend.amplitude", 8);
blendFreq = (float) getDouble("blend.frequency", 0.01);
perturbPaletteOnly = getBoolean("blend.ignore-terrain", true);
// Load BiomeGrids from BiomeZone
biomeList = getStringList("grids");
configs.put(id, this);
logger.info("\n\nLoaded config \"" + getID() + "\" in " + (System.nanoTime() - l)/1000000D + "ms\n\n\n");
public abstract class TerraConfig extends YamlConfiguration {
private final ConfigPack config;
public TerraConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
load(file);
this.config = config;
}
public Map<String, AbstractBiomeConfig> getAbstractBiomes() {
return abstractBiomes;
public ConfigPack getConfig() {
return config;
}
public Map<String, BiomeConfig> getBiomes() {
return biomes;
}
public Map<String, CarverConfig> getCarvers() {
return carvers;
}
public static void loadAll(JavaPlugin main) {
configs.clear();
List<Path> subfolder;
try {
subfolder = Files.walk(new File(main.getDataFolder(), "config").toPath(), 1)
.filter(Files::isDirectory)
.collect(Collectors.toList());
} catch(IOException e) {
e.printStackTrace();
return;
}
subfolder.remove(0);
for(Path folder : subfolder) {
TerraConfig config;
try {
config = new TerraConfig(main, folder.toFile());
configs.put(config.getID(), config);
} catch(IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
}
}
public File getDataFolder() {
return dataFolder;
}
public String getID() {
return id;
}
public static TerraConfig fromID(String id) {
return configs.get(id);
}
public BiomeConfig getBiome(UserDefinedBiome b) {
for(BiomeConfig biome : biomes.values()) {
if(biome.getBiome().equals(b)) return biome;
}
throw new IllegalArgumentException("No BiomeConfig for provided biome.");
}
public BiomeConfig getBiome(String id) {
return biomes.get(id);
}
public CarverConfig getCarver(String id) {
return carvers.get(id);
}
public CarverConfig getCarver(UserDefinedCarver c) {
for(CarverConfig co : carvers.values()) {
if(co.getCarver().equals(c)) return co;
}
throw new IllegalArgumentException("Unable to find carver!");
}
public StructureConfig getStructure(String id) {
return structures.get(id);
}
public PaletteConfig getPalette(String id) {
return palettes.get(id);
}
public OreConfig getOre(String id) {
return ores.get(id);
}
public List<String> getBiomeIDs() {
List<String> fill = new ArrayList<>();
for(BiomeConfig b : biomes.values()) {
fill.add(b.getID());
}
return fill;
}
public FloraConfig getFlora(String id) {
return flora.get(id);
}
public BiomeGridConfig getBiomeGrid(String id) {
return grids.get(id);
}
public abstract String getID();
}

View File

@ -1,21 +0,0 @@
package com.dfsek.terra.config;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
public abstract class TerraConfigObject extends YamlConfiguration {
private final TerraConfig config;
public TerraConfigObject(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
load(file);
this.config = config;
}
public TerraConfig getConfig() {
return config;
}
public abstract String getID();
}

View File

@ -0,0 +1,14 @@
package com.dfsek.terra.config;
import org.jetbrains.annotations.NotNull;
public abstract class TerraConfigSection {
private final TerraConfig parent;
public TerraConfigSection(@NotNull TerraConfig parent) {
this.parent = parent;
}
@NotNull
public TerraConfig getParent() {
return parent;
}
}

View File

@ -1,33 +1,20 @@
package com.dfsek.terra.config.base;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.BiomeZone;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.config.ConfigLoader;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.genconfig.AbstractBiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
import com.dfsek.terra.config.genconfig.CarverConfig;
import com.dfsek.terra.config.genconfig.FloraConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
import com.dfsek.terra.config.genconfig.PaletteConfig;
import com.dfsek.terra.config.genconfig.StructureConfig;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.time.Duration;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public final class ConfigUtil {
public static boolean debug;
@ -44,7 +31,7 @@ public final class ConfigUtil {
Logger logger = main.getLogger();
logger.info("Loading config values");
TerraConfig.loadAll(main);
ConfigPack.loadAll(main);
TerraWorld.invalidate();
}

View File

@ -1,12 +1,6 @@
package com.dfsek.terra.config.base;
import com.dfsek.terra.Terra;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedGrid;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.image.ImageLoader;
import org.bukkit.Bukkit;
import org.bukkit.World;
@ -18,16 +12,13 @@ import org.polydev.gaea.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class WorldConfig {
public boolean fromImage;
public TerraConfig config;
public ConfigPack config;
public ImageLoader.Channel biomeXChannel;
public ImageLoader.Channel biomeZChannel;
public ImageLoader.Channel zoneChannel;
@ -35,7 +26,7 @@ public class WorldConfig {
public ImageLoader imageLoader;
private TerraConfig tConfig;
private ConfigPack tConfig;
public WorldConfig(World w, JavaPlugin main) {
@ -56,7 +47,7 @@ public class WorldConfig {
fromImage = config.getBoolean("image.use-image", false);
tConfig = TerraConfig.fromID(config.getString("config"));
tConfig = ConfigPack.fromID(config.getString("config"));
// Load image stuff
try {
@ -89,7 +80,7 @@ public class WorldConfig {
main.getLogger().info("World load complete. Time elapsed: " + ((double) (System.nanoTime() - start)) / 1000000 + "ms");
}
public TerraConfig getConfig() {
public ConfigPack getConfig() {
return tConfig;
}
}

View File

@ -2,8 +2,8 @@ package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedGrid;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
@ -12,19 +12,17 @@ import org.bukkit.configuration.InvalidConfigurationException;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class BiomeGridConfig extends TerraConfigObject {
public class BiomeGridConfig extends TerraConfig {
private final String gridID;
private final UserDefinedBiome[][] gridRaw;
private final int sizeX;
private final int sizeZ;
@SuppressWarnings("unchecked")
public BiomeGridConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public BiomeGridConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
load(file);
if(!contains("id")) throw new ConfigException("Grid ID unspecified!", "null");
@ -65,7 +63,7 @@ public class BiomeGridConfig extends TerraConfigObject {
}
public UserDefinedGrid getGrid(World w, WorldConfig wc) {
TerraConfig c = wc.getConfig();
ConfigPack c = wc.getConfig();
return new UserDefinedGrid(w, c.freq1, c.freq2, gridRaw, wc);
}

View File

@ -2,8 +2,8 @@ package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit;
@ -23,7 +23,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
public class CarverConfig extends TerraConfigObject {
public class CarverConfig extends TerraConfig {
private final UserDefinedCarver carver;
private final String id;
private final Set<Material> replaceableInner;
@ -42,7 +42,7 @@ public class CarverConfig extends TerraConfigObject {
private final boolean replaceIsBlacklistBottom;
@SuppressWarnings("unchecked")
public CarverConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public CarverConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
load(file);
if(!contains("id")) throw new ConfigException("No ID specified for Carver!", "null");

View File

@ -1,7 +1,7 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Chunk;
@ -22,7 +22,7 @@ import java.util.List;
import java.util.Random;
import java.util.Set;
public class FloraConfig extends TerraConfigObject implements Flora {
public class FloraConfig extends TerraConfig implements Flora {
private final Palette<BlockData> floraPalette;
private final String id;
private final boolean physics;
@ -31,7 +31,7 @@ public class FloraConfig extends TerraConfigObject implements Flora {
Set<Material> spawnable;
Set<Material> replaceable;
public FloraConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public FloraConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
load(file);
if(!contains("id")) throw new ConfigException("Flora ID unspecified!", "null");

View File

@ -1,8 +1,8 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -14,15 +14,11 @@ import org.polydev.gaea.math.FastNoise;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
public class OreConfig extends TerraConfigObject {
public class OreConfig extends TerraConfig {
private final BlockData oreData;
private final int min;
private final int max;
@ -31,7 +27,7 @@ public class OreConfig extends TerraConfigObject {
private final String id;
private final boolean update;
Set<Material> replaceable;
public OreConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public OreConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
if(!contains("id")) throw new ConfigException("Ore ID not found!", "null");
this.id = getString("id");

View File

@ -1,8 +1,8 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
@ -19,11 +19,11 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
public class PaletteConfig extends TerraConfigObject {
public class PaletteConfig extends TerraConfig {
private final Palette<BlockData> palette;
private final String paletteID;
private boolean useNoise = false;
public PaletteConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public PaletteConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
if(!contains("id")) throw new ConfigException("Palette ID unspecified!", "null");
this.paletteID = getString("id");

View File

@ -1,8 +1,8 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
@ -20,14 +20,14 @@ import java.util.Map;
import java.util.Objects;
import java.util.Random;
public class StructureConfig extends TerraConfigObject {
public class StructureConfig extends TerraConfig {
private final ProbabilityCollection<GaeaStructure> structure = new ProbabilityCollection<>();
private final GridSpawn spawn;
private final String id;
private final Range searchStart;
private final Range bound;
StructurePopulator.SearchType type;
public StructureConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public StructureConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
if(!contains("id")) throw new ConfigException("No ID specified!", "null");
id = getString("id");

View File

@ -1,8 +1,9 @@
package com.dfsek.terra.config.genconfig;
package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.genconfig.biome.BiomeConfigUtil;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException;
@ -14,7 +15,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
public class AbstractBiomeConfig extends TerraConfigObject {
public class AbstractBiomeConfig extends TerraConfig {
private final String biomeID;
private final int floraChance;
private final int treeChance;
@ -30,14 +31,15 @@ public class AbstractBiomeConfig extends TerraConfigObject {
private final float floraFreq;
private final String oceanPalette;
private final int seaLevel;
private List<Map<?, ?>> paletteData;
private Map<String, Object> floraData;
private Map<String, Object> oreData;
private Map<String, Object> treeData;
private List<Map<?, ?>> carvingData;
private List<String> structureConfigs;
private BiomePaletteConfig palette;
private BiomeFloraConfig flora;
public AbstractBiomeConfig(File file, TerraConfig config) throws IOException, InvalidConfigurationException {
public AbstractBiomeConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
load(file);
if(!contains("id")) throw new ConfigException("Abstract Biome ID unspecified!", "null");
@ -45,9 +47,9 @@ public class AbstractBiomeConfig extends TerraConfigObject {
if(contains("carving")) carvingData = getMapList("carving");
if(contains("palette")) paletteData = getMapList("palette");
if(contains("palette")) palette = new BiomePaletteConfig(this);
if(contains("flora")) floraData = Objects.requireNonNull(getConfigurationSection("flora")).getValues(false);
if(contains("flora")) flora = new BiomeFloraConfig(this);
if(contains("trees")) treeData = Objects.requireNonNull(getConfigurationSection("trees")).getValues(false);
@ -131,8 +133,12 @@ public class AbstractBiomeConfig extends TerraConfigObject {
return floraSimplex;
}
public List<Map<?, ?>> getPaletteData() {
return paletteData;
public BiomePaletteConfig getPaletteData() {
return palette;
}
public BiomeFloraConfig getFlora() {
return flora;
}
public Map<String, Object> getFloraData() {

View File

@ -1,16 +1,19 @@
package com.dfsek.terra.config.genconfig;
package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
import com.dfsek.terra.config.genconfig.CarverConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
import com.dfsek.terra.config.genconfig.StructureConfig;
import org.polydev.gaea.math.Range;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.generation.UserDefinedDecorator;
import com.dfsek.terra.generation.UserDefinedGenerator;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.TerraConfig;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
@ -39,14 +42,14 @@ import java.util.Objects;
import java.util.Random;
import java.util.TreeMap;
public class BiomeConfig extends TerraConfigObject {
public class BiomeConfig extends TerraConfig {
private static final Palette<BlockData> oceanDefault = new RandomPalette<BlockData>(new Random(0)).add(Material.WATER.createBlockData(), 1);
private final UserDefinedBiome biome;
private final String biomeID;
private Map<OreConfig, Range> ores;
private Map<OreConfig, Range> oreHeights;
private final Map<CarverConfig, Integer> carvers;
private Map<Flora, Range> floraHeights;
private final BiomeFloraConfig flora;
private String eq;
private int floraAttempts;
private Map<Material, Palette<BlockData>> slabs;
@ -57,10 +60,10 @@ public class BiomeConfig extends TerraConfigObject {
private final Palette<BlockData> ocean;
private int seaLevel;
private final List<StructureConfig> structures;
private final TerraConfig config;
private final ConfigPack config;
@SuppressWarnings("unchecked, rawtypes")
public BiomeConfig(File file, TerraConfig config) throws InvalidConfigurationException, IOException {
public BiomeConfig(File file, ConfigPack config) throws InvalidConfigurationException, IOException {
super(file, config);
load(file);
this.config = config;
@ -84,40 +87,11 @@ public class BiomeConfig extends TerraConfigObject {
TreeMap<Integer, Palette<BlockData>> paletteMap;
// Check if biome is extending abstract biome, only use abstract biome's palette if palette is NOT defined for current biome.
List<Map<?, ?>> paletteData;
try {
if(extending && abstractBiome.getPaletteData() != null && ! contains("palette")) {
paletteData = abstractBiome.getPaletteData();
paletteMap = abstractBiome.getPaletteData().getPaletteMap();
Debug.info("Using super palette");
} else paletteData = getMapList("palette");
} catch(NullPointerException e) {
paletteData = null;
}
if(paletteData != null) {
paletteMap = new TreeMap<>();
for(Map<?, ?> e : paletteData) {
for(Map.Entry<?, ?> entry : e.entrySet()) {
try {
if(((String) entry.getKey()).startsWith("BLOCK:")) {
try {
paletteMap.put((Integer) entry.getValue(), new RandomPalette<BlockData>(new Random(0)).add(new ProbabilityCollection<BlockData>().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1));
} catch(IllegalArgumentException ex) {
throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", getID());
}
}
else {
try {
paletteMap.put((Integer) entry.getValue(), config.getPalette((String) entry.getKey()).getPalette());
} catch(NullPointerException ex) {
throw new NotFoundException("Palette", (String) entry.getKey(), getID());
}
}
} catch(ClassCastException ex) {
throw new ConfigException("Unable to parse Palette configuration! Check YAML syntax.", getID());
}
}
}
} else throw new ConfigException("No Palette specified in biome or super biome.", getID());
} else paletteMap = new BiomePaletteConfig(this).getPaletteMap();
if(paletteMap == null) throw new ConfigException("No Palette specified in biome or super biome.", getID());
// Check if carving should be handled by super biome.
List<Map<?, ?>> carvingData;
@ -184,44 +158,10 @@ public class BiomeConfig extends TerraConfigObject {
}
// Check if flora should be handled by super biome.
ProbabilityCollection<Flora> flora = new ProbabilityCollection<>();
Map<String, Object> floraData;
try {
if(extending && abstractBiome.getFloraData() != null && ! contains("flora")) {
floraData = abstractBiome.getFloraData();
Debug.info("Using super flora (" + flora.size() + " entries, " + floraChance + " % chance)");
} else floraData = Objects.requireNonNull(getConfigurationSection("flora")).getValues(false);
} catch(NullPointerException e) {
floraData = null;
}
if(floraData != null) {
floraHeights = new HashMap<>();
try {
for(Map.Entry<String, Object> e : floraData.entrySet()) {
Map<?, ?> val = ((ConfigurationSection) e.getValue()).getValues(false);
Map<?, ?> y = ((ConfigurationSection) val.get("y")).getValues(false);
try {
Debug.info("Adding " + e.getKey() + " to biome's flora list with weight " + e.getValue());
Flora floraObj = FloraType.valueOf(e.getKey());
flora.add(floraObj, (Integer) val.get("weight"));
floraHeights.put(floraObj, new Range((Integer) y.get("min"), (Integer) y.get("max")));
} catch(IllegalArgumentException ex) {
try {
Debug.info("[Terra] Is custom flora: true");
Flora floraCustom = getConfig().getFlora(e.getKey());
if(floraCustom == null) throw new NotFoundException("Flora", e.getKey(), getID());
flora.add(floraCustom, (Integer) val.get("weight"));
floraHeights.put(floraCustom, new Range((Integer) y.get("min"), (Integer) y.get("max")));
} catch(NullPointerException ex2) {
throw new NotFoundException("Flora", e.getKey(), getID());
}
}
}
} catch(ClassCastException e) {
if(ConfigUtil.debug) e.printStackTrace();
throw new ConfigException("Unable to parse Flora configuration! Check YAML syntax.", getID());
}
} else flora = new ProbabilityCollection<>();
flora = abstractBiome.getFlora();
Debug.info("Using super flora (" + flora.getFlora().size() + " entries, " + floraChance + " % chance)");
} else flora = new BiomeFloraConfig(this);
// Check if trees should be handled by super biome.
Map<String, Object> treeData;
@ -244,7 +184,7 @@ public class BiomeConfig extends TerraConfigObject {
if(eq == null || eq.equals("")) throw new ConfigException("Could not find noise equation! Biomes must include a noise equation, or extend an abstract biome with one.", getID());
// Create decorator for this config.
UserDefinedDecorator dec = new UserDefinedDecorator(flora, trees, floraChance, treeChance, treeDensity);
UserDefinedDecorator dec = new UserDefinedDecorator(flora.getFlora(), trees, floraChance, treeChance, treeDensity);
// Get Vanilla biome, throw exception if it is invalid/unspecified.
org.bukkit.block.Biome vanillaBiome;
@ -378,7 +318,7 @@ public class BiomeConfig extends TerraConfigObject {
}
public Range getFloraHeights(Flora f) {
return floraHeights.computeIfAbsent(f, input -> new Range(-1, -1));
return flora.getFloraHeights().computeIfAbsent(f, input -> new Range(-1, -1));
}
@Override

View File

@ -1,8 +1,8 @@
package com.dfsek.terra.config.genconfig;
package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.TerraConfigObject;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.NotFoundException;
import org.bukkit.Bukkit;
import org.bukkit.Material;
@ -18,7 +18,7 @@ import java.util.Map;
import java.util.Random;
public class BiomeConfigUtil {
protected static Map<Material, Palette<BlockData>> getSlabPalettes(List<Map<?, ?>> paletteConfigSection, TerraConfigObject config) throws InvalidConfigurationException {
protected static Map<Material, Palette<BlockData>> getSlabPalettes(List<Map<?, ?>> paletteConfigSection, TerraConfig config) throws InvalidConfigurationException {
Map<Material, Palette<BlockData>> paletteMap = new HashMap<>();
for(Map<?, ?> e : paletteConfigSection) {

View File

@ -0,0 +1,60 @@
package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigSection;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range;
import org.polydev.gaea.world.Flora;
import org.polydev.gaea.world.FloraType;
import java.util.HashMap;
import java.util.Map;
public class BiomeFloraConfig extends TerraConfigSection {
private final ProbabilityCollection<Flora> flora = new ProbabilityCollection<>();
private final Map<Flora, Range> floraHeights = new HashMap<>();
public BiomeFloraConfig(TerraConfig parent) throws InvalidConfigurationException {
super(parent);
ConfigurationSection cfg = parent.getConfigurationSection("flora");
if(cfg == null) return;
try {
for(Map.Entry<String, Object> e : cfg.getValues(false).entrySet()) {
Map<?, ?> val = ((ConfigurationSection) e.getValue()).getValues(false);
Map<?, ?> y = ((ConfigurationSection) val.get("y")).getValues(false);
try {
Debug.info("Adding " + e.getKey() + " to biome's flora list with weight " + e.getValue());
Flora floraObj = FloraType.valueOf(e.getKey());
flora.add(floraObj, (Integer) val.get("weight"));
floraHeights.put(floraObj, new Range((Integer) y.get("min"), (Integer) y.get("max")));
} catch(IllegalArgumentException ex) {
try {
Debug.info("[Terra] Is custom flora: true");
Flora floraCustom = parent.getConfig().getFlora(e.getKey());
if(floraCustom == null) throw new NotFoundException("Flora", e.getKey(), parent.getID());
flora.add(floraCustom, (Integer) val.get("weight"));
floraHeights.put(floraCustom, new Range((Integer) y.get("min"), (Integer) y.get("max")));
} catch(NullPointerException ex2) {
throw new NotFoundException("Flora", e.getKey(), parent.getID());
}
}
}
} catch(ClassCastException e) {
if(ConfigUtil.debug) e.printStackTrace();
throw new ConfigException("Unable to parse Flora configuration! Check YAML syntax.", parent.getID());
}
}
public ProbabilityCollection<Flora> getFlora() {
return flora;
}
public Map<Flora, Range> getFloraHeights() {
return floraHeights;
}
}

View File

@ -0,0 +1,54 @@
package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.TerraConfigSection;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
public class BiomePaletteConfig extends TerraConfigSection {
private final TreeMap<Integer, Palette<BlockData>> paletteMap = new TreeMap<>();
@SuppressWarnings("unchecked")
public BiomePaletteConfig(TerraConfig parent) throws InvalidConfigurationException {
super(parent);
List<Map<?, ?>> cfg = parent.getMapList("palette");
if(cfg.size() == 0) throw new ConfigException("Palette unspecified.", parent.getID());
for(Map<?, ?> e : cfg) {
for(Map.Entry<?, ?> entry : e.entrySet()) {
try {
if(((String) entry.getKey()).startsWith("BLOCK:")) {
try {
paletteMap.put((Integer) entry.getValue(), new RandomPalette<BlockData>(new Random(0)).add(new ProbabilityCollection<BlockData>().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1));
} catch(IllegalArgumentException ex) {
throw new ConfigException("BlockData " + entry.getKey() + " is invalid! (Palettes)", parent.getID());
}
}
else {
try {
paletteMap.put((Integer) entry.getValue(), parent.getConfig().getPalette((String) entry.getKey()).getPalette());
} catch(NullPointerException ex) {
throw new NotFoundException("Palette", (String) entry.getKey(), parent.getID());
}
}
} catch(ClassCastException ex) {
throw new ConfigException("Unable to parse Palette configuration! Check YAML syntax.", parent.getID());
}
}
}
}
public TreeMap<Integer, Palette<BlockData>> getPaletteMap() {
return paletteMap;
}
}

View File

@ -3,11 +3,9 @@ package com.dfsek.terra.generation;
import com.dfsek.terra.Debug;
import com.dfsek.terra.Terra;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
import com.dfsek.terra.population.CavePopulator;
import com.dfsek.terra.population.FloraPopulator;
import com.dfsek.terra.population.OrePopulator;
@ -22,7 +20,6 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.block.data.type.Stairs;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.biome.Biome;
@ -33,7 +30,6 @@ import org.polydev.gaea.math.ChunkInterpolator;
import org.polydev.gaea.math.FastNoise;
import org.polydev.gaea.population.PopulationManager;
import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette;
import java.io.FileNotFoundException;
import java.io.IOException;
@ -63,7 +59,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
if(needsLoad) load(world);
StructureSpawnRequirement.putNoise(world, fastNoise); // Assign noise to world to be used for structures.
ChunkData chunk = createChunkData(world);
TerraConfig config = TerraWorld.getWorld(world).getConfig();
ConfigPack config = TerraWorld.getWorld(world).getConfig();
int xOrig = (chunkX << 4);
int zOrig = (chunkZ << 4);
for(byte x = 0; x < 16; x++) {

View File

@ -2,10 +2,7 @@ package com.dfsek.terra.image;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.generation.TerraChunkGenerator;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.polydev.gaea.generation.GenerationPhase;

View File

@ -2,9 +2,8 @@ package com.dfsek.terra.population;
import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.CarverConfig;
import org.bukkit.Chunk;
import org.bukkit.Location;
@ -31,7 +30,7 @@ public class CavePopulator extends BlockPopulator {
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) {
if(ConfigUtil.masterDisableCaves) return;
try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("CaveTime")) {
TerraConfig config = TerraWorld.getWorld(world).getConfig();
ConfigPack config = TerraWorld.getWorld(world).getConfig();
for(CarverConfig c : config.getCarvers().values()) {
Map<Location, Material> shiftCandidate = new HashMap<>();
Set<Block> updateNeeded = new HashSet<>();

View File

@ -1,13 +1,11 @@
package com.dfsek.terra.population;
import com.dfsek.terra.Debug;
import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.FloraConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.block.Block;
@ -25,7 +23,7 @@ public class FloraPopulator extends GaeaBlockPopulator {
try (ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) {
TerraWorld tw = TerraWorld.getWorld(world);
TerraBiomeGrid grid = tw.getGrid();
TerraConfig config = tw.getConfig();
ConfigPack config = tw.getConfig();
for(int x = 0; x < 16; x++) {
for(int z = 0; z < 16; z++) {
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE);

View File

@ -1,16 +1,12 @@
package com.dfsek.terra.population;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.ConfigPack;
import org.polydev.gaea.math.Range;
import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.biome.Biome;
@ -25,7 +21,7 @@ public class OrePopulator extends GaeaBlockPopulator {
@Override
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) {
try (ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("OreTime")) {
TerraConfig config = TerraWorld.getWorld(world).getConfig();
ConfigPack config = TerraWorld.getWorld(world).getConfig();
Biome b = TerraWorld.getWorld(world).getGrid().getBiome((chunk.getX() << 4)+8, (chunk.getZ() << 4) + 8, GenerationPhase.POPULATE);
for(Map.Entry<OreConfig, Range> e : config.getBiome((UserDefinedBiome) b).getOres().entrySet()) {
int num = e.getValue().get(random);

View File

@ -4,13 +4,10 @@ import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.genconfig.StructureConfig;
import com.dfsek.terra.structure.GaeaStructure;
import com.dfsek.terra.structure.StructureSpawnRequirement;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
@ -31,7 +28,7 @@ public class StructurePopulator extends BlockPopulator {
int cz = (chunk.getZ() << 4);
TerraWorld tw = TerraWorld.getWorld(world);
TerraBiomeGrid grid = tw.getGrid();
TerraConfig config = tw.getConfig();
ConfigPack config = tw.getConfig();
UserDefinedBiome b = (UserDefinedBiome) grid.getBiome(cx+ 8, cz + 8, GenerationPhase.POPULATE);
structure: for(StructureConfig conf : config.getBiome(b).getStructures()) {
Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world);

View File

@ -1,13 +1,10 @@
package com.dfsek.terra.structure;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
import org.bukkit.Location;
import org.bukkit.World;
import org.polydev.gaea.biome.Generator;
import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.math.FastNoise;