From dbbe7dbd0d645418e470f1ffd5d6ebe7872523c2 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 25 Nov 2020 01:57:02 -0700 Subject: [PATCH] Implement Tectonic for master config. --- build.gradle.kts | 3 + lib/Tectonic-0.1.0.jar | Bin 0 -> 29734 bytes src/main/java/com/dfsek/terra/Debug.java | 10 +- src/main/java/com/dfsek/terra/Terra.java | 19 +++- .../dfsek/terra/async/AsyncBiomeFinder.java | 7 +- .../terra/biome/grid/TerraBiomeGrid.java | 4 +- .../dfsek/terra/command/ReloadCommand.java | 10 +- .../command/image/gui/RawGUICommand.java | 4 +- .../command/image/gui/StepGUICommand.java | 4 +- .../com/dfsek/terra/config/ConfigLoader.java | 4 +- .../dfsek/terra/config/base/ConfigUtil.java | 48 --------- .../dfsek/terra/config/base/PluginConfig.java | 93 ++++++++++++++++++ .../terra/config/genconfig/TreeConfig.java | 3 +- .../genconfig/biome/BiomeOreConfig.java | 4 +- .../genconfig/biome/BiomeSnowConfig.java | 4 +- .../genconfig/structure/StructureConfig.java | 4 +- .../com/dfsek/terra/image/ImageLoader.java | 6 +- .../com/dfsek/terra/math/NoiseFunction2.java | 4 +- .../dfsek/terra/population/CavePopulator.java | 3 +- .../dfsek/terra/population/SnowPopulator.java | 4 +- 20 files changed, 150 insertions(+), 88 deletions(-) create mode 100644 lib/Tectonic-0.1.0.jar create mode 100644 src/main/java/com/dfsek/terra/config/base/PluginConfig.java diff --git a/build.gradle.kts b/build.gradle.kts index 973dd071c..407aa2558 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,6 +56,8 @@ dependencies { implementation("net.jafama:jafama:2.3.2") + implementation(name = "Tectonic-0.1.0", group = "") + // JUnit. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") @@ -107,6 +109,7 @@ tasks.named("shadowJar") { relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") relocate("net.jafama", "com.dfsek.terra.lib.jafama") + relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic") minimize() } diff --git a/lib/Tectonic-0.1.0.jar b/lib/Tectonic-0.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..4ac0fea7ce6208a7e9480221e2498d44a6ba1f25 GIT binary patch literal 29734 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 JuIWMk`#;b-q>BIm literal 0 HcmV?d00001 diff --git a/src/main/java/com/dfsek/terra/Debug.java b/src/main/java/com/dfsek/terra/Debug.java index 606ecd53f..9e4843cfc 100644 --- a/src/main/java/com/dfsek/terra/Debug.java +++ b/src/main/java/com/dfsek/terra/Debug.java @@ -1,6 +1,6 @@ package com.dfsek.terra; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.plugin.java.JavaPlugin; public class Debug { @@ -11,18 +11,18 @@ public class Debug { } public static void info(String message) { - if(ConfigUtil.debug) main.getLogger().info(message); + if(PluginConfig.isDebug()) main.getLogger().info(message); } public static void warn(String message) { - if(ConfigUtil.debug) main.getLogger().warning(message); + if(PluginConfig.isDebug()) main.getLogger().warning(message); } public static void error(String message) { - if(ConfigUtil.debug) main.getLogger().severe(message); + if(PluginConfig.isDebug()) main.getLogger().severe(message); } public static void stack(Exception e) { - if(ConfigUtil.debug) e.printStackTrace(); + if(PluginConfig.isDebug()) e.printStackTrace(); } } diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index 7999adc6a..c25cbef59 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -2,7 +2,8 @@ package com.dfsek.terra; import com.dfsek.terra.command.TerraCommand; import com.dfsek.terra.command.structure.LocateCommand; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.ConfigPack; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.base.WorldConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.generation.TerraChunkGenerator; @@ -39,10 +40,17 @@ public class Terra extends GaeaPlugin { @Override public void onEnable() { instance = this; + + saveDefaultConfig(); + Metrics metrics = new Metrics(this, 9017); metrics.addCustomChart(new Metrics.SingleLineChart("worlds", TerraWorld::numWorlds)); + Debug.setMain(this); - ConfigUtil.loadConfig(this); + PluginConfig.load(this); + LangUtil.load(PluginConfig.getLanguage(), this); // Load language. + ConfigPack.loadAll(this); + TerraWorld.invalidate(); PluginCommand c = Objects.requireNonNull(getCommand("terra")); TerraCommand command = new TerraCommand(this); @@ -54,8 +62,9 @@ public class Terra extends GaeaPlugin { locatePl.setExecutor(locate); locatePl.setTabCompleter(locate); - saveDefaultConfig(); - Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); + + long save = PluginConfig.getDataSaveInterval(); + Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, save, save); Bukkit.getPluginManager().registerEvents(new EventListener(this), this); PaperUtil.checkPaper(this); } @@ -71,7 +80,7 @@ public class Terra extends GaeaPlugin { @Override public boolean isDebug() { - return ConfigUtil.debug; + return PluginConfig.isDebug(); } @Override diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java index df05abaee..275f2cb6a 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java @@ -1,7 +1,7 @@ package com.dfsek.terra.async; import com.dfsek.terra.biome.grid.TerraBiomeGrid; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.Location; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; @@ -28,11 +28,12 @@ public class AsyncBiomeFinder extends AsyncFeatureFinder { */ @Override public boolean isValid(int x, int z, Biome target) { - return getGrid().getBiome(x * ConfigUtil.biomeSearchRes, z * ConfigUtil.biomeSearchRes, GenerationPhase.POST_GEN).equals(target); + int res = PluginConfig.getBiomeSearchResolution(); + return getGrid().getBiome(x * res, z * res, GenerationPhase.POST_GEN).equals(target); } @Override public Vector finalizeVector(Vector orig) { - return orig.multiply(ConfigUtil.biomeSearchRes); + return orig.multiply(PluginConfig.getBiomeSearchResolution()); } } diff --git a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java index d57aedb4e..bce709146 100644 --- a/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java +++ b/src/main/java/com/dfsek/terra/biome/grid/TerraBiomeGrid.java @@ -5,7 +5,7 @@ import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.postprocessing.CoordinatePerturb; import com.dfsek.terra.biome.postprocessing.ErosionNoise; import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.procgen.math.Vector2; import org.bukkit.Location; @@ -53,7 +53,7 @@ public class TerraBiomeGrid extends BiomeGrid { try { b = (UserDefinedBiome) zone.getGrid(xp, zp).getBiome(xp, zp, phase); } catch(NullPointerException e) { - if(ConfigUtil.debug) e.printStackTrace(); + if(PluginConfig.isDebug()) e.printStackTrace(); if(failNum % 256 == 0) LangUtil.log("error.severe-config", Level.SEVERE, String.valueOf(x), String.valueOf(z)); failNum++; diff --git a/src/main/java/com/dfsek/terra/command/ReloadCommand.java b/src/main/java/com/dfsek/terra/command/ReloadCommand.java index ab874d5da..67bce8ef4 100644 --- a/src/main/java/com/dfsek/terra/command/ReloadCommand.java +++ b/src/main/java/com/dfsek/terra/command/ReloadCommand.java @@ -1,7 +1,8 @@ package com.dfsek.terra.command; -import com.dfsek.terra.Terra; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.TerraWorld; +import com.dfsek.terra.config.base.ConfigPack; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; @@ -28,7 +29,10 @@ public class ReloadCommand extends Command implements DebugCommand { @Override public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) { - ConfigUtil.loadConfig(Terra.getInstance()); + PluginConfig.load(getMain()); + LangUtil.load(PluginConfig.getLanguage(), getMain()); // Load language. + ConfigPack.loadAll(getMain()); + TerraWorld.invalidate(); LangUtil.send("command.reload", sender); return true; } diff --git a/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java b/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java index 7dba2c174..68e978625 100644 --- a/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java +++ b/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java @@ -1,7 +1,7 @@ package com.dfsek.terra.command.image.gui; import com.dfsek.terra.TerraWorld; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.image.ImageLoader; import org.bukkit.World; @@ -21,7 +21,7 @@ public class RawGUICommand extends WorldCommand { @Override public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { - if(!ConfigUtil.debug) { + if(!PluginConfig.isDebug()) { LangUtil.send("command.image.gui.debug", sender); return true; } diff --git a/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java b/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java index 2b32bef89..0cc1f9929 100644 --- a/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java +++ b/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java @@ -1,7 +1,7 @@ package com.dfsek.terra.command.image.gui; import com.dfsek.terra.TerraWorld; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.image.ImageLoader; import org.bukkit.World; @@ -21,7 +21,7 @@ public class StepGUICommand extends WorldCommand { @Override public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { - if(!ConfigUtil.debug) { + if(!PluginConfig.isDebug()) { LangUtil.send("command.image.gui.debug", sender); return true; } diff --git a/src/main/java/com/dfsek/terra/config/ConfigLoader.java b/src/main/java/com/dfsek/terra/config/ConfigLoader.java index 98d9c61e6..1bd1ffce6 100644 --- a/src/main/java/com/dfsek/terra/config/ConfigLoader.java +++ b/src/main/java/com/dfsek/terra/config/ConfigLoader.java @@ -1,7 +1,7 @@ package com.dfsek.terra.config; import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import org.apache.commons.io.FilenameUtils; @@ -40,7 +40,7 @@ public class ConfigLoader { e.printStackTrace(); LangUtil.log("config.error.generic", Level.SEVERE, path.toString()); } catch(IllegalArgumentException | InvocationTargetException e) { - if(ConfigUtil.debug) e.printStackTrace(); + if(PluginConfig.isDebug()) e.printStackTrace(); LangUtil.log("config.error.file", Level.SEVERE, path.toString(), e.getMessage()); } }); 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 a08824f44..af7bbed54 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java @@ -1,65 +1,17 @@ package com.dfsek.terra.config.base; import com.dfsek.terra.Debug; -import com.dfsek.terra.Terra; -import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.exception.ConfigException; -import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.util.TagUtil; 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 org.polydev.gaea.util.JarUtil; -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.time.Duration; import java.util.EnumSet; import java.util.List; -import java.util.Objects; import java.util.Set; -import java.util.jar.JarFile; -import java.util.logging.Logger; public final class ConfigUtil { - public static boolean debug; - public static long dataSave; // Period of population data saving, in ticks. - public static boolean masterDisableCaves; - public static int biomeSearchRes; - public static int cacheSize; - - public static void loadConfig(JavaPlugin main) { - main.saveDefaultConfig(); - main.reloadConfig(); - FileConfiguration config = main.getConfig(); - LangUtil.load(config.getString("language", "en_us"), main); - - debug = config.getBoolean("debug", false); - dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis() / 20L; - masterDisableCaves = config.getBoolean("master-disable.caves", false); - biomeSearchRes = config.getInt("biome-search-resolution", 4); - cacheSize = config.getInt("cache-size", 384); - - if(config.getBoolean("dump-default", true)) { - try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { - JarUtil.copyResourcesToDirectory(jar, "packs", new File(main.getDataFolder(), "packs").toString()); - } catch(IOException | URISyntaxException e) { - Debug.error("Failed to dump default config files!"); - e.printStackTrace(); - Debug.error("Report this to Terra!"); - } - } - - Logger logger = main.getLogger(); - logger.info("Loading config values"); - - ConfigPack.loadAll(main); - TerraWorld.invalidate(); - } - public static Set toBlockData(List list, String phase, String id) throws InvalidConfigurationException { Set bl = EnumSet.noneOf(Material.class); for(String s : list) { diff --git a/src/main/java/com/dfsek/terra/config/base/PluginConfig.java b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java new file mode 100644 index 000000000..716c372ab --- /dev/null +++ b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java @@ -0,0 +1,93 @@ +package com.dfsek.terra.config.base; + +import com.dfsek.tectonic.annotations.Default; +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ConfigTemplate; +import com.dfsek.tectonic.exception.ConfigException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.terra.Debug; +import com.dfsek.terra.Terra; +import org.polydev.gaea.GaeaPlugin; +import org.polydev.gaea.util.JarUtil; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.time.Duration; +import java.util.jar.JarFile; +import java.util.logging.Logger; + +@SuppressWarnings("FieldMayBeFinal") +public class PluginConfig implements ConfigTemplate { + private static final PluginConfig singleton = new PluginConfig(); + private static boolean loaded = false; + + @Value("debug") + @Default + private boolean debug = false; + + @Value("language") + @Default + private String language = "en_us"; + + @Value("data-save") + @Default + private Duration dataSave = Duration.parse("PT6M"); + + @Value("biome-search-resolution") + @Default + private int biomeSearch = 4; + + @Value("cache-size") + @Default + private int cacheSize = 384; + + @Value("dump-default") + @Default + private boolean dumpDefaultConfig = true; + + private PluginConfig() { + } + + public static void load(GaeaPlugin main) { + Logger logger = main.getLogger(); + logger.info("Loading config values"); + try(FileInputStream file = new FileInputStream(new File(main.getDataFolder(), "config.yml"))) { + ConfigLoader loader = new ConfigLoader(); + loader.load(singleton, file); + if(singleton.dumpDefaultConfig && !loaded) { // Don't dump default config if already loaded. + try(JarFile jar = new JarFile(new File(Terra.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { + JarUtil.copyResourcesToDirectory(jar, "packs", new File(main.getDataFolder(), "packs").toString()); + } catch(IOException | URISyntaxException e) { + Debug.error("Failed to dump default config files!"); + e.printStackTrace(); + Debug.error("Report this to Terra!"); + } + } + loaded = true; + } catch(ConfigException | IOException e) { + e.printStackTrace(); + } + } + + public static String getLanguage() { + return singleton.language; + } + + public static boolean isDebug() { + return singleton.debug; + } + + public static long getDataSaveInterval() { + return singleton.dataSave.toMillis() / 20L; + } + + public static int getBiomeSearchResolution() { + return singleton.biomeSearch; + } + + public static int getCacheSize() { + return singleton.cacheSize; + } +} diff --git a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java index ef70459f3..08b6dcff6 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java @@ -4,6 +4,7 @@ import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; import com.dfsek.terra.procgen.math.Vector2; @@ -54,7 +55,7 @@ public class TreeConfig extends TerraConfig implements Tree { } } } catch(IOException | NullPointerException e) { - if(ConfigUtil.debug) { + if(PluginConfig.isDebug()) { e.printStackTrace(); } throw new NotFoundException("Tree Structure", getString("file"), getID()); diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOreConfig.java index bceb1a3c9..f04570da1 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOreConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeOreConfig.java @@ -2,7 +2,7 @@ package com.dfsek.terra.config.genconfig.biome; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; import com.dfsek.terra.config.genconfig.OreConfig; @@ -30,7 +30,7 @@ public class BiomeOreConfig extends TerraConfigSection { oreHeights.put(ore, new Range(((ConfigurationSection) m.getValue()).getInt("min-height"), ((ConfigurationSection) m.getValue()).getInt("max-height"))); } } catch(ClassCastException e) { - if(ConfigUtil.debug) e.printStackTrace(); + if(PluginConfig.isDebug()) e.printStackTrace(); throw new ConfigException("Unable to parse Flora configuration! Check YAML syntax.", parent.getID()); } } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java index e1a49dcc3..0badcf056 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeSnowConfig.java @@ -2,7 +2,7 @@ package com.dfsek.terra.config.genconfig.biome; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.TerraConfigSection; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.exception.ConfigException; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.Range; @@ -31,7 +31,7 @@ public class BiomeSnowConfig extends TerraConfigSection { } } } catch(ClassCastException e) { - if(ConfigUtil.debug) e.printStackTrace(); + if(PluginConfig.isDebug()) e.printStackTrace(); throw new ConfigException("Unable to parse Snow configuration! Check YAML syntax.", parent.getID()); } } diff --git a/src/main/java/com/dfsek/terra/config/genconfig/structure/StructureConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/structure/StructureConfig.java index b2ac487b2..5a1861d99 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/structure/StructureConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/structure/StructureConfig.java @@ -3,7 +3,7 @@ package com.dfsek.terra.config.genconfig.structure; import com.dfsek.terra.Debug; import com.dfsek.terra.config.TerraConfig; import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.NotFoundException; import com.dfsek.terra.procgen.GridSpawn; @@ -55,7 +55,7 @@ public class StructureConfig extends TerraConfig { } } } catch(IOException | NullPointerException e) { - if(ConfigUtil.debug) { + if(PluginConfig.isDebug()) { e.printStackTrace(); } throw new NotFoundException("Structure", getString("file"), getID()); diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index 99167bde8..467acea87 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -3,7 +3,7 @@ package com.dfsek.terra.image; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.TerraBiomeGrid; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.debug.gui.DebugGUI; import net.jafama.FastMath; import org.bukkit.World; @@ -26,7 +26,7 @@ public class ImageLoader { } public static void debugWorld(boolean genStep, World w) { - if(!ConfigUtil.debug) return; + if(!PluginConfig.isDebug()) return; BufferedImage newImg = new WorldImageGenerator(w, 1024, 1024).drawWorld(0, 0).getDraw(); if(genStep) newImg = redrawStepped(newImg, w, Align.CENTER); DebugGUI debugGUI = new DebugGUI(newImg); @@ -61,7 +61,7 @@ public class ImageLoader { } public void debug(boolean genStep, World w) { - if(!ConfigUtil.debug) return; + if(!PluginConfig.isDebug()) return; BufferedImage newImg = copyImage(image); if(genStep) { newImg = redrawStepped(image, w, align); diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index f2f17cbc4..d81cb133b 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -1,6 +1,6 @@ package com.dfsek.terra.math; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.util.hash.HashMapDoubleDouble; import org.polydev.gaea.math.FastNoiseLite; @@ -43,7 +43,7 @@ public class NoiseFunction2 implements NoiseFunction { private static class Cache extends HashMapDoubleDouble { private static final long serialVersionUID = 8915092734723467010L; - private static final int cacheSize = ConfigUtil.cacheSize; + private static final int cacheSize = PluginConfig.getCacheSize(); public double get(FastNoiseLite noise, double x, double z) { double xx = x >= 0 ? x * 2 : x * -2 - 1; diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index 0bb3adaad..feddd914d 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -3,7 +3,6 @@ package com.dfsek.terra.population; import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.config.base.ConfigPack; -import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.genconfig.CarverConfig; import com.dfsek.terra.util.PopulationUtil; import org.bukkit.Chunk; @@ -32,7 +31,7 @@ public class CavePopulator extends BlockPopulator { @SuppressWarnings("try") @Override public void populate(@NotNull World world, @NotNull Random r, @NotNull Chunk chunk) { - if(ConfigUtil.masterDisableCaves) return; + //if(ConfigUtil.masterDisableCaves) return; try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("CaveTime")) { Random random = PopulationUtil.getRandom(chunk); TerraWorld tw = TerraWorld.getWorld(world); diff --git a/src/main/java/com/dfsek/terra/population/SnowPopulator.java b/src/main/java/com/dfsek/terra/population/SnowPopulator.java index 9802fe5e1..f53fe8a56 100644 --- a/src/main/java/com/dfsek/terra/population/SnowPopulator.java +++ b/src/main/java/com/dfsek/terra/population/SnowPopulator.java @@ -4,7 +4,7 @@ import com.dfsek.terra.TerraProfiler; import com.dfsek.terra.TerraWorld; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.TerraBiomeGrid; -import com.dfsek.terra.config.base.ConfigUtil; +import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.genconfig.biome.BiomeConfig; import com.dfsek.terra.util.DataUtil; import org.bukkit.Bukkit; @@ -43,7 +43,7 @@ public class SnowPopulator extends GaeaBlockPopulator { || name.equals("pane")) blacklistSpawn.add(m); } blacklistSpawn.add(Material.END_STONE); - if(ConfigUtil.debug) + if(PluginConfig.isDebug()) Bukkit.getLogger().info("Added " + blacklistSpawn.size() + " materials to snow blacklist"); }