diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 636dafd35..33f57a4be 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -511,7 +511,7 @@ public class Iris extends VolmitPlugin implements Listener { J.a(this::verifyDataPacksPost, 20); splash(); - if (IrisSettings.get().getGeneral().isAutoStartDefaultStudio()) { + if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) { Iris.info("Starting up auto Studio!"); try { Player r = new KList<>(getServer().getOnlinePlayers()).getRandom(); diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index 7e85dc155..68200fbf7 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -33,25 +33,67 @@ import java.io.IOException; @Data public class IrisSettings { public static transient IrisSettings settings; - public int configurationVersion = 3; - private IrisSettingsCache cache = new IrisSettingsCache(); + public int configurationVersion = 4; private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency(); - private IrisSettingsParallax parallax = new IrisSettingsParallax(); private IrisSettingsGeneral general = new IrisSettingsGeneral(); private IrisSettingsGUI gui = new IrisSettingsGUI(); private IrisSettingsGenerator generator = new IrisSettingsGenerator(); private IrisSettingsStudio studio = new IrisSettingsStudio(); - public static int getPriority(int c) { - return Math.max(Math.min(c, Thread.MAX_PRIORITY), Thread.MIN_PRIORITY); + public static int getThreadCount(int c) { + return switch (c) { + case -1, -2, -4 -> Runtime.getRuntime().availableProcessors() / -c; + case 0, 1, 2 -> 1; + default -> Math.max(c, 2); + }; } - public static int getThreadCount(int c) { - if (c < 2 && c >= 0) { - return 2; - } + @Data + public static class IrisSettingsConcurrency { + public int parallelism = -1; + public int parallaxEvictionMS = 10000; + } - return Math.max(2, c < 0 ? Runtime.getRuntime().availableProcessors() / -c : c); + @Data + public static class IrisSettingsGeneral { + public boolean commandSounds = true; + public boolean debug = false; + public boolean disableNMS = false; + public boolean pluginMetrics = true; + public boolean splashLogoStartup = true; + public boolean useConsoleCustomColors = true; + public boolean useCustomColorsIngame = true; + public String forceMainWorld = ""; + public int spinh = -20; + public int spins = 7; + public int spinb = 8; + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + public boolean canUseCustomColors(VolmitSender volmitSender) { + return volmitSender.isPlayer() ? useCustomColorsIngame : useConsoleCustomColors; + } + } + + @Data + public static class IrisSettingsGUI { + public boolean useServerLaunchedGuis = true; + public boolean maximumPregenGuiFPS = false; + } + + @Data + public static class IrisSettingsGenerator { + public String defaultWorldType = "overworld"; + public boolean headlessPregeneration = false; + public int maxBiomeChildDepth = 4; + public boolean preventLeafDecay = true; + } + + @Data + public static class IrisSettingsStudio { + public boolean studio = true; + public boolean openVSCode = true; + public boolean disableTimeAndWeather = true; + public boolean autoStartDefaultStudio = false; } public static IrisSettings get() { @@ -59,42 +101,29 @@ public class IrisSettings { return settings; } - IrisSettings defaults = new IrisSettings(); - JSONObject def = new JSONObject(new Gson().toJson(defaults)); - if (settings == null) { - settings = new IrisSettings(); + settings = new IrisSettings(); - File s = Iris.instance.getDataFile("settings.json"); + File s = Iris.instance.getDataFile("settings.json"); - if (!s.exists()) { - try { - IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4)); - } catch (JSONException | IOException e) { - e.printStackTrace(); - Iris.reportError(e); - } - } else { - try { - String ss = IO.readAll(s); - settings = new Gson().fromJson(ss, IrisSettings.class); - try { - IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4)); - } catch (IOException e) { - e.printStackTrace(); - } - } catch (Throwable ee) { - Iris.reportError(ee); - Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage()); - } + if (!s.exists()) { + try { + IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4)); + } catch (JSONException | IOException e) { + e.printStackTrace(); + Iris.reportError(e); } - - if (!s.exists()) { + } else { + try { + String ss = IO.readAll(s); + settings = new Gson().fromJson(ss, IrisSettings.class); try { IO.writeAll(s, new JSONObject(new Gson().toJson(settings)).toString(4)); - } catch (JSONException | IOException e) { - Iris.reportError(e); + } catch (IOException e) { e.printStackTrace(); } + } catch (Throwable ee) { + Iris.reportError(ee); + Iris.error("Configuration Error in settings.json! " + ee.getClass().getSimpleName() + ": " + ee.getMessage()); } } @@ -107,19 +136,6 @@ public class IrisSettings { } } - public boolean isStudio() { - return getStudio().isStudio(); - } - - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - public boolean isUseServerLaunchedGuis() { - return getGui().isUseServerLaunchedGuis(); - } - - public long getParallaxRegionEvictionMS() { - return getParallax().getParallaxRegionEvictionMS(); - } - public void forceSave() { File s = Iris.instance.getDataFile("settings.json"); @@ -130,65 +146,4 @@ public class IrisSettings { Iris.reportError(e); } } - - @Data - public static class IrisSettingsCache { - public int complexCacheSize = 131072; - } - - @Data - public static class IrisSettingsConcurrency { - public int parallelism = -1; - } - - @Data - public static class IrisSettingsParallax { - public int parallaxRegionEvictionMS = 15000; - public int parallaxChunkEvictionMS = 5000; - } - - @Data - public static class IrisSettingsGeneral { - public boolean commandSounds = true; - public boolean debug = false; - public boolean ignoreWorldEdit = false; - public boolean disableNMS = false; - public boolean keepProductionOnReload = false; - public boolean pluginMetrics = true; - public boolean splashLogoStartup = true; - public boolean autoStartDefaultStudio = false; - public boolean useConsoleCustomColors = true; - public boolean useCustomColorsIngame = true; - public String forceMainWorld = ""; - public int spinh = -20; - public int spins = 7; - public int spinb = 8; - - public boolean canUseCustomColors(VolmitSender volmitSender) { - return (volmitSender.isPlayer() && useCustomColorsIngame) || (!volmitSender.isPlayer() && useConsoleCustomColors); - } - } - - @Data - public static class IrisSettingsGUI { - public boolean useServerLaunchedGuis = true; - public boolean maximumPregenGuiFPS = false; - public boolean localPregenGui = true; - } - - @Data - public static class IrisSettingsGenerator { - public String defaultWorldType = "overworld"; - public boolean headlessPregeneration = false; - public boolean systemEffects = true; - public int maxBiomeChildDepth = 4; - public boolean preventLeafDecay = true; - } - - @Data - public static class IrisSettingsStudio { - public boolean studio = true; - public boolean openVSCode = true; - public boolean disableTimeAndWeather = true; - } } diff --git a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index 65f53b18e..15f05170a 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -923,7 +923,7 @@ public class CommandStudio implements DecreeExecutor { * @return true if server GUIs are not enabled */ private boolean noGUI() { - if (!IrisSettings.get().isUseServerLaunchedGuis()) { + if (!IrisSettings.get().getGui().isUseServerLaunchedGuis()) { sender().sendMessage(C.RED + "You must have server launched GUIs enabled in the settings!"); return true; } diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 42fcc09b7..a0d1cc126 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -121,8 +121,7 @@ public class IrisEngine implements Engine { bud = new AtomicInteger(0); buds = new AtomicInteger(0); metrics = new EngineMetrics(32); - cleanLatch = new ChronoLatch(Math.max(10000, Math.min(IrisSettings.get().getParallax() - .getParallaxChunkEvictionMS(), IrisSettings.get().getParallax().getParallaxRegionEvictionMS()))); + cleanLatch = new ChronoLatch(Math.max(10000, IrisSettings.get().getConcurrency().getParallaxEvictionMS())); generatedLast = new AtomicInteger(0); perSecond = new AtomicDouble(0); perSecondLatch = new ChronoLatch(1000, false); diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 1c87a4856..c9d6bfdbd 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -493,7 +493,7 @@ public class B { return null; } - if (bx instanceof Leaves && IrisSettings.get().getGenerator().preventLeafDecay) { + if (bx instanceof Leaves && IrisSettings.get().getGenerator().isPreventLeafDecay()) { ((Leaves) bx).setPersistent(true); } else if (bx instanceof Leaves) { ((Leaves) bx).setPersistent(false); diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index 323077371..774d9a32d 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -189,7 +189,7 @@ public class VirtualDecreeCommand { } private boolean invokeTabComplete(KList args, KList skip, KList tabs, String raw) { - if (isStudio() && !IrisSettings.get().isStudio()) { + if (isStudio() && !IrisSettings.get().getStudio().isStudio()) { return false; } @@ -388,7 +388,7 @@ public class VirtualDecreeCommand { } public boolean invoke(VolmitSender sender, KList args, KList skip) { - if (isStudio() && !IrisSettings.get().isStudio()) { + if (isStudio() && !IrisSettings.get().getStudio().isStudio()) { sender.sendMessage(C.RED + "To use Iris Studio Commands, please enable studio in Iris/settings.json (settings auto-reload)"); return false; }