From 1457a10b0b8e4aa6bc2cce2499eb7beac5d9cb67 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 8 Dec 2020 20:59:23 -0700 Subject: [PATCH] hold PluginConfig instance in Terra plugin instance --- build.gradle.kts | 2 +- src/main/java/com/dfsek/terra/Terra.java | 20 ++++++++--- .../dfsek/terra/async/AsyncBiomeFinder.java | 5 ++- .../com/dfsek/terra/carving/CarverCache.java | 3 +- .../dfsek/terra/command/ReloadCommand.java | 5 ++- .../command/biome/BiomeLocateCommand.java | 3 +- .../command/image/gui/RawGUICommand.java | 3 +- .../command/image/gui/StepGUICommand.java | 3 +- .../dfsek/terra/config/base/PluginConfig.java | 33 ++++++++----------- .../java/com/dfsek/terra/debug/Debug.java | 21 ++++++++---- .../terra/generation/TerraChunkGenerator.java | 5 +++ .../com/dfsek/terra/image/ImageLoader.java | 5 ++- .../com/dfsek/terra/math/NoiseFunction2.java | 3 +- src/main/resources/world.yml | 1 - 14 files changed, 60 insertions(+), 52 deletions(-) delete mode 100644 src/main/resources/world.yml diff --git a/build.gradle.kts b/build.gradle.kts index 8d4d14350..c921bd705 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } -val versionObj = Version("2", "0", "2", true) +val versionObj = Version("2", "1", "0", true) version = versionObj diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java index daa667782..621e88e26 100644 --- a/src/main/java/com/dfsek/terra/Terra.java +++ b/src/main/java/com/dfsek/terra/Terra.java @@ -69,6 +69,7 @@ public class Terra extends GaeaPlugin { private final Map worldMap = new HashMap<>(); private final Map worlds = new HashMap<>(); private final ConfigRegistry registry = new ConfigRegistry(); + private final PluginConfig config = new PluginConfig(); public void invalidate() { worldMap.clear(); @@ -90,8 +91,9 @@ public class Terra extends GaeaPlugin { Metrics metrics = new Metrics(this, 9017); // Set up bStats. metrics.addCustomChart(new Metrics.SingleLineChart("worlds", worldMap::size)); // World number chart. - PluginConfig.load(this); // Load master config.yml - LangUtil.load(PluginConfig.getLanguage(), this); // Load language. + config.load(this); // Load master config.yml + LangUtil.load(config.getLanguage(), this); // Load language. + Debug.setDebug(isDebug()); registry.loadAll(this); // Load all config packs. @@ -106,7 +108,7 @@ public class Terra extends GaeaPlugin { locatePl.setTabCompleter(locate); - long save = PluginConfig.getDataSaveInterval(); + long save = config.getDataSaveInterval(); Bukkit.getScheduler().runTaskTimerAsynchronously(this, TerraChunkGenerator::saveAll, save, save); // Schedule population data saving Bukkit.getPluginManager().registerEvents(new EventListener(this), this); // Register master event listener @@ -126,7 +128,7 @@ public class Terra extends GaeaPlugin { @Override public boolean isDebug() { - return PluginConfig.isDebug(); + return config.isDebug(); } @Override @@ -171,6 +173,16 @@ public class Terra extends GaeaPlugin { } public TerraWorld getWorld(World w) { + if(!(w.getGenerator() instanceof TerraChunkGenerator)) throw new IllegalArgumentException("Not a Terra world!"); + if(!worlds.containsKey(w.getName())) { + getLogger().warning("Unexpected world load detected: \"" + w.getName() + "\""); + return new TerraWorld(w, ((TerraChunkGenerator) w.getGenerator()).getConfigPack()); + } return worldMap.computeIfAbsent(w, world -> new TerraWorld(w, worlds.get(w.getName()))); } + + @NotNull + public PluginConfig getTerraConfig() { + return config; + } } diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java index b02cf8abd..7b03a5995 100644 --- a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java +++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java @@ -2,7 +2,6 @@ package com.dfsek.terra.async; import com.dfsek.terra.Terra; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; -import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.Location; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; @@ -29,12 +28,12 @@ public class AsyncBiomeFinder extends AsyncFeatureFinder { */ @Override public boolean isValid(int x, int z, Biome target) { - int res = PluginConfig.getBiomeSearchResolution(); + int res = main.getTerraConfig().getBiomeSearchResolution(); return getGrid().getBiome(x * res, z * res, GenerationPhase.POST_GEN).equals(target); } @Override public Vector finalizeVector(Vector orig) { - return orig.multiply(PluginConfig.getBiomeSearchResolution()); + return orig.multiply(main.getTerraConfig().getBiomeSearchResolution()); } } diff --git a/src/main/java/com/dfsek/terra/carving/CarverCache.java b/src/main/java/com/dfsek/terra/carving/CarverCache.java index eca106309..1706dd705 100644 --- a/src/main/java/com/dfsek/terra/carving/CarverCache.java +++ b/src/main/java/com/dfsek/terra/carving/CarverCache.java @@ -3,7 +3,6 @@ package com.dfsek.terra.carving; import com.dfsek.terra.Terra; import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; -import com.dfsek.terra.config.base.PluginConfig; import org.bukkit.World; import org.bukkit.util.Vector; import org.polydev.gaea.biome.Biome; @@ -30,7 +29,7 @@ public class CarverCache { } public List getPoints(int chunkX, int chunkZ, UserDefinedCarver carver) { - if(carvers.size() > PluginConfig.getCacheSize() * 2) carvers.clear(); + if(carvers.size() > main.getTerraConfig().getCacheSize() * 2) carvers.clear(); return carvers.computeIfAbsent((((long) chunkX) << 32) | (chunkZ & 0xffffffffL), key -> { TerraBiomeGrid grid = main.getWorld(w).getGrid(); if(carver.isChunkCarved(w, chunkX, chunkZ, new FastRandom(MathUtil.getCarverChunkSeed(chunkX, chunkZ, w.getSeed() + carver.hashCode())))) { diff --git a/src/main/java/com/dfsek/terra/command/ReloadCommand.java b/src/main/java/com/dfsek/terra/command/ReloadCommand.java index 688ba2fd1..911562e48 100644 --- a/src/main/java/com/dfsek/terra/command/ReloadCommand.java +++ b/src/main/java/com/dfsek/terra/command/ReloadCommand.java @@ -1,7 +1,6 @@ package com.dfsek.terra.command; import com.dfsek.terra.Terra; -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,8 +27,8 @@ 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) { - PluginConfig.load(getMain()); - LangUtil.load(PluginConfig.getLanguage(), getMain()); // Load language. + ((Terra) getMain()).getTerraConfig().load(getMain()); + LangUtil.load(((Terra) getMain()).getTerraConfig().getLanguage(), getMain()); // Load language. if(!((Terra) getMain()).getRegistry().loadAll((Terra) getMain())) LangUtil.send("command.reload-error", sender); ((Terra) getMain()).invalidate(); LangUtil.send("command.reload", sender); diff --git a/src/main/java/com/dfsek/terra/command/biome/BiomeLocateCommand.java b/src/main/java/com/dfsek/terra/command/biome/BiomeLocateCommand.java index 59e81d1f2..4f7765547 100644 --- a/src/main/java/com/dfsek/terra/command/biome/BiomeLocateCommand.java +++ b/src/main/java/com/dfsek/terra/command/biome/BiomeLocateCommand.java @@ -3,7 +3,6 @@ package com.dfsek.terra.command.biome; import com.dfsek.terra.Terra; import com.dfsek.terra.async.AsyncBiomeFinder; import com.dfsek.terra.biome.UserDefinedBiome; -import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.generation.TerraChunkGenerator; import org.bukkit.Bukkit; @@ -44,7 +43,7 @@ public class BiomeLocateCommand extends WorldCommand { LangUtil.send("command.biome.invalid", sender, id); return true; } - Bukkit.getScheduler().runTaskAsynchronously(getMain(), new AsyncBiomeFinder(((Terra) getMain()).getWorld(world).getGrid(), b, sender.getLocation().clone().multiply((1D / PluginConfig.getBiomeSearchResolution())), 0, maxRadius, location -> { + Bukkit.getScheduler().runTaskAsynchronously(getMain(), new AsyncBiomeFinder(((Terra) getMain()).getWorld(world).getGrid(), b, sender.getLocation().clone().multiply((1D / ((Terra) getMain()).getTerraConfig().getBiomeSearchResolution())), 0, maxRadius, location -> { if(location != null) { LangUtil.send("command.biome.biome-found", sender, String.valueOf(location.getBlockX()), String.valueOf(location.getBlockZ())); if(tp) { 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 0a966e79e..a7e8fc84b 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,6 @@ package com.dfsek.terra.command.image.gui; import com.dfsek.terra.Terra; -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 +20,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(!PluginConfig.isDebug()) { + if(!getMain().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 5a74619ad..ed87a78c8 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,6 @@ package com.dfsek.terra.command.image.gui; import com.dfsek.terra.Terra; -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 +20,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(!PluginConfig.isDebug()) { + if(!getMain().isDebug()) { LangUtil.send("command.image.gui.debug", sender); return true; } diff --git a/src/main/java/com/dfsek/terra/config/base/PluginConfig.java b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java index 33d87a799..44fa5c697 100644 --- a/src/main/java/com/dfsek/terra/config/base/PluginConfig.java +++ b/src/main/java/com/dfsek/terra/config/base/PluginConfig.java @@ -20,9 +20,6 @@ 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; @@ -47,16 +44,13 @@ public class PluginConfig implements ConfigTemplate { @Default private boolean dumpDefaultConfig = true; - private PluginConfig() { - } - - public static void load(GaeaPlugin main) { + public 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. + loader.load(this, file); + if(dumpDefaultConfig) { // 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) { @@ -65,30 +59,29 @@ public class PluginConfig implements ConfigTemplate { Debug.error("Report this to Terra!"); } } - loaded = true; } catch(ConfigException | IOException e) { e.printStackTrace(); } logger.info("Debug: " + isDebug()); } - public static String getLanguage() { - return singleton.language; + public String getLanguage() { + return language; } - public static boolean isDebug() { - return singleton.debug; + public boolean isDebug() { + return debug; } - public static long getDataSaveInterval() { - return singleton.dataSave.toMillis() / 20L; + public long getDataSaveInterval() { + return dataSave.toMillis() / 20L; } - public static int getBiomeSearchResolution() { - return singleton.biomeSearch; + public int getBiomeSearchResolution() { + return biomeSearch; } - public static int getCacheSize() { - return singleton.cacheSize; + public int getCacheSize() { + return cacheSize; } } diff --git a/src/main/java/com/dfsek/terra/debug/Debug.java b/src/main/java/com/dfsek/terra/debug/Debug.java index 9bb9fcfe9..43a700df2 100644 --- a/src/main/java/com/dfsek/terra/debug/Debug.java +++ b/src/main/java/com/dfsek/terra/debug/Debug.java @@ -1,29 +1,36 @@ package com.dfsek.terra.debug; -import com.dfsek.terra.config.base.PluginConfig; - import java.util.logging.Logger; public class Debug { - public static Logger logger; + private static Logger logger; + private static boolean debug = false; + + public static boolean isDebug() { + return debug; + } + + public static void setDebug(boolean debug) { + Debug.debug = debug; + } public static void setLogger(Logger logger) { Debug.logger = logger; } public static void info(String message) { - if(PluginConfig.isDebug()) logger.info(message); + if(debug) logger.info(message); } public static void warn(String message) { - if(PluginConfig.isDebug()) logger.warning(message); + if(debug) logger.warning(message); } public static void error(String message) { - if(PluginConfig.isDebug()) logger.severe(message); + if(debug) logger.severe(message); } public static void stack(Exception e) { - if(PluginConfig.isDebug()) e.printStackTrace(); + if(debug) e.printStackTrace(); } } diff --git a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java index 3cbb0a73e..dfd1f73b2 100644 --- a/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/TerraChunkGenerator.java @@ -49,6 +49,11 @@ public class TerraChunkGenerator extends GaeaChunkGenerator { private boolean needsLoad = true; private final Terra main; + public ConfigPack getConfigPack() { + return configPack; + } + + public TerraChunkGenerator(ConfigPack c, Terra main) { super(ChunkInterpolator.InterpolationType.TRILINEAR); popMan = new PopulationManager(main); diff --git a/src/main/java/com/dfsek/terra/image/ImageLoader.java b/src/main/java/com/dfsek/terra/image/ImageLoader.java index cc3601c8b..b5f28e9bd 100644 --- a/src/main/java/com/dfsek/terra/image/ImageLoader.java +++ b/src/main/java/com/dfsek/terra/image/ImageLoader.java @@ -3,7 +3,6 @@ package com.dfsek.terra.image; import com.dfsek.terra.Terra; import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; -import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.debug.gui.DebugGUI; import net.jafama.FastMath; import org.bukkit.World; @@ -26,7 +25,7 @@ public class ImageLoader { } public static void debugWorld(boolean genStep, World w, Terra main) { - if(!PluginConfig.isDebug()) return; + if(!main.isDebug()) return; BufferedImage newImg = new WorldImageGenerator(w, 1024, 1024, main).drawWorld(0, 0).getDraw(); if(genStep) newImg = redrawStepped(newImg, w, Align.CENTER, main); DebugGUI debugGUI = new DebugGUI(newImg, main); @@ -61,7 +60,7 @@ public class ImageLoader { } public void debug(boolean genStep, World w, Terra main) { - if(!PluginConfig.isDebug()) return; + if(!main.isDebug()) return; BufferedImage newImg = copyImage(image); if(genStep) { newImg = redrawStepped(image, w, align, main); diff --git a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java index d81cb133b..fac412c93 100644 --- a/src/main/java/com/dfsek/terra/math/NoiseFunction2.java +++ b/src/main/java/com/dfsek/terra/math/NoiseFunction2.java @@ -1,6 +1,5 @@ package com.dfsek.terra.math; -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 +42,7 @@ public class NoiseFunction2 implements NoiseFunction { private static class Cache extends HashMapDoubleDouble { private static final long serialVersionUID = 8915092734723467010L; - private static final int cacheSize = PluginConfig.getCacheSize(); + private static final int cacheSize = 384; public double get(FastNoiseLite noise, double x, double z) { double xx = x >= 0 ? x * 2 : x * -2 - 1; diff --git a/src/main/resources/world.yml b/src/main/resources/world.yml deleted file mode 100644 index 8b1378917..000000000 --- a/src/main/resources/world.yml +++ /dev/null @@ -1 +0,0 @@ -