From 06bc180127e127415a6f5520d1959d436199f5d0 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Tue, 24 Oct 2023 15:16:39 +0200 Subject: [PATCH 01/28] renames + dev sync --- core/src/main/java/com/volmit/iris/Iris.java | 10 ++--- .../iris/core/commands/CommandIris.java | 6 +-- .../iris/core/tools/IrisBenchmarking.java | 27 +----------- .../iris/core/tools/IrisPackBenchmarking.java | 9 ++++ .../volmit/iris/engine/IrisEngineMantle.java | 1 + .../iris/engine/safeguard/IrisSafeguard.java | 2 +- .../iris/engine/safeguard/PerformanceSFG.java | 23 ++++++++++ .../{ServerBoot.java => ServerBootSFG.java} | 2 +- .../{SafeguardUtils.java => UtilsSFG.java} | 2 +- .../volmit/iris/util/misc/getHardware.java | 44 +++++++++++++++++++ 10 files changed, 90 insertions(+), 36 deletions(-) create mode 100644 core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java create mode 100644 core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java rename core/src/main/java/com/volmit/iris/engine/safeguard/{ServerBoot.java => ServerBootSFG.java} (99%) rename core/src/main/java/com/volmit/iris/engine/safeguard/{SafeguardUtils.java => UtilsSFG.java} (74%) create mode 100644 core/src/main/java/com/volmit/iris/util/misc/getHardware.java diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index fd49641ec..dad3af14c 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -39,7 +39,7 @@ import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.engine.platform.BukkitChunkGenerator; import com.volmit.iris.engine.platform.DummyChunkGenerator; import com.volmit.iris.engine.safeguard.IrisSafeguard; -import com.volmit.iris.engine.safeguard.ServerBoot; +import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.exceptions.IrisException; @@ -94,7 +94,7 @@ import java.util.Date; import java.util.Map; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; -import static com.volmit.iris.engine.safeguard.ServerBoot.passedserversoftware; +import static com.volmit.iris.engine.safeguard.ServerBootSFG.passedserversoftware; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { @@ -465,9 +465,9 @@ public class Iris extends VolmitPlugin implements Listener { J.s(this::setupPapi); J.a(ServerConfigurator::configure, 20); splash(); - ServerBoot.UnstableMode(); - ServerBoot.SupportedServerSoftware(); - ServerBoot.printincompatiblepluginWarnings(); + ServerBootSFG.UnstableMode(); + ServerBootSFG.SupportedServerSoftware(); + ServerBootSFG.printincompatiblepluginWarnings(); autoStartStudio(); checkForBukkitWorlds(); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 481d3b2dd..c5e4358be 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -26,7 +26,7 @@ import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; -import com.volmit.iris.engine.safeguard.ServerBoot; +import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; @@ -52,7 +52,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import static com.volmit.iris.core.tools.IrisBenchmarking.inProgress; -import static com.volmit.iris.engine.safeguard.ServerBoot.multiverse; +import static com.volmit.iris.engine.safeguard.ServerBootSFG.multiverse; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") public class CommandIris implements DecreeExecutor { @@ -80,7 +80,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); Iris.safeguard(C.RED + "----------------------------------------------------------------"); Iris.safeguard(C.RED + "Command ran: /iris create"); - ServerBoot.printincompatiblepluginWarnings(); + ServerBootSFG.printincompatiblepluginWarnings(); Iris.safeguard(C.RED + "----------------------------------------------------------------"); } if (name.equals("iris")) { diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java index 5503815a7..39d27ffcd 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java @@ -27,6 +27,8 @@ import java.io.IOException; import java.io.InputStreamReader; import static com.google.common.math.LongMath.isPrime; +import static com.volmit.iris.util.misc.getHardware.getCPUModel; +import static com.volmit.iris.util.misc.getHardware.getDiskModel; public class IrisBenchmarking { static String ServerOS; @@ -237,29 +239,6 @@ public class IrisBenchmarking { return false; } - public static String getCPUModel() { - try { - SystemInfo systemInfo = new SystemInfo(); - CentralProcessor processor = systemInfo.getHardware().getProcessor(); - String cpuModel = processor.getProcessorIdentifier().getName(); - return cpuModel.isEmpty() ? "Unknown CPU Model" : cpuModel; - } catch (Exception e) { - e.printStackTrace(); - return "Unknown CPU Model"; - } - } - - public static String getDiskModel() { - SystemInfo systemInfo = new SystemInfo(); - List diskStores = systemInfo.getHardware().getDiskStores(); - if (!diskStores.isEmpty()) { - HWDiskStore firstDisk = diskStores.get(0); - return firstDisk.getModel(); - } else { - return "Unknown Disk Model"; - } - } - public static void warningFallback() { Iris.info(C.RED + "Using the " + C.DARK_RED + "FALLBACK" + C.RED + " method due to compatibility issues. "); Iris.info(C.RED + "Please note that this may result in less accurate results."); @@ -645,6 +624,4 @@ public class IrisBenchmarking { return 0.0; } - // todo JMH BENCHMARKS - } \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java new file mode 100644 index 000000000..65b4bfe31 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -0,0 +1,9 @@ +package com.volmit.iris.core.tools; + + +public class IrisPackBenchmarking { + public static void runBenchmark(){ + + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 2ba5b5526..f2dd124a6 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -280,6 +280,7 @@ public class IrisEngineMantle implements EngineMantle { x = Math.max(x, c); x = (Math.max(x, 16) + 16) >> 4; x = x % 2 == 0 ? x + 1 : x; + x = 4; Iris.info("Mantle Size: " + x + " Chunks"); Iris.info(" Object Mantle Size: " + u + " (" + ((Math.max(u, 16) + 16) >> 4) + ")"); Iris.info(" Jigsaw Mantle Size: " + jig + " (" + ((Math.max(jig, 16) + 16) >> 4) + ")"); diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java index 439668519..218fc4845 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java @@ -7,7 +7,7 @@ public class IrisSafeguard { public static boolean unstablemode = false; public static void IrisSafeguardSystem() { Iris.info("Enabled Iris SafeGuard"); - ServerBoot.BootCheck(); + ServerBootSFG.BootCheck(); } } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java new file mode 100644 index 000000000..c978ff38c --- /dev/null +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java @@ -0,0 +1,23 @@ +package com.volmit.iris.engine.safeguard; + +import oshi.SystemInfo; +import oshi.hardware.GlobalMemory; + +import static com.volmit.iris.util.misc.getHardware.*; + +public class PerformanceSFG { + public static byte CPUPerformanceStage = 3; + public void getPerformance(){ + // Performance Stage 3 = Max Performance, 2=Medium, 1=Low + + SystemInfo systemInfo = new SystemInfo(); + GlobalMemory globalMemory = systemInfo.getHardware().getMemory(); + long totalMemoryMB = globalMemory.getTotal() / (1024 * 1024); + long availableMemoryMB = globalMemory.getAvailable() / (1024 * 1024); + long totalPageSize = globalMemory.getPageSize() / (1024 * 1024); + long usedMemoryMB = totalMemoryMB - availableMemoryMB; + + // Todo RePixelated: Finish this + + } +} diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBoot.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java similarity index 99% rename from core/src/main/java/com/volmit/iris/engine/safeguard/ServerBoot.java rename to core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index 27f993b9f..a76a9a5f4 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBoot.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -10,7 +10,7 @@ import org.bukkit.plugin.Plugin; import static com.volmit.iris.Iris.instance; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; -public class ServerBoot { +public class ServerBootSFG { public static boolean multiverse = false; public static boolean dynmap = false; public static boolean terraform = false; diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/SafeguardUtils.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java similarity index 74% rename from core/src/main/java/com/volmit/iris/engine/safeguard/SafeguardUtils.java rename to core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index 221ef1d66..fd2d40708 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/SafeguardUtils.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -1,5 +1,5 @@ package com.volmit.iris.engine.safeguard; -public class SafeguardUtils { +public class UtilsSFG { public static void resetdatapacks(){ } diff --git a/core/src/main/java/com/volmit/iris/util/misc/getHardware.java b/core/src/main/java/com/volmit/iris/util/misc/getHardware.java new file mode 100644 index 000000000..eea952bd2 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/util/misc/getHardware.java @@ -0,0 +1,44 @@ +package com.volmit.iris.util.misc; + +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.HWDiskStore; +import oshi.software.os.OperatingSystem; + +import java.util.List; + +public class getHardware { + public static String getServerOS() { + SystemInfo systemInfo = new SystemInfo(); + OperatingSystem os = systemInfo.getOperatingSystem(); + return os.toString(); + } + public static int getCPUThreads(){ + SystemInfo systemInfo = new SystemInfo(); + CentralProcessor processor = systemInfo.getHardware().getProcessor(); + return processor.getLogicalProcessorCount(); + } + + public static String getCPUModel() { + try { + SystemInfo systemInfo = new SystemInfo(); + CentralProcessor processor = systemInfo.getHardware().getProcessor(); + String cpuModel = processor.getProcessorIdentifier().getName(); + return cpuModel.isEmpty() ? "Unknown CPU Model" : cpuModel; + } catch (Exception e) { + e.printStackTrace(); + return "Unknown CPU Model"; + } + } + + public static String getDiskModel() { + SystemInfo systemInfo = new SystemInfo(); + List diskStores = systemInfo.getHardware().getDiskStores(); + if (!diskStores.isEmpty()) { + HWDiskStore firstDisk = diskStores.get(0); + return firstDisk.getModel(); + } else { + return "Unknown Disk Model"; + } + } +} From 8a0b443d2833875fbf3f838abb19faf1ce138bd3 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 26 Oct 2023 17:28:43 +0200 Subject: [PATCH 02/28] Pack Benchmarking - Iris pregen is broken what it relies on so it doesnt work. Issue: Generated and total chunks dont end up as the same value after the pregen is done --- core/src/main/java/com/volmit/iris/Iris.java | 4 + .../iris/core/commands/CommandIris.java | 23 ++- .../iris/core/commands/CommandPregen.java | 3 +- .../core/pregenerator/IrisPregenerator.java | 34 +++- .../iris/core/tools/IrisBenchmarking.java | 3 +- .../volmit/iris/core/tools/IrisCreator.java | 33 ++-- .../iris/core/tools/IrisPackBenchmarking.java | 151 +++++++++++++++++- .../volmit/iris/engine/IrisEngineMantle.java | 21 ++- 8 files changed, 247 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index dad3af14c..ea60c21e2 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -95,6 +95,8 @@ import java.util.Map; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; import static com.volmit.iris.engine.safeguard.ServerBootSFG.passedserversoftware; +import static com.volmit.iris.util.misc.getHardware.getCPUModel; +import static com.volmit.iris.util.misc.getHardware.getCPUThreads; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { @@ -771,6 +773,8 @@ public class Iris extends VolmitPlugin implements Listener { } else { Iris.info("Server type & version: " + Bukkit.getVersion()); } Iris.info("Server OS: " + osName + " (" + osArch + ")"); + Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); + Iris.info("Process Threads: " + getCPUThreads()); Iris.info("Process Memory: " + maxMemory + " MB"); if (maxMemory < 5999) { Iris.warn("6GB+ Ram is recommended"); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index c5e4358be..708a01fda 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -22,6 +22,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisBenchmarking; +import com.volmit.iris.core.tools.IrisPackBenchmarking; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; @@ -41,6 +42,8 @@ import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.jobs.QueueJob; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; @@ -52,6 +55,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import static com.volmit.iris.core.tools.IrisBenchmarking.inProgress; +import static com.volmit.iris.core.tools.IrisPackBenchmarking.runBenchmark; import static com.volmit.iris.engine.safeguard.ServerBootSFG.multiverse; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") @@ -66,6 +70,8 @@ public class CommandIris implements DecreeExecutor { private CommandFind find; private CommandWorldManager manager; + public static @Getter String BenchDimension; + @Decree(description = "Create a new world", aliases = {"+", "c"}) public void create( @Param(aliases = "world-name", description = "The name of the world to create") @@ -88,6 +94,11 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); return; } + if (name.equals("Benchmark")) { + sender().sendMessage(C.RED + "You cannot use the world name \"Benchmark\" for creating worlds as Iris uses this directory for Benchmarking Packs."); + sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); + return; + } if (new File(Bukkit.getWorldContainer(), name).exists()) { sender().sendMessage(C.RED + "That folder already exists!"); @@ -142,13 +153,23 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.GREEN + "Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software"); } @Decree(description = "Benchmark your server", origin = DecreeOrigin.CONSOLE) - public void benchmark() throws InterruptedException { + public void serverbenchmark() throws InterruptedException { if(!inProgress) { IrisBenchmarking.runBenchmark(); } else { Iris.info(C.RED + "Benchmark already is in progress."); } } + @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) + public void packbenchmark( + @Param(description = "Dimension to benchmark") + IrisDimension type + ) throws InterruptedException { + + BenchDimension = type.getLoadKey(); + + IrisPackBenchmarking.runBenchmark(); + } @Decree(description = "Print world height information", origin = DecreeOrigin.PLAYER) public void height() { diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java index 32906de2a..c92f373ce 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java @@ -67,7 +67,8 @@ public class CommandPregen implements DecreeExecutor { @Decree(description = "Stop the active pregeneration task", aliases = "x") public void stop() { if (PregeneratorJob.shutdownInstance()) { - sender().sendMessage(C.GREEN + "Stopped pregeneration task"); + Iris.info( C.BLUE + "Finishing up mca region..."); + sender().sendMessage(C.DARK_BLUE + "Stopped pregeneration task"); } else { sender().sendMessage(C.YELLOW + "No active pregeneration tasks to stop"); } diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java b/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java index 9ef0faebf..a66ec20d6 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -19,7 +19,9 @@ package com.volmit.iris.core.pregenerator; import com.volmit.iris.Iris; +import com.volmit.iris.core.tools.IrisPackBenchmarking; import com.volmit.iris.util.collection.KSet; +import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.math.M; @@ -28,12 +30,16 @@ import com.volmit.iris.util.math.RollingSequence; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.Looper; +import lombok.Getter; +import lombok.Setter; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; +import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; + public class IrisPregenerator { private final PregenTask task; private final PregeneratorMethod generator; @@ -44,10 +50,10 @@ public class IrisPregenerator { private final RollingSequence chunksPerSecond; private final RollingSequence chunksPerMinute; private final RollingSequence regionsPerMinute; - private final AtomicInteger generated; + private static AtomicInteger generated; private final AtomicInteger generatedLast; private final AtomicInteger generatedLastMinute; - private final AtomicInteger totalChunks; + private static AtomicInteger totalChunks; private final AtomicLong startTime; private final ChronoLatch minuteLatch; private final AtomicReference currentGeneratorMethod; @@ -56,6 +62,8 @@ public class IrisPregenerator { private final KSet net; private final ChronoLatch cl; private final ChronoLatch saveLatch = new ChronoLatch(30000); + static long long_generatedChunks = 0; + static long long_totalChunks = 0; public IrisPregenerator(PregenTask task, PregeneratorMethod generator, PregenListener listener) { this.listener = listenify(listener); @@ -92,6 +100,8 @@ public class IrisPregenerator { chunksPerMinute.put(minuteGenerated); regionsPerMinute.put((double) minuteGenerated / 1024D); } + long_generatedChunks = generated.get(); + long_totalChunks = totalChunks.get(); listener.onTick(chunksPerSecond.getAverage(), chunksPerMinute.getAverage(), regionsPerMinute.getAverage(), @@ -102,9 +112,12 @@ public class IrisPregenerator { if (cl.flip()) { double percentage = ((double) generated.get() / (double) totalChunks.get()) * 100; - Iris.info("Pregen: " + Form.f(generated.get()) + " of " + Form.f(totalChunks.get()) + " (%.0f%%) " + Form.f((int) chunksPerSecond.getAverage()) + "/s ETA: " + Form.duration((double) eta, 2), percentage); + if(benchmark) { + Iris.info(C.GREEN +"Benchmark: " + C.WHITE + Form.f(generated.get()) + " of " + Form.f(totalChunks.get()) + " (%.0f%%) " + Form.f((int) chunksPerSecond.getAverage()) + "/s ETA: " + Form.duration((double) eta, 2), percentage); + } else { + Iris.info("Pregen: " + Form.f(generated.get()) + " of " + Form.f(totalChunks.get()) + " (%.0f%%) " + Form.f((int) chunksPerSecond.getAverage()) + "/s ETA: " + Form.duration((double) eta, 2), percentage); + } } - return 1000; } }; @@ -119,6 +132,19 @@ public class IrisPregenerator { ); } + public static void shareData(){ + long_generatedChunks = generated.get(); + long_totalChunks = totalChunks.get(); + } + + public static long getLongGeneratedChunks() { + return long_generatedChunks; + } + public static long getLongTotalChunks() { + return long_totalChunks; + } + + public void close() { shutdown.set(true); } diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java index 39d27ffcd..300a4467f 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisBenchmarking.java @@ -29,11 +29,9 @@ import java.io.InputStreamReader; import static com.google.common.math.LongMath.isPrime; import static com.volmit.iris.util.misc.getHardware.getCPUModel; import static com.volmit.iris.util.misc.getHardware.getDiskModel; - public class IrisBenchmarking { static String ServerOS; static String filePath = "benchmark.dat"; - private static long startTime; static double avgWriteSpeedMBps; static double avgReadSpeedMBps; static double highestWriteSpeedMBps; @@ -58,6 +56,7 @@ public class IrisBenchmarking { static boolean Winsat = false; static boolean WindowsDiskSpeed = false; public static boolean inProgress = false; + static double startTime; // Good enough for now. . . public static void runBenchmark() throws InterruptedException { diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index 372a63a74..f9af5dd7f 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -45,6 +45,9 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; +import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; +import static com.volmit.iris.core.tools.IrisPackBenchmarking.loaded; + /** * Makes it a lot easier to setup an engine, world, studio or whatever */ @@ -93,6 +96,9 @@ public class IrisCreator { yml.save(BUKKIT_YML); return true; } + public static boolean worldLoaded(){ + return true; + } /** * Create the IrisAccess (contains the world) @@ -100,6 +106,7 @@ public class IrisCreator { * @return the IrisAccess * @throws IrisException shit happens */ + IrisPackBenchmarking PackBench = new IrisPackBenchmarking(); public World create() throws IrisException { if (Bukkit.isPrimaryThread()) { throw new IrisException("You cannot invoke create() on the main thread."); @@ -117,6 +124,9 @@ public class IrisCreator { if (!studio()) { Iris.service(StudioSVC.class).installIntoWorld(sender, d.getLoadKey(), new File(Bukkit.getWorldContainer(), name())); } + if (benchmark) { + Iris.service(StudioSVC.class).installIntoWorld(sender, d.getLoadKey(), new File(Bukkit.getWorldContainer(), name())); + } PlatformChunkGenerator access = null; AtomicReference world = new AtomicReference<>(); @@ -143,17 +153,20 @@ public class IrisCreator { } return finalAccess1.getEngine().getGenerated(); }; - while (g.get() < req) { - double v = (double) g.get() / (double) req; - - if (sender.isPlayer()) { - sender.sendProgress(v, "Generating"); - J.sleep(16); - } else { - sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - g.get()) + " Left)"))); - J.sleep(1000); + if(!benchmark) { + while (g.get() < req) { + double v = (double) g.get() / (double) req; + if (sender.isPlayer()) { + sender.sendProgress(v, "Generating"); + J.sleep(16); + } else { + sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - g.get()) + " Left)"))); + J.sleep(1000); + } } } + //if (benchmark){loaded = true;} + Iris.info("Debug1"); }); @@ -177,7 +190,7 @@ public class IrisCreator { }); } - if (studio) { + if (studio || benchmark) { J.s(() -> { Iris.linkMultiverseCore.removeFromConfig(world.get()); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index 65b4bfe31..099005b87 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -1,9 +1,156 @@ package com.volmit.iris.core.tools; +import com.volmit.iris.Iris; +import com.volmit.iris.core.pregenerator.IrisPregenerator; +import com.volmit.iris.core.pregenerator.PregenTask; +import com.volmit.iris.util.exceptions.IrisException; +import com.volmit.iris.util.format.C; +import com.volmit.iris.util.math.Position2; + +import com.volmit.iris.util.scheduling.J; +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; + +import java.io.File; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import static com.volmit.iris.core.commands.CommandIris.BenchDimension; + + public class IrisPackBenchmarking { - public static void runBenchmark(){ - + public static boolean loaded = false; + public static boolean benchmark = false; + static boolean cancelled = false; + static boolean pregenInProgress = false; + static long startTime; + static long totalChunks; + static long generatedChunks; + static double elapsedTimeNs; + + public static void runBenchmark() { + // IrisPackBenchmarking IrisPackBenchmarking = new IrisPackBenchmarking(); + benchmark = true; + Iris.info(C.BLUE + "Benchmarking Dimension: " + C.AQUA + BenchDimension); + + //progress(); + CompletableFuture future = CompletableFuture.runAsync(() -> { + Iris.info(C.GOLD + "Setting everything up.."); + try { + String BenchmarkFolder = "\\Benchmark"; + File folder = new File(BenchmarkFolder); + if (folder.exists() && folder.isDirectory()) { + FileUtils.deleteDirectory(folder); + Iris.debug("Deleted old Benchmark"); + } else { + Iris.info(C.GOLD + "Old Benchmark not found!"); + if(folder.exists()){ + Iris.info(C.RED + "FAILED To remove old Benchmark!"); + //cancelled = true; + } + } + } catch (Exception e) { + throw new RuntimeException(); + } + + }).thenRun(() -> { + Iris.info(C.GOLD + "Creating Benchmark Environment"); + createBenchmark(); + + }).thenRun(() -> { + Iris.info( C.BLUE + "Benchmark Started!"); + boolean done = false; + startBenchmarkTimer(); + startBenchmark(); + basicScheduler(); + }).thenRun(() -> { + + }); + // cancelled = future.cancel(true); + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } } + private static void results(){ + double averageCps = calculateAverageCPS(); + Iris.info("Benchmark Dimension: " + BenchDimension); + Iris.info("Speeds"); + Iris.info("- Average CPS: " + roundToTwoDecimalPlaces(averageCps)); + Iris.info("Duration: " + roundToTwoDecimalPlaces(elapsedTimeNs)); + + } + private static void basicScheduler() { + while (true) { + totalChunks = IrisPregenerator.getLongTotalChunks(); + generatedChunks = IrisPregenerator.getLongGeneratedChunks(); + Iris.info("TEST: "+ totalChunks); + Iris.info("TEST2: "+ generatedChunks); + if(totalChunks > 0) { + if (generatedChunks >= totalChunks) { + Iris.info("Benchmark Completed!"); + elapsedTimeNs = stopBenchmarkTimer(); + results(); + break; + } + } + //J.sleep(100); + } + } + static void createBenchmark(){ + try { + IrisToolbelt.createWorld() + .dimension(BenchDimension) + .name("Benchmark") + .seed(1337) + .studio(false) + .create(); + } catch (IrisException e) { + throw new RuntimeException(e); + } + } + static void startBenchmark(){ + int x = 0; + int z = 0; + IrisToolbelt.pregenerate(PregenTask + .builder() + .center(new Position2(x, z)) + .width(5) + .height(5) + .build(), Bukkit.getWorld("Benchmark") + ); + } + public static double calculateAverageCPS() { + double elapsedTimeSec = elapsedTimeNs / 1_000_000_000.0; // Convert to seconds + return generatedChunks / elapsedTimeSec; + } + + private static void startBenchmarkTimer() { + startTime = System.nanoTime(); + } + + private static double stopBenchmarkTimer() { + long endTime = System.nanoTime(); + return (endTime - startTime) / 1_000_000_000.0; + } + + public static void deleteDirectory(File dir) { + File[] files = dir.listFiles(); + if(files != null) { + for(File file: files) { + if(file.isDirectory()) { + deleteDirectory(file); + } else { + file.delete(); + } + } + } + dir.delete(); + } + private static double roundToTwoDecimalPlaces(double value) { + return Double.parseDouble(String.format("%.2f", value)); + } } \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index f2dd124a6..591f76c31 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -19,6 +19,8 @@ package com.volmit.iris.engine; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.tools.IrisPackBenchmarking; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.EngineMantle; @@ -31,6 +33,7 @@ import com.volmit.iris.engine.object.*; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; +import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.parallel.BurstExecutor; @@ -42,6 +45,8 @@ import java.io.IOException; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; + @Data public class IrisEngineMantle implements EngineMantle { private final Engine engine; @@ -280,11 +285,17 @@ public class IrisEngineMantle implements EngineMantle { x = Math.max(x, c); x = (Math.max(x, 16) + 16) >> 4; x = x % 2 == 0 ? x + 1 : x; - x = 4; - Iris.info("Mantle Size: " + x + " Chunks"); - Iris.info(" Object Mantle Size: " + u + " (" + ((Math.max(u, 16) + 16) >> 4) + ")"); - Iris.info(" Jigsaw Mantle Size: " + jig + " (" + ((Math.max(jig, 16) + 16) >> 4) + ")"); - Iris.info(" Carving Mantle Size: " + c + " (" + ((Math.max(c, 16) + 16) >> 4) + ")"); + IrisPackBenchmarking PackBench = new IrisPackBenchmarking(); + if (benchmark){ + x = 4; + Iris.info("Mantle Size: " + x + " Chunks " + C.BLUE + "BENCHMARK MODE"); + } else { + Iris.info("Mantle Size: " + x + " Chunks"); + Iris.info(" Object Mantle Size: " + u + " (" + ((Math.max(u, 16) + 16) >> 4) + ")"); + Iris.info(" Jigsaw Mantle Size: " + jig + " (" + ((Math.max(jig, 16) + 16) >> 4) + ")"); + Iris.info(" Carving Mantle Size: " + c + " (" + ((Math.max(c, 16) + 16) >> 4) + ")"); + } + return x; } From b40dcd31644349e3d0a7eb753b74bbada996dadc Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 26 Oct 2023 17:52:33 +0200 Subject: [PATCH 03/28] fixup! Pack Benchmarking - Iris pregen is broken what it relies on so it doesnt work. Issue: Generated and total chunks dont end up as the same value after the pregen is done --- .../java/com/volmit/iris/core/tools/IrisPackBenchmarking.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index 099005b87..9511399f9 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -48,6 +48,7 @@ public class IrisPackBenchmarking { if(folder.exists()){ Iris.info(C.RED + "FAILED To remove old Benchmark!"); //cancelled = true; + } } } catch (Exception e) { From 1bad0fe04871a96267e0269e0daabc4f496f1e33 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 26 Oct 2023 19:46:38 +0200 Subject: [PATCH 04/28] test --- .../java/com/volmit/iris/core/tools/IrisPackBenchmarking.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index 9511399f9..4bbc2aba1 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -33,7 +33,6 @@ public class IrisPackBenchmarking { // IrisPackBenchmarking IrisPackBenchmarking = new IrisPackBenchmarking(); benchmark = true; Iris.info(C.BLUE + "Benchmarking Dimension: " + C.AQUA + BenchDimension); - //progress(); CompletableFuture future = CompletableFuture.runAsync(() -> { Iris.info(C.GOLD + "Setting everything up.."); @@ -98,7 +97,7 @@ public class IrisPackBenchmarking { break; } } - //J.sleep(100); + //J.sleep(100); test } } static void createBenchmark(){ From dd124fab33dfa5a16ae8ccf03082db6b44bf40cb Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 28 Oct 2023 19:33:16 +0200 Subject: [PATCH 05/28] Changed to RED Iris tag when its unstable. --- core/src/main/java/com/volmit/iris/Iris.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index ea60c21e2..c7e3b6266 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -448,6 +448,7 @@ public class Iris extends VolmitPlugin implements Listener { INMS.get(); IO.delete(new File("iris")); setupAudience(); + IrisSafeguard.IrisSafeguardSystem(); sender = new VolmitSender(Bukkit.getConsoleSender()); sender.setTag(getTag()); instance = this; @@ -557,7 +558,6 @@ public class Iris extends VolmitPlugin implements Listener { enable(); super.onEnable(); Bukkit.getPluginManager().registerEvents(this, this); - IrisSafeguard.IrisSafeguardSystem(); setupChecks(); } @@ -589,7 +589,12 @@ public class Iris extends VolmitPlugin implements Listener { @Override public String getTag(String subTag) { - return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.IRIS + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; + if (unstablemode) { + return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.RED + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; + } + else { + return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.IRIS + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; + } } private boolean setupChecks() { From a12cb59a517dc30a292d743dbe40bff0556a02e6 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 28 Oct 2023 20:49:47 +0200 Subject: [PATCH 06/28] Changed how ServerBootSFG Works Part1. Added More warnings and Checks. Improved Unstable Colored text. Text for console and Player errors when in unstable. --- core/src/main/java/com/volmit/iris/Iris.java | 9 ++- .../iris/core/commands/CommandIris.java | 47 ++++++++------ .../volmit/iris/core/tools/IrisCreator.java | 9 +++ .../iris/engine/safeguard/ServerBootSFG.java | 63 ++++++++++++++++--- 4 files changed, 98 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index c7e3b6266..4857279ee 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -470,7 +470,7 @@ public class Iris extends VolmitPlugin implements Listener { splash(); ServerBootSFG.UnstableMode(); ServerBootSFG.SupportedServerSoftware(); - ServerBootSFG.printincompatiblepluginWarnings(); + ServerBootSFG.printIncompatiblePluginWarnings(); autoStartStudio(); checkForBukkitWorlds(); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); @@ -738,6 +738,10 @@ public class Iris extends VolmitPlugin implements Listener { String padd = Form.repeat(" ", 8); String padd2 = Form.repeat(" ", 4); String[] info = {"", "", "", "", "", padd2 + C.IRIS + " Iris", padd2 + C.GRAY + " by " + "Volmit Software", padd2 + C.GRAY + " v" + C.IRIS + getDescription().getVersion()}; + if (unstablemode) { + info = new String[]{"", "", "", "", "", padd2 + C.RED + " Iris", padd2 + C.GRAY + " by " + C.DARK_RED + "Volmit Software", padd2 + C.GRAY + " v" + C.RED + getDescription().getVersion()}; + } + String[] splashstable = { padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.IRIS + " .(((()))). ", @@ -778,7 +782,8 @@ public class Iris extends VolmitPlugin implements Listener { } else { Iris.info("Server type & version: " + Bukkit.getVersion()); } Iris.info("Server OS: " + osName + " (" + osArch + ")"); - Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); + if(unstablemode) Iris.info("Server Cpu: " + C.RED + getCPUModel()); + if(!unstablemode) Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); Iris.info("Process Threads: " + getCPUThreads()); Iris.info("Process Memory: " + maxMemory + " MB"); if (maxMemory < 5999) { diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 708a01fda..eb3e12ac5 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -43,7 +43,6 @@ import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.jobs.QueueJob; import lombok.Getter; -import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; @@ -55,7 +54,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import static com.volmit.iris.core.tools.IrisBenchmarking.inProgress; -import static com.volmit.iris.core.tools.IrisPackBenchmarking.runBenchmark; +import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; import static com.volmit.iris.engine.safeguard.ServerBootSFG.multiverse; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") @@ -81,24 +80,34 @@ public class CommandIris implements DecreeExecutor { @Param(description = "The seed to generate the world with", defaultValue = "1337") long seed ) { - if (multiverse){ - sender().sendMessage(C.RED + "Your server has an incompatibility that may corrupt all worlds on the server if not handled properly."); - sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); - Iris.safeguard(C.RED + "----------------------------------------------------------------"); - Iris.safeguard(C.RED + "Command ran: /iris create"); - ServerBootSFG.printincompatiblepluginWarnings(); - Iris.safeguard(C.RED + "----------------------------------------------------------------"); - } - if (name.equals("iris")) { - sender().sendMessage(C.RED + "You cannot use the world name \"iris\" for creating worlds as Iris uses this directory for studio worlds."); - sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); - return; - } - if (name.equals("Benchmark")) { - sender().sendMessage(C.RED + "You cannot use the world name \"Benchmark\" for creating worlds as Iris uses this directory for Benchmarking Packs."); - sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); - return; + if(sender() instanceof Player) { + if (multiverse) { + sender().sendMessage(C.RED + "Your server has an incompatibility that may corrupt all worlds on the server if not handled properly."); + sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + sender().sendMessage(C.RED + "Command ran: /iris create"); + sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatiblePluginWarnings()); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + } + if (unstablemode && !multiverse) { + sender().sendMessage(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); + sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + sender().sendMessage(C.RED + "Command ran: /iris create"); + sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatiblePluginWarnings()); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + } } + if (name.equals("iris")) { + sender().sendMessage(C.RED + "You cannot use the world name \"iris\" for creating worlds as Iris uses this directory for studio worlds."); + sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); + return; + } + if (name.equals("Benchmark")) { + sender().sendMessage(C.RED + "You cannot use the world name \"Benchmark\" for creating worlds as Iris uses this directory for Benchmarking Packs."); + sender().sendMessage(C.RED + "May we suggest the name \"IrisWorld\" instead?"); + return; + } if (new File(Bukkit.getWorldContainer(), name).exists()) { sender().sendMessage(C.RED + "That folder already exists!"); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index f9af5dd7f..6cc0faf44 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -26,6 +26,7 @@ import com.volmit.iris.core.pregenerator.PregenTask; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; +import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; @@ -47,6 +48,7 @@ import java.util.function.Supplier; import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; import static com.volmit.iris.core.tools.IrisPackBenchmarking.loaded; +import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; /** * Makes it a lot easier to setup an engine, world, studio or whatever @@ -108,6 +110,13 @@ public class IrisCreator { */ IrisPackBenchmarking PackBench = new IrisPackBenchmarking(); public World create() throws IrisException { + if (unstablemode){ + Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin. Please rectify this problem to avoid further complications."); + Iris.info(C.RED + "----------------------------------------------------------------"); + Iris.info(C.RED + "Operation ran: Loading Iris World.."); + ServerBootSFG.printIncompatiblePluginWarnings(); + Iris.info(C.RED + "----------------------------------------------------------------"); + } if (Bukkit.isPrimaryThread()) { throw new IrisException("You cannot invoke create() on the main thread."); } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index a76a9a5f4..2e82d77f6 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -7,6 +7,10 @@ import com.volmit.iris.util.format.C; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; +import java.util.ArrayList; +import java.util.List; + +import static com.volmit.iris.Iris.dump; import static com.volmit.iris.Iris.instance; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; @@ -15,8 +19,7 @@ public class ServerBootSFG { public static boolean dynmap = false; public static boolean terraform = false; public static boolean stratos = false; - public static boolean correctversion = true; - + public static boolean unsuportedversion = false; protected static boolean safeguardPassed; public static boolean passedserversoftware = true; protected static byte count; @@ -26,8 +29,7 @@ public class ServerBootSFG { org.bukkit.plugin.PluginManager pluginManager = Bukkit.getPluginManager(); Plugin[] plugins = pluginManager.getPlugins(); if (INMS.get() instanceof NMSBinding1X) { - unstablemode = true; - correctversion = false; + unsuportedversion = true; } StringBuilder pluginList = new StringBuilder("Plugin list: "); @@ -52,8 +54,11 @@ public class ServerBootSFG { count++; } pluginList.append(pluginName).append(", "); + Iris.safeguard(pluginList.toString()); } + if (unsuportedversion) count++; + if ( !instance.getServer().getVersion().contains("Purpur") && !instance.getServer().getVersion().contains("Paper") && @@ -61,18 +66,15 @@ public class ServerBootSFG { !instance.getServer().getVersion().contains("Pufferfish") && !instance.getServer().getVersion().contains("Bukkit")) { - unstablemode = true; passedserversoftware = false; + count++; } safeguardPassed = (count == 0); if(!safeguardPassed){ unstablemode = true; - } - if (unstablemode){ Iris.safeguard("Unstable mode has been activated."); } - Iris.safeguard(pluginList.toString()); } public static void UnstableMode(){ @@ -88,7 +90,8 @@ public class ServerBootSFG { Iris.safeguard(C.RED + "Supported: Purpur, Pufferfish, Paper, Spigot, Bukkit"); } } - public static void printincompatiblepluginWarnings(){ + public static void printIncompatiblePluginWarnings(){ + // String SupportedIrisVersion = getDescription().getVersion(); //todo Automatic version if (safeguardPassed) { Iris.safeguard(C.BLUE + "0 Conflicts found"); @@ -110,6 +113,48 @@ public class ServerBootSFG { Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); Iris.safeguard(C.YELLOW + "- Iris is not compatible with other worldgen plugins."); } + if (unsuportedversion) { + Iris.safeguard(C.RED + "Server Version"); + Iris.safeguard(C.RED + "- Iris only supports 1.19.2 > 1.20.2"); + } + if (!passedserversoftware) { + Iris.safeguard(C.RED + "Unsupported Server Software"); + Iris.safeguard(C.RED + "- Please consider using Paper or Purpur instead."); + + // todo Add a cmd to show all issues? + } } } + + public static String MSGIncompatiblePluginWarnings(){ + StringBuilder stringBuilder = new StringBuilder(); + + List incompatibleList = new ArrayList<>(); + + if (multiverse) { + String incompatibility1 = "Multiverse"; + stringBuilder.append(incompatibility1).append(", "); + incompatibleList.add(incompatibility1); + } + if(dynmap) { + String incompatibility2 = "Dynmap"; + stringBuilder.append(incompatibility2).append(", "); + incompatibleList.add(incompatibility2); + } + if (terraform) { + String incompatibility3 = "Terraform"; + stringBuilder.append(incompatibility3).append(", "); + incompatibleList.add(incompatibility3); + } + if(stratos){ + String incompatibility4 = "Stratos"; + stringBuilder.append(incompatibility4).append(", "); + incompatibleList.add(incompatibility4); + + } + + String MSGIncompatiblePlugins = stringBuilder.toString(); + return MSGIncompatiblePlugins; + + } } From 8ba8627281954ebf68c2ebf3981f170c1c24320f Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 28 Oct 2023 20:51:32 +0200 Subject: [PATCH 07/28] Improved pack Benchmarking not done yet.. --- build.gradle | 2 +- .../iris/core/tools/IrisPackBenchmarking.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index ca4a20b5b..40b156d77 100644 --- a/build.gradle +++ b/build.gradle @@ -295,7 +295,7 @@ if (JavaVersion.current().toString() != "17") { task iris(type: Copy) { group "iris" - from new File(buildDir, "Iris-${version}.jar") + from new File(buildDir, "libs/Iris-${version}.jar") into buildDir dependsOn(build) } diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index 4bbc2aba1..ef454e30b 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -3,6 +3,7 @@ package com.volmit.iris.core.tools; import com.volmit.iris.Iris; import com.volmit.iris.core.pregenerator.IrisPregenerator; +import com.volmit.iris.core.pregenerator.LazyPregenerator; import com.volmit.iris.core.pregenerator.PregenTask; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; @@ -87,8 +88,6 @@ public class IrisPackBenchmarking { while (true) { totalChunks = IrisPregenerator.getLongTotalChunks(); generatedChunks = IrisPregenerator.getLongGeneratedChunks(); - Iris.info("TEST: "+ totalChunks); - Iris.info("TEST2: "+ generatedChunks); if(totalChunks > 0) { if (generatedChunks >= totalChunks) { Iris.info("Benchmark Completed!"); @@ -123,6 +122,21 @@ public class IrisPackBenchmarking { .build(), Bukkit.getWorld("Benchmark") ); } + static void startLazyBenchmark(){ + int x = 0; + int z = 0; + LazyPregenerator.LazyPregenJob pregenJob = LazyPregenerator.LazyPregenJob.builder() + .world("Benchmark") + .healingPosition(0) + .healing(false) + .chunksPerMinute(3200) + .radiusBlocks(5000) + .position(0) + .build(); + + LazyPregenerator pregenerator = new LazyPregenerator(pregenJob, new File("plugins/Iris/lazygen.json")); + pregenerator.start(); + } public static double calculateAverageCPS() { double elapsedTimeSec = elapsedTimeNs / 1_000_000_000.0; // Convert to seconds return generatedChunks / elapsedTimeSec; From 5fa564969e8a9e0ae8e92a44d73e0020ffd091b0 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 28 Oct 2023 20:51:32 +0200 Subject: [PATCH 08/28] Added cmd to see what is causing the instability --- .../iris/core/commands/CommandIris.java | 28 +++++++++++++++++-- .../iris/engine/safeguard/ServerBootSFG.java | 15 ++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index eb3e12ac5..f4f6e88eb 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -46,9 +46,11 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import java.io.Console; import java.io.File; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -86,7 +88,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); sender().sendMessage(C.RED + "----------------------------------------------------------------"); sender().sendMessage(C.RED + "Command ran: /iris create"); - sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatiblePluginWarnings()); + sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } if (unstablemode && !multiverse) { @@ -94,7 +96,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); sender().sendMessage(C.RED + "----------------------------------------------------------------"); sender().sendMessage(C.RED + "Command ran: /iris create"); - sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatiblePluginWarnings()); + sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } } @@ -179,6 +181,28 @@ public class CommandIris implements DecreeExecutor { IrisPackBenchmarking.runBenchmark(); } + @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) + public void fixunstable() throws InterruptedException { + if (unstablemode){ + if (sender() instanceof Player) { // todo: fix this being always false + sender().sendMessage(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); + sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + sender().sendMessage(C.RED + "Command ran: /iris fixunstable"); + sender().sendMessage(C.RED + "Server Issues: " + C.DARK_RED + ServerBootSFG.MSGIncompatibleWarnings()); + sender().sendMessage(C.RED + "----------------------------------------------------------------"); + } + Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); + Iris.info(C.RED + "Please rectify this problem to avoid further complications."); + Iris.info(C.RED + "----------------------------------------------------------------"); + Iris.info(C.RED + "Command ran: /iris fixunstable"); + ServerBootSFG.printIncompatiblePluginWarnings(); + Iris.info(C.RED + "----------------------------------------------------------------"); + } else { + Iris.info(C.BLUE + "Iris is running stable.."); + sender().sendMessage("Iris is running stable.."); + } + } @Decree(description = "Print world height information", origin = DecreeOrigin.PLAYER) public void height() { diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index 2e82d77f6..a2b517cc4 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -121,12 +121,11 @@ public class ServerBootSFG { Iris.safeguard(C.RED + "Unsupported Server Software"); Iris.safeguard(C.RED + "- Please consider using Paper or Purpur instead."); - // todo Add a cmd to show all issues? } } } - public static String MSGIncompatiblePluginWarnings(){ + public static String MSGIncompatibleWarnings(){ StringBuilder stringBuilder = new StringBuilder(); List incompatibleList = new ArrayList<>(); @@ -151,6 +150,18 @@ public class ServerBootSFG { stringBuilder.append(incompatibility4).append(", "); incompatibleList.add(incompatibility4); + } + if(unsuportedversion){ + String incompatibility5 = "Server Version"; + stringBuilder.append(incompatibility5).append(", "); + incompatibleList.add(incompatibility5); + + } + if(!passedserversoftware){ + String incompatibility6 = "Server Software"; + stringBuilder.append(incompatibility6).append(", "); + incompatibleList.add(incompatibility6); + } String MSGIncompatiblePlugins = stringBuilder.toString(); From 2b159041aca5531e3b5af9807f6260fb27195b59 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sun, 29 Oct 2023 14:14:37 +0100 Subject: [PATCH 09/28] Cleaned SFG a bit --- core/src/main/java/com/volmit/iris/Iris.java | 7 +- .../iris/core/commands/CommandIris.java | 9 +- .../volmit/iris/core/tools/IrisCreator.java | 3 +- .../iris/engine/safeguard/ServerBootSFG.java | 94 +--------------- .../iris/engine/safeguard/UtilsSFG.java | 100 +++++++++++++++++- 5 files changed, 112 insertions(+), 101 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 4857279ee..0539e47c8 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -40,6 +40,7 @@ import com.volmit.iris.engine.platform.BukkitChunkGenerator; import com.volmit.iris.engine.platform.DummyChunkGenerator; import com.volmit.iris.engine.safeguard.IrisSafeguard; import com.volmit.iris.engine.safeguard.ServerBootSFG; +import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.exceptions.IrisException; @@ -468,9 +469,9 @@ public class Iris extends VolmitPlugin implements Listener { J.s(this::setupPapi); J.a(ServerConfigurator::configure, 20); splash(); - ServerBootSFG.UnstableMode(); - ServerBootSFG.SupportedServerSoftware(); - ServerBootSFG.printIncompatiblePluginWarnings(); + UtilsSFG.UnstableMode(); + UtilsSFG.SupportedServerSoftware(); + UtilsSFG.printIncompatiblePluginWarnings(); autoStartStudio(); checkForBukkitWorlds(); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index f4f6e88eb..cba577449 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -28,6 +28,7 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.engine.safeguard.ServerBootSFG; +import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; @@ -88,7 +89,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); sender().sendMessage(C.RED + "----------------------------------------------------------------"); sender().sendMessage(C.RED + "Command ran: /iris create"); - sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatibleWarnings()); + sender().sendMessage(C.RED + UtilsSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } if (unstablemode && !multiverse) { @@ -96,7 +97,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); sender().sendMessage(C.RED + "----------------------------------------------------------------"); sender().sendMessage(C.RED + "Command ran: /iris create"); - sender().sendMessage(C.RED + ServerBootSFG.MSGIncompatibleWarnings()); + sender().sendMessage(C.RED + UtilsSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } } @@ -189,14 +190,14 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); sender().sendMessage(C.RED + "----------------------------------------------------------------"); sender().sendMessage(C.RED + "Command ran: /iris fixunstable"); - sender().sendMessage(C.RED + "Server Issues: " + C.DARK_RED + ServerBootSFG.MSGIncompatibleWarnings()); + sender().sendMessage(C.RED + "Server Issues: " + C.DARK_RED + UtilsSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); Iris.info(C.RED + "Please rectify this problem to avoid further complications."); Iris.info(C.RED + "----------------------------------------------------------------"); Iris.info(C.RED + "Command ran: /iris fixunstable"); - ServerBootSFG.printIncompatiblePluginWarnings(); + UtilsSFG.printIncompatiblePluginWarnings(); Iris.info(C.RED + "----------------------------------------------------------------"); } else { Iris.info(C.BLUE + "Iris is running stable.."); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index 6cc0faf44..6da3c28d7 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -27,6 +27,7 @@ import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.engine.safeguard.ServerBootSFG; +import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; @@ -114,7 +115,7 @@ public class IrisCreator { Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin. Please rectify this problem to avoid further complications."); Iris.info(C.RED + "----------------------------------------------------------------"); Iris.info(C.RED + "Operation ran: Loading Iris World.."); - ServerBootSFG.printIncompatiblePluginWarnings(); + UtilsSFG.printIncompatiblePluginWarnings(); Iris.info(C.RED + "----------------------------------------------------------------"); } if (Bukkit.isPrimaryThread()) { diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index a2b517cc4..36768ed1d 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -4,6 +4,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.v1X.NMSBinding1X; import com.volmit.iris.util.format.C; +import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; @@ -13,7 +14,7 @@ import java.util.List; import static com.volmit.iris.Iris.dump; import static com.volmit.iris.Iris.instance; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; - +@Getter public class ServerBootSFG { public static boolean multiverse = false; public static boolean dynmap = false; @@ -77,95 +78,4 @@ public class ServerBootSFG { } } - public static void UnstableMode(){ - if (unstablemode) { - Iris.safeguard(C.DARK_RED + "Iris is running in Unstable Mode"); - } else { - Iris.safeguard(C.BLUE + "Iris is running Stable"); - } - } - public static void SupportedServerSoftware(){ - if (!passedserversoftware) { - Iris.safeguard(C.DARK_RED + "Server is running unsupported server software"); - Iris.safeguard(C.RED + "Supported: Purpur, Pufferfish, Paper, Spigot, Bukkit"); - } - } - public static void printIncompatiblePluginWarnings(){ - // String SupportedIrisVersion = getDescription().getVersion(); //todo Automatic version - - if (safeguardPassed) { - Iris.safeguard(C.BLUE + "0 Conflicts found"); - } else { - Iris.safeguard(C.DARK_RED + "" + count + " Conflicts found"); - unstablemode = true; - - if (multiverse) { - Iris.safeguard(C.RED + "Multiverse"); - Iris.safeguard(C.RED + "- The plugin Multiverse is not compatible with the server."); - Iris.safeguard(C.RED + "- If you want to have a world manager, consider using PhantomWorlds or MyWorlds instead."); - } - if (dynmap) { - Iris.safeguard(C.RED + "Dynmap"); - Iris.safeguard(C.RED + "- The plugin Dynmap is not compatible with the server."); - Iris.safeguard(C.RED + "- If you want to have a map plugin like Dynmap, consider Bluemap or LiveAtlas."); - } - if (terraform || stratos) { - Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); - Iris.safeguard(C.YELLOW + "- Iris is not compatible with other worldgen plugins."); - } - if (unsuportedversion) { - Iris.safeguard(C.RED + "Server Version"); - Iris.safeguard(C.RED + "- Iris only supports 1.19.2 > 1.20.2"); - } - if (!passedserversoftware) { - Iris.safeguard(C.RED + "Unsupported Server Software"); - Iris.safeguard(C.RED + "- Please consider using Paper or Purpur instead."); - - } - } - } - - public static String MSGIncompatibleWarnings(){ - StringBuilder stringBuilder = new StringBuilder(); - - List incompatibleList = new ArrayList<>(); - - if (multiverse) { - String incompatibility1 = "Multiverse"; - stringBuilder.append(incompatibility1).append(", "); - incompatibleList.add(incompatibility1); - } - if(dynmap) { - String incompatibility2 = "Dynmap"; - stringBuilder.append(incompatibility2).append(", "); - incompatibleList.add(incompatibility2); - } - if (terraform) { - String incompatibility3 = "Terraform"; - stringBuilder.append(incompatibility3).append(", "); - incompatibleList.add(incompatibility3); - } - if(stratos){ - String incompatibility4 = "Stratos"; - stringBuilder.append(incompatibility4).append(", "); - incompatibleList.add(incompatibility4); - - } - if(unsuportedversion){ - String incompatibility5 = "Server Version"; - stringBuilder.append(incompatibility5).append(", "); - incompatibleList.add(incompatibility5); - - } - if(!passedserversoftware){ - String incompatibility6 = "Server Software"; - stringBuilder.append(incompatibility6).append(", "); - incompatibleList.add(incompatibility6); - - } - - String MSGIncompatiblePlugins = stringBuilder.toString(); - return MSGIncompatiblePlugins; - - } } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index fd2d40708..ce8380ef0 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -1,6 +1,104 @@ package com.volmit.iris.engine.safeguard; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.format.C; + +import java.util.ArrayList; +import java.util.List; + +import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; +import static com.volmit.iris.engine.safeguard.ServerBootSFG.*; + public class UtilsSFG { - public static void resetdatapacks(){ + public static void UnstableMode(){ + if (unstablemode) { + Iris.safeguard(C.DARK_RED + "Iris is running in Unstable Mode"); + } else { + Iris.safeguard(C.BLUE + "Iris is running Stable"); + } + } + public static void SupportedServerSoftware(){ + if (!passedserversoftware) { + Iris.safeguard(C.DARK_RED + "Server is running unsupported server software"); + Iris.safeguard(C.RED + "Supported: Purpur, Pufferfish, Paper, Spigot, Bukkit"); + } + } + public static void printIncompatiblePluginWarnings(){ + // String SupportedIrisVersion = getDescription().getVersion(); //todo Automatic version + + if (safeguardPassed) { + Iris.safeguard(C.BLUE + "0 Conflicts found"); + } else { + Iris.safeguard(C.DARK_RED + "" + count + " Conflicts found"); + unstablemode = true; + + if (multiverse) { + Iris.safeguard(C.RED + "Multiverse"); + Iris.safeguard(C.RED + "- The plugin Multiverse is not compatible with the server."); + Iris.safeguard(C.RED + "- If you want to have a world manager, consider using PhantomWorlds or MyWorlds instead."); + } + if (dynmap) { + Iris.safeguard(C.RED + "Dynmap"); + Iris.safeguard(C.RED + "- The plugin Dynmap is not compatible with the server."); + Iris.safeguard(C.RED + "- If you want to have a map plugin like Dynmap, consider Bluemap or LiveAtlas."); + } + if (terraform || stratos) { + Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); + Iris.safeguard(C.YELLOW + "- Iris is not compatible with other worldgen plugins."); + } + if (unsuportedversion) { + Iris.safeguard(C.RED + "Server Version"); + Iris.safeguard(C.RED + "- Iris only supports 1.19.2 > 1.20.2"); + } + if (!passedserversoftware) { + Iris.safeguard(C.RED + "Unsupported Server Software"); + Iris.safeguard(C.RED + "- Please consider using Paper or Purpur instead."); + + } + } + } + + public static String MSGIncompatibleWarnings(){ + StringBuilder stringBuilder = new StringBuilder(); + + List incompatibleList = new ArrayList<>(); + + if (multiverse) { + String incompatibility1 = "Multiverse"; + stringBuilder.append(incompatibility1).append(", "); + incompatibleList.add(incompatibility1); + } + if(dynmap) { + String incompatibility2 = "Dynmap"; + stringBuilder.append(incompatibility2).append(", "); + incompatibleList.add(incompatibility2); + } + if (terraform) { + String incompatibility3 = "Terraform"; + stringBuilder.append(incompatibility3).append(", "); + incompatibleList.add(incompatibility3); + } + if(stratos){ + String incompatibility4 = "Stratos"; + stringBuilder.append(incompatibility4).append(", "); + incompatibleList.add(incompatibility4); + + } + if(unsuportedversion){ + String incompatibility5 = "Server Version"; + stringBuilder.append(incompatibility5).append(", "); + incompatibleList.add(incompatibility5); + + } + if(!passedserversoftware){ + String incompatibility6 = "Server Software"; + stringBuilder.append(incompatibility6).append(", "); + incompatibleList.add(incompatibility6); + + } + + String MSGIncompatiblePlugins = stringBuilder.toString(); + return MSGIncompatiblePlugins; } } From ca3f228b8994ad3f99ab68c8bc45061bb9941dae Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sun, 29 Oct 2023 20:53:56 +0100 Subject: [PATCH 10/28] Cleaning and idi- i mean user issue prevention system. ALPHA --- core/src/main/java/com/volmit/iris/Iris.java | 4 +- .../com/volmit/iris/core/IrisSettings.java | 1 + .../iris/engine/safeguard/ServerBootSFG.java | 3 +- .../iris/engine/safeguard/UtilsSFG.java | 43 +++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 0539e47c8..fccb7e1e3 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -39,7 +39,6 @@ import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.engine.platform.BukkitChunkGenerator; import com.volmit.iris.engine.platform.DummyChunkGenerator; import com.volmit.iris.engine.safeguard.IrisSafeguard; -import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; @@ -472,6 +471,9 @@ public class Iris extends VolmitPlugin implements Listener { UtilsSFG.UnstableMode(); UtilsSFG.SupportedServerSoftware(); UtilsSFG.printIncompatiblePluginWarnings(); + + UtilsSFG.unstablePrompt(); + autoStartStudio(); checkForBukkitWorlds(); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); diff --git a/core/src/main/java/com/volmit/iris/core/IrisSettings.java b/core/src/main/java/com/volmit/iris/core/IrisSettings.java index 3d2a381d6..fd7a109bc 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -145,6 +145,7 @@ public class IrisSettings { @Data public static class IrisSettingsGeneral { + public boolean bootUnstable = false; public boolean commandSounds = true; public boolean debug = false; public boolean disableNMS = false; diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index 36768ed1d..e4b4978be 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -31,6 +31,7 @@ public class ServerBootSFG { Plugin[] plugins = pluginManager.getPlugins(); if (INMS.get() instanceof NMSBinding1X) { unsuportedversion = true; + count++; } StringBuilder pluginList = new StringBuilder("Plugin list: "); @@ -58,8 +59,6 @@ public class ServerBootSFG { Iris.safeguard(pluginList.toString()); } - if (unsuportedversion) count++; - if ( !instance.getServer().getVersion().contains("Purpur") && !instance.getServer().getVersion().contains("Paper") && diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index ce8380ef0..590e82ccb 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -1,13 +1,19 @@ package com.volmit.iris.engine.safeguard; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.format.C; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; import java.util.ArrayList; import java.util.List; +import java.util.Scanner; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; import static com.volmit.iris.engine.safeguard.ServerBootSFG.*; +import static org.bukkit.Bukkit.getLogger; +import static org.bukkit.Bukkit.getServer; public class UtilsSFG { public static void UnstableMode(){ @@ -101,4 +107,41 @@ public class UtilsSFG { return MSGIncompatiblePlugins; } + + public static void unstablePrompt(){ + Iris.info(""); + Iris.info(""); + Iris.info(""); + Iris.info(C.DARK_GRAY + "--==<" + C.RED +" IMPORTANT " + C.DARK_GRAY + ">==--"); + Iris.info(C.RED + "Iris is running in unstable mode what may cause the following issues."); + Iris.info(C.DARK_RED +"Server corruptions"); + Iris.info(C.RED + "- Server wont boot"); + Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- And More.."); + Iris.info(C.DARK_RED + "World corruptions"); + Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- Worlds may slowly corrupt till they wont be able to load."); + Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- And More.."); + Iris.info(C.DARK_RED + "ATTENTION:"+ C.RED + " While running iris in unstable mode you wont be eligible for support."); + Iris.info(""); + /*while (true) { + Iris.info("test2"); + if(IrisSettings.get().getGeneral().isBootUnstable()){ + Iris.info("AAAAAAAAAAAAAAAAAAA"); + } + } */ + + if(!IrisSettings.get().getGeneral().isBootUnstable()){ + Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreUnstable to true if you wish to proceed."); + while (true) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // No + } + } + } + + } } From 3f4fa0c67c9b03819772a0ec326be9cdaf5b996b Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Wed, 1 Nov 2023 15:29:17 +0100 Subject: [PATCH 11/28] Disabled Pack Benchmark for now.. --- .../main/java/com/volmit/iris/core/commands/CommandIris.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index cba577449..856fac30d 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -172,6 +172,8 @@ public class CommandIris implements DecreeExecutor { Iris.info(C.RED + "Benchmark already is in progress."); } } + /* + /todo Fix PREGEN @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) public void packbenchmark( @Param(description = "Dimension to benchmark") @@ -181,7 +183,8 @@ public class CommandIris implements DecreeExecutor { BenchDimension = type.getLoadKey(); IrisPackBenchmarking.runBenchmark(); - } + } */ + @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) public void fixunstable() throws InterruptedException { if (unstablemode){ From de475c9561a087da832ebc47a7180287098c07dc Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Wed, 1 Nov 2023 16:02:53 +0100 Subject: [PATCH 12/28] Changes --- .../volmit/iris/engine/safeguard/UtilsSFG.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index 590e82ccb..e1253a387 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -109,22 +109,25 @@ public class UtilsSFG { } public static void unstablePrompt(){ - Iris.info(""); - Iris.info(""); Iris.info(""); Iris.info(C.DARK_GRAY + "--==<" + C.RED +" IMPORTANT " + C.DARK_GRAY + ">==--"); Iris.info(C.RED + "Iris is running in unstable mode what may cause the following issues."); - Iris.info(C.DARK_RED +"Server corruptions"); + Iris.info(C.DARK_RED +"Server Issues"); Iris.info(C.RED + "- Server wont boot"); - Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- Data Loss"); + Iris.info(C.RED + "- Unexpected behavior."); Iris.info(C.RED + "- And More.."); - Iris.info(C.DARK_RED + "World corruptions"); + Iris.info(C.DARK_RED + "World Issues"); Iris.info(C.RED + "- Worlds cant load due to corruption.."); Iris.info(C.RED + "- Worlds may slowly corrupt till they wont be able to load."); - Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- World data loss."); Iris.info(C.RED + "- And More.."); Iris.info(C.DARK_RED + "ATTENTION:"+ C.RED + " While running iris in unstable mode you wont be eligible for support."); + Iris.info(C.DARK_RED + "CAUSE: " + C.RED + MSGIncompatibleWarnings()); Iris.info(""); + if (IrisSettings.get().getGeneral().bootUnstable){ + Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); + } /*while (true) { Iris.info("test2"); if(IrisSettings.get().getGeneral().isBootUnstable()){ @@ -142,6 +145,6 @@ public class UtilsSFG { } } } - + Iris.info(""); } } From 63e61047368861f2b4c59a87841dfac86c860e75 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 2 Nov 2023 12:24:13 +0100 Subject: [PATCH 13/28] EXPERIMENTAL ChunkHandler.java --- core/src/main/java/com/volmit/iris/Iris.java | 4 +- .../com/volmit/iris/core/ChunkHandler.java | 153 ++++++++++++++++++ .../iris/core/commands/CommandIris.java | 9 +- .../iris/engine/safeguard/PerformanceSFG.java | 13 +- 4 files changed, 165 insertions(+), 14 deletions(-) create mode 100644 core/src/main/java/com/volmit/iris/core/ChunkHandler.java diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index fccb7e1e3..f1090a210 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -30,6 +30,7 @@ import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.v1X.NMSBinding1X; import com.volmit.iris.core.pregenerator.LazyPregenerator; +import com.volmit.iris.core.ChunkHandler; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.EnginePanic; @@ -440,7 +441,7 @@ public class Iris extends VolmitPlugin implements Listener { private static void fixShading() { ShadeFix.fix(ComponentSerializer.class); } - + private ChunkHandler chunkHandler; private void enable() { instance = this; services = new KMap<>(); @@ -458,6 +459,7 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); + chunkHandler = new ChunkHandler(this); J.s(() -> { J.a(() -> PaperLib.suggestPaper(this)); J.a(() -> IO.delete(getTemp())); diff --git a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java new file mode 100644 index 000000000..73e01e368 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java @@ -0,0 +1,153 @@ +package com.volmit.iris.core; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.tools.IrisToolbelt; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.event.world.WorldUnloadEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +public class ChunkHandler implements Listener { + private final JavaPlugin plugin; + private static BukkitTask task; + private final Map worlds = new ConcurrentHashMap<>(); + + private static final Map> playersInChunk = new ConcurrentHashMap<>(); + + public ChunkHandler(JavaPlugin plugin) { + this.plugin = plugin; + Bukkit.getPluginManager().registerEvents(this, plugin); + + for (World world : Bukkit.getWorlds()) { + if (IrisToolbelt.isIrisWorld(world)) { + worlds.put(world, new ChunkUnloader(plugin, world)); + } + } + + startTask(); + } + + private void startTask() { + if (task == null) { + task = new BukkitRunnable() { + @Override + public void run() { + worlds.values().forEach(ChunkUnloader::update); + } + }.runTaskTimerAsynchronously(plugin, 0L, 1L); + } + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + Chunk previousChunk = event.getFrom().getChunk(); + Chunk currentChunk = event.getTo().getChunk(); + + if (!previousChunk.equals(currentChunk)) { + playersInChunk.computeIfAbsent(previousChunk, k -> ConcurrentHashMap.newKeySet()).remove(player); + playersInChunk.computeIfAbsent(currentChunk, k -> ConcurrentHashMap.newKeySet()).add(player); + } + } + + public static void exit() { + if (task != null) { + task.cancel(); + } + } + + @EventHandler + public void onWorldLoad(WorldLoadEvent event) { + World world = event.getWorld(); + if (IrisToolbelt.isIrisWorld(world)) { + worlds.put(world, new ChunkUnloader(plugin, world)); + } + } + + @EventHandler + public void onWorldUnload(WorldUnloadEvent event) { + worlds.remove(event.getWorld()); + } + + @EventHandler + public void onChunkLoad(ChunkLoadEvent event) { + World world = event.getWorld(); + if (worlds.containsKey(world)) { + worlds.get(world).onChunkLoad(event.getChunk()); + } + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent event) { + World world = event.getWorld(); + if (worlds.containsKey(world)) { + worlds.get(world).onChunkUnload(event.getChunk()); + } + } + + private static class ChunkUnloader { + private final JavaPlugin plugin; + private final World world; + private final Map chunks = new ConcurrentHashMap<>(); + + private ChunkUnloader(JavaPlugin plugin, World world) { + this.plugin = plugin; + this.world = world; + } + + public void onChunkLoad(Chunk chunk) { + //System.out.printf("%s > Loaded Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); + chunks.put(chunk, System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(3)); + } + + public void onChunkUnload(Chunk chunk) { + chunks.remove(chunk); + playersInChunk.remove(chunk); + } + + public void update() { + long currentTime = System.currentTimeMillis(); + Set chunkSet = new HashSet<>(chunks.keySet()); + for (Chunk chunk : chunkSet) { + if (!chunk.isLoaded()) { + continue; + } + + if (isChunkNearby(chunk)) { + chunks.put(chunk, currentTime + TimeUnit.MINUTES.toMillis(3)); + } else if (chunks.get(chunk) <= currentTime) { + unloadChunk(chunk); + } + } + } + + private boolean isChunkNearby(Chunk chunk) { + Set players = playersInChunk.get(chunk); + if (players == null) { + players = ConcurrentHashMap.newKeySet(); + playersInChunk.put(chunk, players); + } + return !players.isEmpty(); + } + + private void unloadChunk(Chunk chunk) { + //System.out.printf("%s > Unloading Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); + Bukkit.getScheduler().runTask(plugin, () -> chunk.unload(true)); + } + } +} diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 856fac30d..cb0cb9fe7 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -19,15 +19,14 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; +import com.volmit.iris.core.ChunkHandler; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisBenchmarking; -import com.volmit.iris.core.tools.IrisPackBenchmarking; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; -import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeContext; @@ -47,11 +46,9 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import java.io.Console; import java.io.File; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -213,6 +210,10 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.GREEN + "" + sender().player().getWorld().getMinHeight() + " to " + sender().player().getWorld().getMaxHeight()); sender().sendMessage(C.GREEN + "Total Height: " + (sender().player().getWorld().getMaxHeight() - sender().player().getWorld().getMinHeight())); } + @Decree(description = "TEST") + public void cpspaper() { + ChunkHandler.exit(); + } @Decree(description = "QOL command to open a overworld studio world.", sync = true) public void so() { diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java index c978ff38c..31e3b0e1c 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java @@ -6,18 +6,13 @@ import oshi.hardware.GlobalMemory; import static com.volmit.iris.util.misc.getHardware.*; public class PerformanceSFG { - public static byte CPUPerformanceStage = 3; + public static boolean lowPerformance = false; public void getPerformance(){ - // Performance Stage 3 = Max Performance, 2=Medium, 1=Low - SystemInfo systemInfo = new SystemInfo(); - GlobalMemory globalMemory = systemInfo.getHardware().getMemory(); - long totalMemoryMB = globalMemory.getTotal() / (1024 * 1024); - long availableMemoryMB = globalMemory.getAvailable() / (1024 * 1024); - long totalPageSize = globalMemory.getPageSize() / (1024 * 1024); - long usedMemoryMB = totalMemoryMB - availableMemoryMB; + if (getCPUModel().contains("Xeon")){ + lowPerformance = true; + } // Todo RePixelated: Finish this - } } From d5b9a074e6efef3f5a33df7d1a5a7cd6acfbd62f Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 2 Nov 2023 12:53:30 +0100 Subject: [PATCH 14/28] Additions to ChunkHandler.java --- .../com/volmit/iris/core/ChunkHandler.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java index 73e01e368..e591da029 100644 --- a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java +++ b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java @@ -121,21 +121,27 @@ public class ChunkHandler implements Listener { } public void update() { - long currentTime = System.currentTimeMillis(); - Set chunkSet = new HashSet<>(chunks.keySet()); - for (Chunk chunk : chunkSet) { - if (!chunk.isLoaded()) { - continue; - } + try { + long currentTime = System.currentTimeMillis(); + Set chunkSet = new HashSet<>(chunks.keySet()); + for (Chunk chunk : chunkSet) { + if (!chunk.isLoaded()) { + continue; + } - if (isChunkNearby(chunk)) { - chunks.put(chunk, currentTime + TimeUnit.MINUTES.toMillis(3)); - } else if (chunks.get(chunk) <= currentTime) { - unloadChunk(chunk); + if (isChunkNearby(chunk)) { + chunks.put(chunk, currentTime + TimeUnit.MINUTES.toMillis(3)); + } else if (chunks.get(chunk) <= currentTime) { + unloadChunk(chunk); + } } + } catch (Exception e) { + // Log the error message + System.out.println("Error in update method: " + e.getMessage()); } } + private boolean isChunkNearby(Chunk chunk) { Set players = playersInChunk.get(chunk); if (players == null) { @@ -146,8 +152,13 @@ public class ChunkHandler implements Listener { } private void unloadChunk(Chunk chunk) { - //System.out.printf("%s > Unloading Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); - Bukkit.getScheduler().runTask(plugin, () -> chunk.unload(true)); + try { + System.out.printf("%s > Unloading Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); + Bukkit.getScheduler().runTask(plugin, () -> chunk.unload(true)); + } catch (Exception e) { + // Log the error message + System.out.println("Error unloading chunk: " + e.getMessage()); + } } } } From c22ccf71a757dd8f906973ed6641608b11d4ffe6 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 2 Nov 2023 13:03:09 +0100 Subject: [PATCH 15/28] Added setting option for ChunkHandler.java and no more random freezes. --- core/src/main/java/com/volmit/iris/Iris.java | 5 ++++- core/src/main/java/com/volmit/iris/core/ChunkHandler.java | 4 ++-- core/src/main/java/com/volmit/iris/core/IrisSettings.java | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index f1090a210..c03535d36 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -459,7 +459,10 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); - chunkHandler = new ChunkHandler(this); + if(IrisSettings.get().getGeneral().useIntegratedChunkHandler) { + chunkHandler = new ChunkHandler(this); + Iris.info("Started Intergrated ChunkHandler"); + } J.s(() -> { J.a(() -> PaperLib.suggestPaper(this)); J.a(() -> IO.delete(getTemp())); diff --git a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java index e591da029..32669d102 100644 --- a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java +++ b/core/src/main/java/com/volmit/iris/core/ChunkHandler.java @@ -23,6 +23,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; public class ChunkHandler implements Listener { + // Idk how it works but it works lol private final JavaPlugin plugin; private static BukkitTask task; private final Map worlds = new ConcurrentHashMap<>(); @@ -153,10 +154,9 @@ public class ChunkHandler implements Listener { private void unloadChunk(Chunk chunk) { try { - System.out.printf("%s > Unloading Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); + // System.out.printf("%s > Unloading Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); Bukkit.getScheduler().runTask(plugin, () -> chunk.unload(true)); } catch (Exception e) { - // Log the error message System.out.println("Error unloading chunk: " + e.getMessage()); } } diff --git a/core/src/main/java/com/volmit/iris/core/IrisSettings.java b/core/src/main/java/com/volmit/iris/core/IrisSettings.java index fd7a109bc..2c570a788 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -146,6 +146,7 @@ public class IrisSettings { @Data public static class IrisSettingsGeneral { public boolean bootUnstable = false; + public boolean useIntegratedChunkHandler = false; public boolean commandSounds = true; public boolean debug = false; public boolean disableNMS = false; From dc21f054824c8853f774e4795d9b79d91d67c6e3 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 2 Nov 2023 13:42:50 +0100 Subject: [PATCH 16/28] Cleanup --- core/src/main/java/com/volmit/iris/Iris.java | 14 ++++++-------- .../com/volmit/iris/core/commands/CommandIris.java | 4 ++-- .../ChunkHandlerSVC.java} | 7 +++---- 3 files changed, 11 insertions(+), 14 deletions(-) rename core/src/main/java/com/volmit/iris/core/{ChunkHandler.java => service/ChunkHandlerSVC.java} (97%) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index c03535d36..6afbe9a09 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -30,7 +30,7 @@ import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.v1X.NMSBinding1X; import com.volmit.iris.core.pregenerator.LazyPregenerator; -import com.volmit.iris.core.ChunkHandler; +import com.volmit.iris.core.service.ChunkHandlerSVC; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.EnginePanic; @@ -441,7 +441,7 @@ public class Iris extends VolmitPlugin implements Listener { private static void fixShading() { ShadeFix.fix(ComponentSerializer.class); } - private ChunkHandler chunkHandler; + private ChunkHandlerSVC chunkHandlerSVC; private void enable() { instance = this; services = new KMap<>(); @@ -459,10 +459,6 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); - if(IrisSettings.get().getGeneral().useIntegratedChunkHandler) { - chunkHandler = new ChunkHandler(this); - Iris.info("Started Intergrated ChunkHandler"); - } J.s(() -> { J.a(() -> PaperLib.suggestPaper(this)); J.a(() -> IO.delete(getTemp())); @@ -476,9 +472,11 @@ public class Iris extends VolmitPlugin implements Listener { UtilsSFG.UnstableMode(); UtilsSFG.SupportedServerSoftware(); UtilsSFG.printIncompatiblePluginWarnings(); - UtilsSFG.unstablePrompt(); - + if(IrisSettings.get().getGeneral().useIntegratedChunkHandler) { + chunkHandlerSVC = new ChunkHandlerSVC(this); + Iris.info(C.LIGHT_PURPLE + "Started Intergrated ChunkHandlerSVC"); + } autoStartStudio(); checkForBukkitWorlds(); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index cb0cb9fe7..a2d831425 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -19,7 +19,7 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; -import com.volmit.iris.core.ChunkHandler; +import com.volmit.iris.core.service.ChunkHandlerSVC; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisBenchmarking; @@ -212,7 +212,7 @@ public class CommandIris implements DecreeExecutor { } @Decree(description = "TEST") public void cpspaper() { - ChunkHandler.exit(); + ChunkHandlerSVC.exit(); } @Decree(description = "QOL command to open a overworld studio world.", sync = true) diff --git a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java b/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java similarity index 97% rename from core/src/main/java/com/volmit/iris/core/ChunkHandler.java rename to core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java index 32669d102..4f7f0dddd 100644 --- a/core/src/main/java/com/volmit/iris/core/ChunkHandler.java +++ b/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java @@ -1,6 +1,5 @@ -package com.volmit.iris.core; +package com.volmit.iris.core.service; -import com.volmit.iris.Iris; import com.volmit.iris.core.tools.IrisToolbelt; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -22,7 +21,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; -public class ChunkHandler implements Listener { +public class ChunkHandlerSVC implements Listener { // Idk how it works but it works lol private final JavaPlugin plugin; private static BukkitTask task; @@ -30,7 +29,7 @@ public class ChunkHandler implements Listener { private static final Map> playersInChunk = new ConcurrentHashMap<>(); - public ChunkHandler(JavaPlugin plugin) { + public ChunkHandlerSVC(JavaPlugin plugin) { this.plugin = plugin; Bukkit.getPluginManager().registerEvents(this, plugin); From 021f9b1d0e2e94a3243baf125ed812cc7af0eff2 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Thu, 2 Nov 2023 16:55:47 +0100 Subject: [PATCH 17/28] Cleanup / Fixes --- .../volmit/iris/core/commands/CommandIris.java | 14 ++------------ .../volmit/iris/core/service/ChunkHandlerSVC.java | 2 +- .../com/volmit/iris/core/tools/IrisCreator.java | 1 - .../com/volmit/iris/engine/IrisEngineMantle.java | 15 ++++++++++----- .../iris/engine/jigsaw/PlannedStructure.java | 2 +- .../iris/engine/safeguard/IrisSafeguard.java | 1 + .../iris/engine/safeguard/PerformanceSFG.java | 2 +- 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index a2d831425..eaa359acb 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -185,14 +185,8 @@ public class CommandIris implements DecreeExecutor { @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) public void fixunstable() throws InterruptedException { if (unstablemode){ - if (sender() instanceof Player) { // todo: fix this being always false - sender().sendMessage(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); - sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); - sender().sendMessage(C.RED + "----------------------------------------------------------------"); - sender().sendMessage(C.RED + "Command ran: /iris fixunstable"); - sender().sendMessage(C.RED + "Server Issues: " + C.DARK_RED + UtilsSFG.MSGIncompatibleWarnings()); - sender().sendMessage(C.RED + "----------------------------------------------------------------"); - } + sender().sendMessage(C.RED + "Incompatibilities are posted in console.."); + Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); Iris.info(C.RED + "Please rectify this problem to avoid further complications."); Iris.info(C.RED + "----------------------------------------------------------------"); @@ -210,10 +204,6 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.GREEN + "" + sender().player().getWorld().getMinHeight() + " to " + sender().player().getWorld().getMaxHeight()); sender().sendMessage(C.GREEN + "Total Height: " + (sender().player().getWorld().getMaxHeight() - sender().player().getWorld().getMinHeight())); } - @Decree(description = "TEST") - public void cpspaper() { - ChunkHandlerSVC.exit(); - } @Decree(description = "QOL command to open a overworld studio world.", sync = true) public void so() { diff --git a/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java b/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java index 4f7f0dddd..c245653be 100644 --- a/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/ChunkHandlerSVC.java @@ -111,7 +111,7 @@ public class ChunkHandlerSVC implements Listener { } public void onChunkLoad(Chunk chunk) { - //System.out.printf("%s > Loaded Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); + // System.out.printf("%s > Loaded Chunk [x=%s, z=%s]%n", world.getName(), chunk.getX(), chunk.getZ()); chunks.put(chunk, System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(3)); } diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index 6da3c28d7..0088d8411 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -176,7 +176,6 @@ public class IrisCreator { } } //if (benchmark){loaded = true;} - Iris.info("Debug1"); }); diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 591f76c31..d7a88eb77 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -46,6 +46,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; +import static com.volmit.iris.engine.safeguard.PerformanceSFG.lowPerformance; @Data public class IrisEngineMantle implements EngineMantle { @@ -285,15 +286,19 @@ public class IrisEngineMantle implements EngineMantle { x = Math.max(x, c); x = (Math.max(x, 16) + 16) >> 4; x = x % 2 == 0 ? x + 1 : x; - IrisPackBenchmarking PackBench = new IrisPackBenchmarking(); if (benchmark){ x = 4; Iris.info("Mantle Size: " + x + " Chunks " + C.BLUE + "BENCHMARK MODE"); } else { - Iris.info("Mantle Size: " + x + " Chunks"); - Iris.info(" Object Mantle Size: " + u + " (" + ((Math.max(u, 16) + 16) >> 4) + ")"); - Iris.info(" Jigsaw Mantle Size: " + jig + " (" + ((Math.max(jig, 16) + 16) >> 4) + ")"); - Iris.info(" Carving Mantle Size: " + c + " (" + ((Math.max(c, 16) + 16) >> 4) + ")"); + if(lowPerformance){ + x = 4; + Iris.info("Mantle Size: " + x + " Chunks" + C.GOLD + "LOW PERFORMANCE MODE"); + } else { + Iris.info("Mantle Size: " + x + " Chunks"); + Iris.info(" Object Mantle Size: " + u + " (" + ((Math.max(u, 16) + 16) >> 4) + ")"); + Iris.info(" Jigsaw Mantle Size: " + jig + " (" + ((Math.max(jig, 16) + 16) >> 4) + ")"); + Iris.info(" Carving Mantle Size: " + c + " (" + ((Math.max(c, 16) + 16) >> 4) + ")"); + } } diff --git a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java index b3dae5bf0..9d7283d49 100644 --- a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java +++ b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java @@ -101,7 +101,7 @@ public class PlannedStructure { int sz = (v.getD() / 2); int xx = i.getPosition().getX() + sx; int zz = i.getPosition().getZ() + sz; - RNG rngf = new RNG(Cache.key(xx, zz)); + RNG rng = new RNG(Cache.key(xx, zz)); int offset = i.getPosition().getY() - startHeight; int height; diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java index 218fc4845..351c46e78 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java @@ -8,6 +8,7 @@ public class IrisSafeguard { public static void IrisSafeguardSystem() { Iris.info("Enabled Iris SafeGuard"); ServerBootSFG.BootCheck(); + PerformanceSFG.calculatePerformance(); } } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java index 31e3b0e1c..950ba57f1 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java @@ -7,7 +7,7 @@ import static com.volmit.iris.util.misc.getHardware.*; public class PerformanceSFG { public static boolean lowPerformance = false; - public void getPerformance(){ + public static void calculatePerformance(){ if (getCPUModel().contains("Xeon")){ lowPerformance = true; From e7fc9e6fe5f7171b1a78f4d86074eaff06092d13 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Fri, 3 Nov 2023 08:28:19 +0100 Subject: [PATCH 18/28] Test --- .../iris/engine/safeguard/ServerBootSFG.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index e4b4978be..d75e3cbb1 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -9,7 +9,9 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.volmit.iris.Iris.dump; import static com.volmit.iris.Iris.instance; @@ -34,30 +36,29 @@ public class ServerBootSFG { count++; } + // Why am i doing this again? + Map incompatiblePlugins = new HashMap<>(); + incompatiblePlugins.put("Multiverse-Core", multiverse); + incompatiblePlugins.put("Dynmap", dynmap); + incompatiblePlugins.put("TerraformGenerator", terraform); + incompatiblePlugins.put("Stratos", stratos); + StringBuilder pluginList = new StringBuilder("Plugin list: "); count = 0; for (Plugin plugin : plugins) { String pluginName = plugin.getName(); - if (pluginName.equalsIgnoreCase("Multiverse-Core")) { - multiverse = true; + Boolean flag = incompatiblePlugins.get(pluginName); + Iris.info("T65: " + pluginName); + if (flag != null && !flag) { count++; + incompatiblePlugins.put(pluginName, true); } - if (pluginName.equalsIgnoreCase("Dynmap")) { - dynmap = true; - count++; - } - if (pluginName.equalsIgnoreCase("TerraformGenerator")) { - terraform = true; - count++; - } - if (pluginName.equalsIgnoreCase("Stratos")) { - stratos = true; - count++; - } - pluginList.append(pluginName).append(", "); - Iris.safeguard(pluginList.toString()); + // pluginList.append(pluginName).append(", "); + // Iris.safeguard(pluginList.toString()); } + Iris.info("TEST:" + multiverse); + if ( !instance.getServer().getVersion().contains("Purpur") && From afd15ad45000644e5846c45def41f8e6495bc23a Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Fri, 3 Nov 2023 09:21:59 +0100 Subject: [PATCH 19/28] A lot of cleanup --- core/src/main/java/com/volmit/iris/Iris.java | 2 +- .../iris/core/commands/CommandIris.java | 9 ++- .../volmit/iris/core/tools/IrisCreator.java | 4 +- .../iris/engine/safeguard/ServerBootSFG.java | 53 +++++++------- .../iris/engine/safeguard/UtilsSFG.java | 69 +++---------------- 5 files changed, 41 insertions(+), 96 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 6afbe9a09..ff4643777 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -471,7 +471,7 @@ public class Iris extends VolmitPlugin implements Listener { splash(); UtilsSFG.UnstableMode(); UtilsSFG.SupportedServerSoftware(); - UtilsSFG.printIncompatiblePluginWarnings(); + UtilsSFG.printIncompatibleWarnings(); UtilsSFG.unstablePrompt(); if(IrisSettings.get().getGeneral().useIntegratedChunkHandler) { chunkHandlerSVC = new ChunkHandlerSVC(this); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index eaa359acb..cb671c455 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -19,7 +19,6 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; -import com.volmit.iris.core.service.ChunkHandlerSVC; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisBenchmarking; @@ -55,7 +54,7 @@ import java.util.concurrent.Future; import static com.volmit.iris.core.tools.IrisBenchmarking.inProgress; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; -import static com.volmit.iris.engine.safeguard.ServerBootSFG.multiverse; +import static com.volmit.iris.engine.safeguard.ServerBootSFG.incompatiblePlugins; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") public class CommandIris implements DecreeExecutor { @@ -81,7 +80,7 @@ public class CommandIris implements DecreeExecutor { long seed ) { if(sender() instanceof Player) { - if (multiverse) { + if (incompatiblePlugins.get("Multiverse-Core")) { sender().sendMessage(C.RED + "Your server has an incompatibility that may corrupt all worlds on the server if not handled properly."); sender().sendMessage(C.RED + "it is strongly advised for you to take action. see log for full detail"); sender().sendMessage(C.RED + "----------------------------------------------------------------"); @@ -89,7 +88,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + UtilsSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } - if (unstablemode && !multiverse) { + if (unstablemode && !incompatiblePlugins.get("Multiverse-Core")) { sender().sendMessage(C.RED + "Your server is experiencing an incompatibility with the Iris plugin."); sender().sendMessage(C.RED + "Please rectify this problem to avoid further complications."); sender().sendMessage(C.RED + "----------------------------------------------------------------"); @@ -191,7 +190,7 @@ public class CommandIris implements DecreeExecutor { Iris.info(C.RED + "Please rectify this problem to avoid further complications."); Iris.info(C.RED + "----------------------------------------------------------------"); Iris.info(C.RED + "Command ran: /iris fixunstable"); - UtilsSFG.printIncompatiblePluginWarnings(); + UtilsSFG.printIncompatibleWarnings(); Iris.info(C.RED + "----------------------------------------------------------------"); } else { Iris.info(C.BLUE + "Iris is running stable.."); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index 0088d8411..04e8b9cba 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -26,7 +26,6 @@ import com.volmit.iris.core.pregenerator.PregenTask; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; -import com.volmit.iris.engine.safeguard.ServerBootSFG; import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; @@ -48,7 +47,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; import static com.volmit.iris.core.tools.IrisPackBenchmarking.benchmark; -import static com.volmit.iris.core.tools.IrisPackBenchmarking.loaded; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; /** @@ -115,7 +113,7 @@ public class IrisCreator { Iris.info(C.RED + "Your server is experiencing an incompatibility with the Iris plugin. Please rectify this problem to avoid further complications."); Iris.info(C.RED + "----------------------------------------------------------------"); Iris.info(C.RED + "Operation ran: Loading Iris World.."); - UtilsSFG.printIncompatiblePluginWarnings(); + UtilsSFG.printIncompatibleWarnings(); Iris.info(C.RED + "----------------------------------------------------------------"); } if (Bukkit.isPrimaryThread()) { diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index d75e3cbb1..25c4d3fae 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -8,58 +8,50 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.volmit.iris.Iris.dump; import static com.volmit.iris.Iris.instance; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; -@Getter + public class ServerBootSFG { - public static boolean multiverse = false; - public static boolean dynmap = false; - public static boolean terraform = false; - public static boolean stratos = false; + public static final Map incompatiblePlugins = new HashMap<>(); public static boolean unsuportedversion = false; protected static boolean safeguardPassed; public static boolean passedserversoftware = true; protected static byte count; + public static String allIncompatiblePlugins; public static void BootCheck() { Iris.info("Checking for possible conflicts.."); org.bukkit.plugin.PluginManager pluginManager = Bukkit.getPluginManager(); Plugin[] plugins = pluginManager.getPlugins(); - if (INMS.get() instanceof NMSBinding1X) { - unsuportedversion = true; - count++; - } - // Why am i doing this again? - Map incompatiblePlugins = new HashMap<>(); - incompatiblePlugins.put("Multiverse-Core", multiverse); - incompatiblePlugins.put("Dynmap", dynmap); - incompatiblePlugins.put("TerraformGenerator", terraform); - incompatiblePlugins.put("Stratos", stratos); - - StringBuilder pluginList = new StringBuilder("Plugin list: "); - count = 0; + incompatiblePlugins.clear(); + incompatiblePlugins.put("Multiverse-Core", false); + incompatiblePlugins.put("Dynmap", false); + incompatiblePlugins.put("TerraformGenerator", false); + incompatiblePlugins.put("Stratos", false); + String pluginName; for (Plugin plugin : plugins) { - String pluginName = plugin.getName(); + pluginName = plugin.getName(); Boolean flag = incompatiblePlugins.get(pluginName); Iris.info("T65: " + pluginName); if (flag != null && !flag) { count++; incompatiblePlugins.put(pluginName, true); } - // pluginList.append(pluginName).append(", "); - // Iris.safeguard(pluginList.toString()); } - Iris.info("TEST:" + multiverse); + Iris.info("TEST: " + incompatiblePlugins.get("Multiverse-Core")); + StringJoiner joiner = new StringJoiner(", "); + for (Map.Entry entry : incompatiblePlugins.entrySet()) { + if (entry.getValue()) { + joiner.add(entry.getKey()); + } + } if ( !instance.getServer().getVersion().contains("Purpur") && !instance.getServer().getVersion().contains("Paper") && @@ -68,8 +60,17 @@ public class ServerBootSFG { !instance.getServer().getVersion().contains("Bukkit")) { passedserversoftware = false; + joiner.add("Server Software"); count++; } + if (INMS.get() instanceof NMSBinding1X) { + unsuportedversion = true; + joiner.add("Unsupported Minecraft Version"); + count++; + } + + allIncompatiblePlugins = joiner.toString(); + Iris.info("All Incompatible Plugins: " + allIncompatiblePlugins); safeguardPassed = (count == 0); if(!safeguardPassed){ diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index e1253a387..d43da07ff 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -3,17 +3,9 @@ package com.volmit.iris.engine.safeguard; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.format.C; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; import static com.volmit.iris.engine.safeguard.ServerBootSFG.*; -import static org.bukkit.Bukkit.getLogger; -import static org.bukkit.Bukkit.getServer; public class UtilsSFG { public static void UnstableMode(){ @@ -29,7 +21,7 @@ public class UtilsSFG { Iris.safeguard(C.RED + "Supported: Purpur, Pufferfish, Paper, Spigot, Bukkit"); } } - public static void printIncompatiblePluginWarnings(){ + public static void printIncompatibleWarnings(){ // String SupportedIrisVersion = getDescription().getVersion(); //todo Automatic version if (safeguardPassed) { @@ -38,17 +30,17 @@ public class UtilsSFG { Iris.safeguard(C.DARK_RED + "" + count + " Conflicts found"); unstablemode = true; - if (multiverse) { + if (incompatiblePlugins.get("Multiverse-Core")) { Iris.safeguard(C.RED + "Multiverse"); Iris.safeguard(C.RED + "- The plugin Multiverse is not compatible with the server."); Iris.safeguard(C.RED + "- If you want to have a world manager, consider using PhantomWorlds or MyWorlds instead."); } - if (dynmap) { + if (incompatiblePlugins.get("Dynmap")) { Iris.safeguard(C.RED + "Dynmap"); Iris.safeguard(C.RED + "- The plugin Dynmap is not compatible with the server."); Iris.safeguard(C.RED + "- If you want to have a map plugin like Dynmap, consider Bluemap or LiveAtlas."); } - if (terraform || stratos) { + if (incompatiblePlugins.get("TerraformGenerator") || incompatiblePlugins.get("Stratos")) { Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); Iris.safeguard(C.YELLOW + "- Iris is not compatible with other worldgen plugins."); } @@ -64,50 +56,11 @@ public class UtilsSFG { } } - public static String MSGIncompatibleWarnings(){ - StringBuilder stringBuilder = new StringBuilder(); - - List incompatibleList = new ArrayList<>(); - - if (multiverse) { - String incompatibility1 = "Multiverse"; - stringBuilder.append(incompatibility1).append(", "); - incompatibleList.add(incompatibility1); - } - if(dynmap) { - String incompatibility2 = "Dynmap"; - stringBuilder.append(incompatibility2).append(", "); - incompatibleList.add(incompatibility2); - } - if (terraform) { - String incompatibility3 = "Terraform"; - stringBuilder.append(incompatibility3).append(", "); - incompatibleList.add(incompatibility3); - } - if(stratos){ - String incompatibility4 = "Stratos"; - stringBuilder.append(incompatibility4).append(", "); - incompatibleList.add(incompatibility4); - - } - if(unsuportedversion){ - String incompatibility5 = "Server Version"; - stringBuilder.append(incompatibility5).append(", "); - incompatibleList.add(incompatibility5); - - } - if(!passedserversoftware){ - String incompatibility6 = "Server Software"; - stringBuilder.append(incompatibility6).append(", "); - incompatibleList.add(incompatibility6); - - } - - String MSGIncompatiblePlugins = stringBuilder.toString(); - return MSGIncompatiblePlugins; - + public static String MSGIncompatibleWarnings() { + return allIncompatiblePlugins; } + public static void unstablePrompt(){ Iris.info(""); Iris.info(C.DARK_GRAY + "--==<" + C.RED +" IMPORTANT " + C.DARK_GRAY + ">==--"); @@ -123,17 +76,11 @@ public class UtilsSFG { Iris.info(C.RED + "- World data loss."); Iris.info(C.RED + "- And More.."); Iris.info(C.DARK_RED + "ATTENTION:"+ C.RED + " While running iris in unstable mode you wont be eligible for support."); - Iris.info(C.DARK_RED + "CAUSE: " + C.RED + MSGIncompatibleWarnings()); + Iris.info(C.DARK_RED + "CAUSES: " + C.RED + MSGIncompatibleWarnings()); Iris.info(""); if (IrisSettings.get().getGeneral().bootUnstable){ Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); } - /*while (true) { - Iris.info("test2"); - if(IrisSettings.get().getGeneral().isBootUnstable()){ - Iris.info("AAAAAAAAAAAAAAAAAAA"); - } - } */ if(!IrisSettings.get().getGeneral().isBootUnstable()){ Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreUnstable to true if you wish to proceed."); From 9333775e0e190a2519505395255772117fffab5c Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Fri, 3 Nov 2023 09:23:28 +0100 Subject: [PATCH 20/28] wait no --- .../main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index d43da07ff..c19dbd0c5 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -76,7 +76,7 @@ public class UtilsSFG { Iris.info(C.RED + "- World data loss."); Iris.info(C.RED + "- And More.."); Iris.info(C.DARK_RED + "ATTENTION:"+ C.RED + " While running iris in unstable mode you wont be eligible for support."); - Iris.info(C.DARK_RED + "CAUSES: " + C.RED + MSGIncompatibleWarnings()); + Iris.info(C.DARK_RED + "CAUSE: " + C.RED + MSGIncompatibleWarnings()); Iris.info(""); if (IrisSettings.get().getGeneral().bootUnstable){ Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); From 5feaa45edf3057aebaa7015c7ee97b00d0458040 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Fri, 3 Nov 2023 10:20:59 +0100 Subject: [PATCH 21/28] cleanup --- core/src/main/java/com/volmit/iris/Iris.java | 6 +++--- .../java/com/volmit/iris/core/commands/CommandStudio.java | 1 + .../com/volmit/iris/engine/safeguard/PerformanceSFG.java | 3 +++ .../main/java/com/volmit/iris/util/misc/getHardware.java | 4 ++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index ff4643777..7173c109b 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -53,6 +53,7 @@ import com.volmit.iris.util.io.InstanceState; import com.volmit.iris.util.io.JarScanner; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.misc.getHardware; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.plugin.Metrics; @@ -778,7 +779,6 @@ public class Iris extends VolmitPlugin implements Listener { String[] splash = unstablemode ? splashunstable : splashstable; // Choose the appropriate splash array based on unstablemode - long maxMemory = Runtime.getRuntime().maxMemory() / (1024 * 1024); OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); String osArch = osBean.getArch(); String osName = osBean.getName(); @@ -791,8 +791,8 @@ public class Iris extends VolmitPlugin implements Listener { if(unstablemode) Iris.info("Server Cpu: " + C.RED + getCPUModel()); if(!unstablemode) Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); Iris.info("Process Threads: " + getCPUThreads()); - Iris.info("Process Memory: " + maxMemory + " MB"); - if (maxMemory < 5999) { + Iris.info("Process Memory: " + getHardware.getProcessMemory() + " MB"); + if (getHardware.getProcessMemory() < 5999) { Iris.warn("6GB+ Ram is recommended"); } Iris.info("Bukkit version: " + Bukkit.getBukkitVersion()); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index b080dee01..16405436c 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -281,6 +281,7 @@ public class CommandStudio implements DecreeExecutor { @Param(description = "The dimension to profile", contextual = true, defaultValue = "default") IrisDimension dimension ) { + // Todo: Make this more accurate File pack = dimension.getLoadFile().getParentFile().getParentFile(); File report = Iris.instance.getDataFile("profile.txt"); IrisProject project = new IrisProject(pack); diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java index 950ba57f1..b97a7ec6b 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java @@ -12,6 +12,9 @@ public class PerformanceSFG { if (getCPUModel().contains("Xeon")){ lowPerformance = true; } + if (getProcessMemory() < 5999){ + lowPerformance = true; + } // Todo RePixelated: Finish this } diff --git a/core/src/main/java/com/volmit/iris/util/misc/getHardware.java b/core/src/main/java/com/volmit/iris/util/misc/getHardware.java index eea952bd2..ea5aa06d5 100644 --- a/core/src/main/java/com/volmit/iris/util/misc/getHardware.java +++ b/core/src/main/java/com/volmit/iris/util/misc/getHardware.java @@ -18,6 +18,10 @@ public class getHardware { CentralProcessor processor = systemInfo.getHardware().getProcessor(); return processor.getLogicalProcessorCount(); } + public static long getProcessMemory(){ + long maxMemory = Runtime.getRuntime().maxMemory() / (1024 * 1024); + return maxMemory; + } public static String getCPUModel() { try { From 522de89792bbf9fb41ed65e0d87aaee7bf667863 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 4 Nov 2023 14:35:40 +0100 Subject: [PATCH 22/28] Fixed Crash on lower end servers + Cleanup --- .../java/com/volmit/iris/core/ServerConfigurator.java | 5 ++--- .../com/volmit/iris/engine/safeguard/IrisSafeguard.java | 1 - .../com/volmit/iris/engine/safeguard/PerformanceSFG.java | 8 +------- .../com/volmit/iris/engine/safeguard/ServerBootSFG.java | 3 --- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java index 58a05d43c..98a5fc7be 100644 --- a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -61,13 +61,12 @@ public class ServerConfigurator { long tt = f.getLong("settings.timeout-time"); if (tt < TimeUnit.MINUTES.toSeconds(5)) { - Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(5) + " (5 minutes)"); + Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(20) + " (5 minutes)"); Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("settings.timeout-time", TimeUnit.MINUTES.toSeconds(5)); f.save(spigotConfig); } } - private static void increasePaperWatchdog() throws IOException, InvalidConfigurationException { File spigotConfig = new File("config/paper-global.yml"); FileConfiguration f = new YamlConfiguration(); @@ -75,7 +74,7 @@ public class ServerConfigurator { long tt = f.getLong("watchdog.early-warning-delay"); if (tt < TimeUnit.MINUTES.toMillis(3)) { - Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(3) + " (3 minutes)"); + Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(15) + " (3 minutes)"); Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("watchdog.early-warning-delay", TimeUnit.MINUTES.toMillis(3)); f.save(spigotConfig); diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java index 351c46e78..218fc4845 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/IrisSafeguard.java @@ -8,7 +8,6 @@ public class IrisSafeguard { public static void IrisSafeguardSystem() { Iris.info("Enabled Iris SafeGuard"); ServerBootSFG.BootCheck(); - PerformanceSFG.calculatePerformance(); } } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java index b97a7ec6b..35ea78a57 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/PerformanceSFG.java @@ -1,5 +1,6 @@ package com.volmit.iris.engine.safeguard; +import com.volmit.iris.core.IrisSettings; import oshi.SystemInfo; import oshi.hardware.GlobalMemory; @@ -9,13 +10,6 @@ public class PerformanceSFG { public static boolean lowPerformance = false; public static void calculatePerformance(){ - if (getCPUModel().contains("Xeon")){ - lowPerformance = true; - } - if (getProcessMemory() < 5999){ - lowPerformance = true; - } - // Todo RePixelated: Finish this } } diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index 25c4d3fae..e6e204472 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -37,15 +37,12 @@ public class ServerBootSFG { for (Plugin plugin : plugins) { pluginName = plugin.getName(); Boolean flag = incompatiblePlugins.get(pluginName); - Iris.info("T65: " + pluginName); if (flag != null && !flag) { count++; incompatiblePlugins.put(pluginName, true); } } - Iris.info("TEST: " + incompatiblePlugins.get("Multiverse-Core")); - StringJoiner joiner = new StringJoiner(", "); for (Map.Entry entry : incompatiblePlugins.entrySet()) { if (entry.getValue()) { From fdfb708ce08c6e29a0e357f7d8b50321ab81b6c0 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 4 Nov 2023 16:43:10 +0100 Subject: [PATCH 23/28] Removed FixUnstable CMD for now.. --- .../main/java/com/volmit/iris/core/commands/CommandIris.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index cb671c455..daba86596 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -181,6 +181,7 @@ public class CommandIris implements DecreeExecutor { IrisPackBenchmarking.runBenchmark(); } */ + /* /todo Different approach this feels useless atm @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) public void fixunstable() throws InterruptedException { if (unstablemode){ @@ -196,7 +197,7 @@ public class CommandIris implements DecreeExecutor { Iris.info(C.BLUE + "Iris is running stable.."); sender().sendMessage("Iris is running stable.."); } - } + } */ @Decree(description = "Print world height information", origin = DecreeOrigin.PLAYER) public void height() { From 8bf7451107f3da9eadb26aab01387fceef787c9e Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 4 Nov 2023 17:00:09 +0100 Subject: [PATCH 24/28] - Removed debug code - fixed unstableprompt --- .../iris/engine/safeguard/ServerBootSFG.java | 1 - .../iris/engine/safeguard/UtilsSFG.java | 58 ++++++++++--------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java index e6e204472..713b3cbef 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/ServerBootSFG.java @@ -67,7 +67,6 @@ public class ServerBootSFG { } allIncompatiblePlugins = joiner.toString(); - Iris.info("All Incompatible Plugins: " + allIncompatiblePlugins); safeguardPassed = (count == 0); if(!safeguardPassed){ diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index c19dbd0c5..65a06499b 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -61,37 +61,39 @@ public class UtilsSFG { } - public static void unstablePrompt(){ - Iris.info(""); - Iris.info(C.DARK_GRAY + "--==<" + C.RED +" IMPORTANT " + C.DARK_GRAY + ">==--"); - Iris.info(C.RED + "Iris is running in unstable mode what may cause the following issues."); - Iris.info(C.DARK_RED +"Server Issues"); - Iris.info(C.RED + "- Server wont boot"); - Iris.info(C.RED + "- Data Loss"); - Iris.info(C.RED + "- Unexpected behavior."); - Iris.info(C.RED + "- And More.."); - Iris.info(C.DARK_RED + "World Issues"); - Iris.info(C.RED + "- Worlds cant load due to corruption.."); - Iris.info(C.RED + "- Worlds may slowly corrupt till they wont be able to load."); - Iris.info(C.RED + "- World data loss."); - Iris.info(C.RED + "- And More.."); - Iris.info(C.DARK_RED + "ATTENTION:"+ C.RED + " While running iris in unstable mode you wont be eligible for support."); - Iris.info(C.DARK_RED + "CAUSE: " + C.RED + MSGIncompatibleWarnings()); - Iris.info(""); - if (IrisSettings.get().getGeneral().bootUnstable){ - Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); - } + public static void unstablePrompt() { + if (unstablemode) { + Iris.info(""); + Iris.info(C.DARK_GRAY + "--==<" + C.RED + " IMPORTANT " + C.DARK_GRAY + ">==--"); + Iris.info(C.RED + "Iris is running in unstable mode what may cause the following issues."); + Iris.info(C.DARK_RED + "Server Issues"); + Iris.info(C.RED + "- Server wont boot"); + Iris.info(C.RED + "- Data Loss"); + Iris.info(C.RED + "- Unexpected behavior."); + Iris.info(C.RED + "- And More.."); + Iris.info(C.DARK_RED + "World Issues"); + Iris.info(C.RED + "- Worlds cant load due to corruption.."); + Iris.info(C.RED + "- Worlds may slowly corrupt till they wont be able to load."); + Iris.info(C.RED + "- World data loss."); + Iris.info(C.RED + "- And More.."); + Iris.info(C.DARK_RED + "ATTENTION:" + C.RED + " While running iris in unstable mode you wont be eligible for support."); + Iris.info(C.DARK_RED + "CAUSE: " + C.RED + MSGIncompatibleWarnings()); + Iris.info(""); + if (IrisSettings.get().getGeneral().bootUnstable) { + Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); + } - if(!IrisSettings.get().getGeneral().isBootUnstable()){ - Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreUnstable to true if you wish to proceed."); - while (true) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - // No + if (!IrisSettings.get().getGeneral().isBootUnstable()) { + Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreUnstable to true if you wish to proceed."); + while (true) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // No + } } } + Iris.info(""); } - Iris.info(""); } } From 1905741a7cc8bc143aa1873cdc2ab3ab882d92a6 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 4 Nov 2023 17:30:22 +0100 Subject: [PATCH 25/28] Matched the CPU Brand color theme lol --- core/src/main/java/com/volmit/iris/Iris.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 7173c109b..6aa236a30 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -788,8 +788,13 @@ public class Iris extends VolmitPlugin implements Listener { } else { Iris.info("Server type & version: " + Bukkit.getVersion()); } Iris.info("Server OS: " + osName + " (" + osArch + ")"); - if(unstablemode) Iris.info("Server Cpu: " + C.RED + getCPUModel()); - if(!unstablemode) Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); + + if(unstablemode) Iris.info("Server Cpu: " + C.DARK_RED + getCPUModel()); + + if(getCPUModel().contains("Intel")) Iris.info("Server Cpu: " + C.BLUE + getCPUModel()); + if(getCPUModel().contains("Ryzen")) Iris.info("Server Cpu: " + C.RED + getCPUModel()); + if(!getCPUModel().contains("Intel") && !getCPUModel().contains("Ryzen")) Iris.info("Server Cpu: " + C.DARK_GRAY + getCPUModel()); + Iris.info("Process Threads: " + getCPUThreads()); Iris.info("Process Memory: " + getHardware.getProcessMemory() + " MB"); if (getHardware.getProcessMemory() < 5999) { From 50044816859659c10394bc29504505ff62f387b3 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 4 Nov 2023 20:04:05 +0100 Subject: [PATCH 26/28] - Fixed /iris remove for real this time lol - Changed it back to /iris instead of /iris worldmanager for easier access --- .../iris/core/commands/CommandIris.java | 66 +++++++++++++++++++ .../core/commands/CommandWorldManager.java | 45 ------------- .../com/volmit/iris/core/service/EditSVC.java | 4 +- 3 files changed, 69 insertions(+), 46 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index daba86596..dc9e2df82 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -22,9 +22,11 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisBenchmarking; +import com.volmit.iris.core.tools.IrisCreator; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; +import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.engine.safeguard.UtilsSFG; import com.volmit.iris.util.collection.KList; @@ -36,6 +38,7 @@ import com.volmit.iris.util.decree.annotations.Param; import com.volmit.iris.util.decree.specialhandlers.NullablePlayerHandler; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.mantle.MantleChunk; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.VolmitSender; @@ -49,9 +52,11 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import java.io.File; +import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import static com.volmit.iris.core.service.EditSVC.deletingWorld; import static com.volmit.iris.core.tools.IrisBenchmarking.inProgress; import static com.volmit.iris.engine.safeguard.IrisSafeguard.unstablemode; import static com.volmit.iris.engine.safeguard.ServerBootSFG.incompatiblePlugins; @@ -211,6 +216,67 @@ public class CommandIris implements DecreeExecutor { Iris.service(StudioSVC.class).open(sender(), 1337, "overworld"); } + @Decree(description = "Remove an Iris world", aliases = {"del", "rm", "delete"}, sync = true) + public void remove( + @Param(description = "The world to remove") + World world, + @Param(description = "Whether to also remove the folder (if set to false, just does not load the world)", defaultValue = "true") + boolean delete + ) { + if (!IrisToolbelt.isIrisWorld(world)) { + sender().sendMessage(C.RED + "This is not an Iris world. Iris worlds: " + String.join(", ", Bukkit.getServer().getWorlds().stream().filter(IrisToolbelt::isIrisWorld).map(World::getName).toList())); + return; + } + sender().sendMessage(C.GREEN + "Removing world: " + world.getName()); + try { + if (IrisToolbelt.removeWorld(world)) { + sender().sendMessage(C.GREEN + "Successfully removed " + world.getName() + " from bukkit.yml"); + } else { + sender().sendMessage(C.YELLOW + "Looks like the world was already removed from bukkit.yml"); + } + } catch (IOException e) { + sender().sendMessage(C.RED + "Failed to save bukkit.yml because of " + e.getMessage()); + e.printStackTrace(); + } + IrisToolbelt.evacuate(world, "Deleting world"); + deletingWorld = true; + Bukkit.unloadWorld(world, false); + int retries = 10; + if (delete) { + if (deleteDirectory(world.getWorldFolder())) { + sender().sendMessage(C.GREEN + "Successfully removed world folder"); + } else { + while(true){ + if (deleteDirectory(world.getWorldFolder())){ + sender().sendMessage(C.GREEN + "Successfully removed world folder"); + break; + } + sender().sendMessage(C.GREEN + "DEBUG1"); + retries--; + if (retries == 0){ + sender().sendMessage(C.RED + "Failed to remove world folder"); + break; + } + J.sleep(2000); + } + } + } + deletingWorld = false; + } + + public static boolean deleteDirectory(File dir) { + if (dir.isDirectory()) { + File[] children = dir.listFiles(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDirectory(children[i]); + if (!success) { + return false; + } + } + } + return dir.delete(); + } + @Decree(description = "Set aura spins") public void aura( @Param(description = "The h color value", defaultValue = "-20") diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandWorldManager.java b/core/src/main/java/com/volmit/iris/core/commands/CommandWorldManager.java index 7fd039764..1f82ea3d9 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandWorldManager.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandWorldManager.java @@ -147,51 +147,6 @@ public class CommandWorldManager implements DecreeExecutor { sender().sendMessage(C.GREEN + "Evacuating world" + world.getName()); IrisToolbelt.evacuate(world); } - @Decree(description = "Remove an Iris world", aliases = {"del", "rm", "delete"}, sync = true) - public void remove( - @Param(description = "The world to remove") - World world, - @Param(description = "Whether to also remove the folder (if set to false, just does not load the world)", defaultValue = "true") - boolean delete - ) { - if (!IrisToolbelt.isIrisWorld(world)) { - sender().sendMessage(C.RED + "This is not an Iris world. Iris worlds: " + String.join(", ", Bukkit.getServer().getWorlds().stream().filter(IrisToolbelt::isIrisWorld).map(World::getName).toList())); - return; - } - sender().sendMessage(C.GREEN + "Removing world: " + world.getName()); - try { - if (IrisToolbelt.removeWorld(world)) { - sender().sendMessage(C.GREEN + "Successfully removed " + world.getName() + " from bukkit.yml"); - } else { - sender().sendMessage(C.YELLOW + "Looks like the world was already removed from bukkit.yml"); - } - } catch (IOException e) { - sender().sendMessage(C.RED + "Failed to save bukkit.yml because of " + e.getMessage()); - e.printStackTrace(); - } - IrisToolbelt.evacuate(world, "Deleting world"); - Bukkit.unloadWorld(world, false); - if (delete) { - if (deleteDirectory(world.getWorldFolder())) { - sender().sendMessage(C.GREEN + "Successfully removed world folder"); - } else { - sender().sendMessage(C.RED + "Failed to remove world folder"); - } - } - - } - public static boolean deleteDirectory(File dir) { - if (dir.isDirectory()) { - File[] children = dir.listFiles(); - for (int i = 0; i < children.length; i++) { - boolean success = deleteDirectory(children[i]); - if (!success) { - return false; - } - } - } - return dir.delete(); - } boolean doesWorldExist(String worldName) { File worldContainer = Bukkit.getWorldContainer(); diff --git a/core/src/main/java/com/volmit/iris/core/service/EditSVC.java b/core/src/main/java/com/volmit/iris/core/service/EditSVC.java index 834b1712a..dc944f1f2 100644 --- a/core/src/main/java/com/volmit/iris/core/service/EditSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/EditSVC.java @@ -33,6 +33,7 @@ import org.bukkit.event.world.WorldUnloadEvent; public class EditSVC implements IrisService { private KMap editors; + public static boolean deletingWorld = false; @Override public void onEnable() { @@ -71,11 +72,12 @@ public class EditSVC implements IrisService { @EventHandler public void on(WorldUnloadEvent e) { - if (editors.containsKey(e.getWorld())) { + if (editors.containsKey(e.getWorld()) && !deletingWorld) { editors.remove(e.getWorld()).close(); } } + public void update() { for (World i : editors.k()) { if (M.ms() - editors.get(i).last() > 1000) { From 7afdbc2a533608ba96337b73113ecce7a06cab2e Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Mon, 6 Nov 2023 15:03:40 +0100 Subject: [PATCH 27/28] - Added Lazy pregen as an option --- .../iris/core/commands/CommandPregen.java | 83 ++++++++++++++----- .../core/pregenerator/IrisPregenerator.java | 5 -- .../core/pregenerator/LazyPregenerator.java | 44 +++++++++- .../iris/core/tools/IrisPackBenchmarking.java | 2 +- .../iris/engine/safeguard/UtilsSFG.java | 2 +- 5 files changed, 105 insertions(+), 31 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java index c92f373ce..b59687ce6 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; import com.volmit.iris.core.gui.PregeneratorJob; +import com.volmit.iris.core.pregenerator.LazyPregenerator; import com.volmit.iris.core.pregenerator.PregenTask; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.util.decree.DecreeExecutor; @@ -27,9 +28,12 @@ import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; import com.volmit.iris.util.format.C; import com.volmit.iris.util.math.Position2; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.util.Vector; +import java.io.File; + @Decree(name = "pregen", aliases = "pregenerate", description = "Pregenerate your Iris worlds!") public class CommandPregen implements DecreeExecutor { @Decree(description = "Pregenerate a world") @@ -39,29 +43,68 @@ public class CommandPregen implements DecreeExecutor { @Param(description = "The world to pregen", contextual = true) World world, @Param(aliases = "middle", description = "The center location of the pregen. Use \"me\" for your current location", defaultValue = "0,0") - Vector center + Vector center, + @Param(aliases = "method", description = "The pregen method that will get used. Lazy or Async", defaultValue = "async") + String method ) { - try { - if (sender().isPlayer() && access() == null) { - sender().sendMessage(C.RED + "The engine access for this world is null!"); - sender().sendMessage(C.RED + "Please make sure the world is loaded & the engine is initialized. Generate a new chunk, for example."); + if(method.equals("async") || method.equals("lazy")){ + if (method.equalsIgnoreCase("async")) { + try { + if (sender().isPlayer() && access() == null) { + sender().sendMessage(C.RED + "The engine access for this world is null!"); + sender().sendMessage(C.RED + "Please make sure the world is loaded & the engine is initialized. Generate a new chunk, for example."); + } + radius = Math.max(radius, 1024); + int w = (radius >> 9 + 1) * 2; + IrisToolbelt.pregenerate(PregenTask + .builder() + .center(new Position2(center.getBlockX() >> 9, center.getBlockZ() >> 9)) + .width(w) + .height(w) + .build(), world); + String msg = C.GREEN + "Pregen started in " + C.GOLD + world.getName() + C.GREEN + " of " + C.GOLD + (radius * 2) + C.GREEN + " by " + C.GOLD + (radius * 2) + C.GREEN + " blocks from " + C.GOLD + center.getX() + "," + center.getZ(); + sender().sendMessage(msg); + Iris.info(msg); + } catch (Throwable e) { + sender().sendMessage(C.RED + "Epic fail. See console."); + Iris.reportError(e); + e.printStackTrace(); + } } - radius = Math.max(radius, 1024); - int w = (radius >> 9 + 1) * 2; - IrisToolbelt.pregenerate(PregenTask - .builder() - .center(new Position2(center.getBlockX() >> 9, center.getBlockZ() >> 9)) - .width(w) - .height(w) - .build(), world); - String msg = C.GREEN + "Pregen started in " + C.GOLD + world.getName() + C.GREEN + " of " + C.GOLD + (radius * 2) + C.GREEN + " by " + C.GOLD + (radius * 2) + C.GREEN + " blocks from " + C.GOLD + center.getX() + "," + center.getZ(); - sender().sendMessage(msg); - Iris.info(msg); - } catch (Throwable e) { - sender().sendMessage(C.RED + "Epic fail. See console."); - Iris.reportError(e); - e.printStackTrace(); + if (method.equalsIgnoreCase("lazy")) { + String worldName = world.getName(); + try { + if (sender().isPlayer() && access() == null) { + sender().sendMessage(C.RED + "The engine access for this world is null!"); + sender().sendMessage(C.RED + "Please make sure the world is loaded & the engine is initialized. Generate a new chunk, for example."); + } + + LazyPregenerator.LazyPregenJob pregenJob = LazyPregenerator.LazyPregenJob.builder() + .world(worldName) + .healingPosition(0) + .healing(false) + .chunksPerMinute(999999999) + .radiusBlocks(radius) + .position(0) + .build(); + + LazyPregenerator pregenerator = new LazyPregenerator(pregenJob, new File("plugins/Iris/lazygen.json")); + pregenerator.start(); + + String msg = C.GREEN + "Pregen started in " + C.GOLD + worldName + C.GREEN + " of " + C.GOLD + (radius * 2) + C.GREEN + " by " + C.GOLD + (radius * 2) + C.GREEN + " blocks from " + C.GOLD + center.getX() + "," + center.getZ(); + sender().sendMessage(msg); + Iris.info(msg); + } catch (Throwable e) { + sender().sendMessage(C.RED + "Epic fail. See console."); + Iris.reportError(e); + e.printStackTrace(); + } + } + } else { + sender().sendMessage(C.RED + "Please use a valid method."); + } + } @Decree(description = "Stop the active pregeneration task", aliases = "x") diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java b/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java index a66ec20d6..513600a95 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -132,11 +132,6 @@ public class IrisPregenerator { ); } - public static void shareData(){ - long_generatedChunks = generated.get(); - long_totalChunks = totalChunks.get(); - } - public static long getLongGeneratedChunks() { return long_generatedChunks; } diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java b/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java index 065d03169..7deeb181e 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java @@ -2,9 +2,12 @@ package com.volmit.iris.core.pregenerator; import com.google.gson.Gson; import com.volmit.iris.Iris; +import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.Position2; +import com.volmit.iris.util.math.RollingSequence; import com.volmit.iris.util.math.Spiraler; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; @@ -20,6 +23,7 @@ import org.bukkit.event.world.WorldUnloadEvent; import java.io.File; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; public class LazyPregenerator extends Thread implements Listener { private final LazyPregenJob job; @@ -28,6 +32,11 @@ public class LazyPregenerator extends Thread implements Listener { private final World world; private final long rate; private final ChronoLatch latch; + private static AtomicInteger lazyGeneratedChunks; + private final AtomicInteger generatedLast; + private final AtomicInteger lazyTotalChunks; + private final AtomicLong startTime; + private final RollingSequence chunksPerSecond; public LazyPregenerator(LazyPregenJob job, File destination) { this.job = job; @@ -36,7 +45,15 @@ public class LazyPregenerator extends Thread implements Listener { }).count(); this.world = Bukkit.getWorld(job.getWorld()); this.rate = Math.round((1D / (job.chunksPerMinute / 60D)) * 1000D); - this.latch = new ChronoLatch(60000); + this.latch = new ChronoLatch(6000); + startTime = new AtomicLong(M.ms()); + chunksPerSecond = new RollingSequence(10); + lazyGeneratedChunks = new AtomicInteger(0); + generatedLast = new AtomicInteger(0); + lazyTotalChunks = new AtomicInteger(); + + int radius = job.getRadiusBlocks(); + lazyTotalChunks.set((int) Math.ceil(Math.pow((2.0 * radius) / 16, 2))); } public LazyPregenerator(File file) throws IOException { @@ -81,17 +98,26 @@ public class LazyPregenerator extends Thread implements Listener { public void tick() { if (latch.flip()) { + long eta = computeETA(); save(); - Iris.info("LazyGen: " + world.getName() + " RTT: " + Form.duration((Math.pow((job.radiusBlocks / 16D), 2) / job.chunksPerMinute) * 60 * 1000, 2)); + int secondGenerated = lazyGeneratedChunks.get() - generatedLast.get(); + generatedLast.set(lazyGeneratedChunks.get()); + secondGenerated = secondGenerated / 6; + chunksPerSecond.put(secondGenerated); + Iris.info("LazyGen: " + C.IRIS + world.getName() + C.RESET + " RTT: " + Form.f(lazyGeneratedChunks.get()) + " of " + Form.f(lazyTotalChunks.get()) + " " + Form.f((int) chunksPerSecond.getAverage()) + "/s ETA: " + Form.duration((double) eta, 2)); + //Iris.info("Debug: " + maxPosition); + //Iris.info("Debug1: " + job.getPosition()); + + // todo: Maxpos borked } - if (job.getPosition() >= maxPosition) { + if (lazyGeneratedChunks.get() >= lazyTotalChunks.get()) { if (job.isHealing()) { int pos = (job.getHealingPosition() + 1) % maxPosition; job.setHealingPosition(pos); tickRegenerate(getChunk(pos)); } else { - Iris.verbose("Completed Lazy Gen!"); + Iris.info("Completed Lazy Gen!"); interrupt(); } } else { @@ -101,6 +127,15 @@ public class LazyPregenerator extends Thread implements Listener { } } + private long computeETA() { + return (long) (lazyTotalChunks.get() > 1024 ? // Generated chunks exceed 1/8th of total? + // If yes, use smooth function (which gets more accurate over time since its less sensitive to outliers) + ((lazyTotalChunks.get() - lazyGeneratedChunks.get()) * ((double) (M.ms() - startTime.get()) / (double) lazyGeneratedChunks.get())) : + // If no, use quick function (which is less accurate over time but responds better to the initial delay) + ((lazyTotalChunks.get() - lazyGeneratedChunks.get()) / chunksPerSecond.getAverage()) * 1000 // + ); + } + private void tickGenerate(Position2 chunk) { if (PaperLib.isPaper()) { PaperLib.getChunkAtAsync(world, chunk.getX(), chunk.getZ(), true).thenAccept((i) -> Iris.verbose("Generated Async " + chunk)); @@ -108,6 +143,7 @@ public class LazyPregenerator extends Thread implements Listener { J.s(() -> world.getChunkAt(chunk.getX(), chunk.getZ())); Iris.verbose("Generated " + chunk); } + lazyGeneratedChunks.addAndGet(1); } private void tickRegenerate(Position2 chunk) { diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index ef454e30b..13577cc82 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -126,7 +126,7 @@ public class IrisPackBenchmarking { int x = 0; int z = 0; LazyPregenerator.LazyPregenJob pregenJob = LazyPregenerator.LazyPregenJob.builder() - .world("Benchmark") + //.world("Benchmark") .healingPosition(0) .healing(false) .chunksPerMinute(3200) diff --git a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java index 65a06499b..fa94e33a3 100644 --- a/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/engine/safeguard/UtilsSFG.java @@ -38,7 +38,7 @@ public class UtilsSFG { if (incompatiblePlugins.get("Dynmap")) { Iris.safeguard(C.RED + "Dynmap"); Iris.safeguard(C.RED + "- The plugin Dynmap is not compatible with the server."); - Iris.safeguard(C.RED + "- If you want to have a map plugin like Dynmap, consider Bluemap or LiveAtlas."); + Iris.safeguard(C.RED + "- If you want to have a map plugin like Dynmap, consider Bluemap."); } if (incompatiblePlugins.get("TerraformGenerator") || incompatiblePlugins.get("Stratos")) { Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); From ffcd2b41798c7d958ea96c551e508bc15cf3e2d1 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Mon, 6 Nov 2023 15:22:23 +0100 Subject: [PATCH 28/28] z --- .../main/java/com/volmit/iris/core/commands/CommandIris.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index dc9e2df82..2a4dd688a 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -187,7 +187,7 @@ public class CommandIris implements DecreeExecutor { } */ /* /todo Different approach this feels useless atm - @Decree(description = "Benchmark a pack", origin = DecreeOrigin.CONSOLE) + @Decree(description = "Check for instabilities", origin = DecreeOrigin.CONSOLE) public void fixunstable() throws InterruptedException { if (unstablemode){ sender().sendMessage(C.RED + "Incompatibilities are posted in console..");