diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 4f5957d06..09e4ecafd 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -51,5 +51,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b658d0486..c3ca0cc49 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,10 @@
org.apache.commons
com.dfsek.terra.lib.commons
+
+ org.bstats.bukkit
+ com.dfsek.terra.lib.bstats
+
@@ -64,6 +68,10 @@
enginehub-maven
http://maven.enginehub.org/repo/
+
+ CodeMC
+ https://repo.codemc.org/repository/maven-public
+
@@ -106,6 +114,12 @@
RELEASE
test
+
+ org.bstats
+ bstats-bukkit
+ 1.7
+ compile
+
\ No newline at end of file
diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java
index 13a16eec7..027a59085 100644
--- a/src/main/java/com/dfsek/terra/Terra.java
+++ b/src/main/java/com/dfsek/terra/Terra.java
@@ -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);
}
diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java
index 7b863f35f..58790fbab 100644
--- a/src/main/java/com/dfsek/terra/TerraWorld.java
+++ b/src/main/java/com/dfsek/terra/TerraWorld.java
@@ -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 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();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
index 03adb5fb8..5bc320a73 100644
--- a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
+++ b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
@@ -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());
diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
index b33305f4a..724a42911 100644
--- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
@@ -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);
}
diff --git a/src/main/java/com/dfsek/terra/config/ConfigLoader.java b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
index e2a1f3d09..43a1f27ae 100644
--- a/src/main/java/com/dfsek/terra/config/ConfigLoader.java
+++ b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
@@ -18,7 +18,7 @@ import java.util.Map;
import java.util.stream.Stream;
public class ConfigLoader {
- public static Map load(JavaPlugin main, Path file, TerraConfig config, Class clazz) {
+ public static Map load(JavaPlugin main, Path file, ConfigPack config, Class clazz) {
long l = System.nanoTime();
Map 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 c = clazz.getConstructor(File.class, TerraConfig.class);
+ Constructor 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());
diff --git a/src/main/java/com/dfsek/terra/config/ConfigPack.java b/src/main/java/com/dfsek/terra/config/ConfigPack.java
new file mode 100644
index 000000000..cbed8eb5b
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/config/ConfigPack.java
@@ -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 configs = new HashMap<>();
+ private final Map ores;
+ private final Map palettes;
+ private final Map carvers;
+ private final Map flora;
+ private final Map structures;
+ private final Map abstractBiomes;
+ private final Map biomes;
+ private final Map grids;
+ private final File dataFolder;
+
+ private final String id;
+
+ public List 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 getAbstractBiomes() {
+ return abstractBiomes;
+ }
+
+ public Map getBiomes() {
+ return biomes;
+ }
+
+ public Map getCarvers() {
+ return carvers;
+ }
+
+ public static void loadAll(JavaPlugin main) {
+ configs.clear();
+ List 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 getBiomeIDs() {
+ List 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);
+ }
+}
diff --git a/src/main/java/com/dfsek/terra/config/TerraConfig.java b/src/main/java/com/dfsek/terra/config/TerraConfig.java
index 34fd1d65c..95ed50097 100644
--- a/src/main/java/com/dfsek/terra/config/TerraConfig.java
+++ b/src/main/java/com/dfsek/terra/config/TerraConfig.java
@@ -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 configs = new HashMap<>();
- private final Map ores;
- private final Map palettes;
- private final Map carvers;
- private final Map flora;
- private final Map structures;
- private final Map abstractBiomes;
- private final Map biomes;
- private final Map grids;
- private final File dataFolder;
-
- private final String id;
-
- public List 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 getAbstractBiomes() {
- return abstractBiomes;
+ public ConfigPack getConfig() {
+ return config;
}
- public Map getBiomes() {
- return biomes;
- }
-
- public Map getCarvers() {
- return carvers;
- }
-
- public static void loadAll(JavaPlugin main) {
- configs.clear();
- List 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 getBiomeIDs() {
- List 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();
}
diff --git a/src/main/java/com/dfsek/terra/config/TerraConfigObject.java b/src/main/java/com/dfsek/terra/config/TerraConfigObject.java
deleted file mode 100644
index ae0818a45..000000000
--- a/src/main/java/com/dfsek/terra/config/TerraConfigObject.java
+++ /dev/null
@@ -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();
-}
diff --git a/src/main/java/com/dfsek/terra/config/TerraConfigSection.java b/src/main/java/com/dfsek/terra/config/TerraConfigSection.java
new file mode 100644
index 000000000..1bd4f86ca
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/config/TerraConfigSection.java
@@ -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;
+ }
+}
diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
index 2426dcdbd..2017d30d6 100644
--- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
+++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
@@ -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();
}
diff --git a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
index fce03e657..8f661cf4d 100644
--- a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
+++ b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
@@ -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;
}
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
index d23b85447..76c170224 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
@@ -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);
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
index 781eb0120..09968ef70 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
@@ -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 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");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
index c997cc319..789e73aa3 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
@@ -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 floraPalette;
private final String id;
private final boolean physics;
@@ -31,7 +31,7 @@ public class FloraConfig extends TerraConfigObject implements Flora {
Set spawnable;
Set 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");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
index d0b7107b4..d71762f4b 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
@@ -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 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");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
index 4f63abbc2..3f5548e72 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
@@ -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 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");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
index c83676617..33e686dac 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
@@ -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 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");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
similarity index 86%
rename from src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
rename to src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
index 9f92184fe..759f7f2a9 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
@@ -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