From 7ce219a6a866f1cf71d2fb813447b2e3e5814195 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Sat, 16 Dec 2023 13:45:21 +0100 Subject: [PATCH] - Added warning mode - ignoreUnstable Changed to ignoreBootMode --- core/src/main/java/com/volmit/iris/Iris.java | 38 ++++++++-- .../com/volmit/iris/core/IrisSettings.java | 2 +- .../iris/core/commands/CommandIris.java | 17 +---- .../iris/core/safeguard/IrisSafeguard.java | 1 + .../{UnstableModeSFG.java => ModesSFG.java} | 32 +++++++-- .../iris/core/safeguard/ServerBootSFG.java | 72 ++++++++++++++----- .../volmit/iris/core/safeguard/UtilsSFG.java | 27 ++++--- 7 files changed, 136 insertions(+), 53 deletions(-) rename core/src/main/java/com/volmit/iris/core/safeguard/{UnstableModeSFG.java => ModesSFG.java} (62%) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 274eb598e..020756d42 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -95,7 +95,7 @@ import java.net.URL; import java.util.Date; import java.util.Map; -import static com.volmit.iris.core.safeguard.IrisSafeguard.unstablemode; +import static com.volmit.iris.core.safeguard.IrisSafeguard.*; import static com.volmit.iris.core.safeguard.ServerBootSFG.passedserversoftware; import static com.volmit.iris.util.misc.getHardware.getCPUModel; import static com.volmit.iris.util.misc.getHardware.getCPUThreads; @@ -592,9 +592,11 @@ public class Iris extends VolmitPlugin implements Listener { 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 + ": "; + if (warningmode) { + return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.GOLD + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; } + return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.IRIS + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; + } private boolean setupChecks() { @@ -741,6 +743,9 @@ public class Iris extends VolmitPlugin implements Listener { 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()}; } + if (warningmode) { + info = new String[]{"", "", "", "", "", padd2 + C.GOLD + " Iris", padd2 + C.GRAY + " by " + C.GOLD + "Volmit Software", padd2 + C.GRAY + " v" + C.GOLD + getDescription().getVersion()}; + } String[] splashstable = { padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", @@ -769,8 +774,27 @@ public class Iris extends VolmitPlugin implements Listener { padd + C.GRAY + "" + C.RED + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@" }; - String[] splash = unstablemode ? splashunstable : splashstable; // Choose the appropriate splash array based on unstablemode - + String[] splashwarning = { + padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", + padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.GOLD + " .(((()))). ", + padd + C.GRAY + "@@@&&&&&&&&" + C.DARK_GRAY + "&&&&&" + C.GOLD + " .((((((())))))). ", + padd + C.GRAY + "@@@&&&&&" + C.DARK_GRAY + "&&&&&&&" + C.GOLD + " ((((((((())))))))) " + C.GRAY + " @", + padd + C.GRAY + "@@@&&&&" + C.DARK_GRAY + "@@@@@&" + C.GOLD + " ((((((((-))))))))) " + C.GRAY + " @@", + padd + C.GRAY + "@@@&&" + C.GOLD + " ((((((({ })))))))) " + C.GRAY + " &&@@@", + padd + C.GRAY + "@@" + C.GOLD + " ((((((((-))))))))) " + C.DARK_GRAY + "&@@@@@" + C.GRAY + "&&&&@@@", + padd + C.GRAY + "@" + C.GOLD + " ((((((((())))))))) " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&@@@", + padd + C.GRAY + "" + C.GOLD + " '((((((()))))))' " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&&@@@", + padd + C.GRAY + "" + C.GOLD + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", + padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@" + }; + String[] splash; + if (unstablemode) { + splash = splashunstable; + } else if (warningmode) { + splash = splashwarning; + } else { + splash = splashstable; + } OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); String osArch = osBean.getArch(); String osName = osBean.getName(); @@ -788,6 +812,9 @@ public class Iris extends VolmitPlugin implements Listener { Iris.info("Server OS: " + osName + " (" + osArch + ")"); try { + if (warningmode){ + Iris.info("Server Cpu: " + C.GOLD + getCPUModel()); + } else { if(unstablemode){ Iris.info("Server Cpu: " + C.DARK_RED + getCPUModel()); } else { @@ -801,6 +828,7 @@ public class Iris extends VolmitPlugin implements Listener { Iris.info("Server Cpu: " + C.GRAY + getCPUModel()); } } + } } catch (Exception e){ Iris.info("Server Cpu: " + C.DARK_RED + "Failed"); } 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 60b691807..20e11ceca 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -148,7 +148,7 @@ public class IrisSettings { @Data public static class IrisSettingsGeneral { - public boolean bootUnstable = false; + public boolean ignoreBootMode = false; public boolean useIntegratedChunkHandler = false; public boolean commandSounds = true; public boolean debug = false; 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 76c2af063..dda9d8d45 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 @@ -23,40 +23,29 @@ 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.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.core.safeguard.UtilsSFG; -import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; import com.volmit.iris.util.decree.annotations.Decree; 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.parallel.BurstExecutor; -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 org.bukkit.Bukkit; -import org.bukkit.Chunk; import org.bukkit.World; 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.core.safeguard.IrisSafeguard.unstablemode; -import static com.volmit.iris.core.safeguard.ServerBootSFG.incompatiblePlugins; +import static com.volmit.iris.core.safeguard.ServerBootSFG.incompatibilities; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") public class CommandIris implements DecreeExecutor { @@ -85,7 +74,7 @@ public class CommandIris implements DecreeExecutor { long seed ) { if(sender() instanceof Player) { - if (incompatiblePlugins.get("Multiverse-Core")) { + if (incompatibilities.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 + "----------------------------------------------------------------"); @@ -93,7 +82,7 @@ public class CommandIris implements DecreeExecutor { sender().sendMessage(C.RED + UtilsSFG.MSGIncompatibleWarnings()); sender().sendMessage(C.RED + "----------------------------------------------------------------"); } - if (unstablemode && !incompatiblePlugins.get("Multiverse-Core")) { + if (unstablemode && !incompatibilities.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 + "----------------------------------------------------------------"); diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java index 2c06eef8e..d2d9f7a61 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java @@ -4,6 +4,7 @@ import com.volmit.iris.Iris; public class IrisSafeguard { public static boolean unstablemode = false; + public static boolean warningmode = false; public static boolean stablemode = false; public static void IrisSafeguardSystem() { Iris.info("Enabled Iris SafeGuard"); diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/UnstableModeSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/ModesSFG.java similarity index 62% rename from core/src/main/java/com/volmit/iris/core/safeguard/UnstableModeSFG.java rename to core/src/main/java/com/volmit/iris/core/safeguard/ModesSFG.java index 3d3f5c190..299690fb2 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/UnstableModeSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/ModesSFG.java @@ -4,12 +4,17 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.format.C; -public class UnstableModeSFG { +public class ModesSFG { public static void selectMode(){ if (IrisSafeguard.unstablemode) { Iris.safeguard(C.DARK_RED + "Iris is running in Unstable Mode"); unstable(); - } else { + } + if (IrisSafeguard.warningmode) { + Iris.safeguard(C.GOLD + "Iris is running in Warning Mode"); + warning(); + } + if (IrisSafeguard.stablemode) { stable(); } } @@ -38,10 +43,10 @@ public class UnstableModeSFG { Iris.info(C.DARK_RED + "ATTENTION: " + C.RED + "While running Iris in unstable mode, you won't be eligible for support."); Iris.info(C.DARK_RED + "CAUSE: " + C.RED + UtilsSFG.MSGIncompatibleWarnings()); - if (IrisSettings.get().getGeneral().bootUnstable) { + if (IrisSettings.get().getGeneral().ignoreBootMode) { Iris.info(C.DARK_RED + "Boot Unstable is set to true, continuing with the startup process."); } else { - Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreUnstable to true if you wish to proceed."); + Iris.info(C.DARK_RED + "Go to plugins/iris/settings.json and set ignoreBootMode to true if you wish to proceed."); while (true) { try { Thread.sleep(1000); @@ -53,4 +58,23 @@ public class UnstableModeSFG { Iris.info(""); } } + + public static void warning() { + + UtilsSFG.printIncompatibleWarnings(); + + if (IrisSafeguard.warningmode) { + Iris.info(""); + Iris.info(C.DARK_GRAY + "--==<" + C.GOLD + " IMPORTANT " + C.DARK_GRAY + ">==--"); + Iris.info(C.GOLD + "Iris is running in warning mode which may cause the following issues:"); + Iris.info(C.YELLOW + "- Data Loss"); + Iris.info(C.YELLOW + "- Errors"); + Iris.info(C.YELLOW + "- Broken worlds"); + Iris.info(C.YELLOW + "- Unexpected behavior."); + Iris.info(C.YELLOW + "- And perhaps further complications."); + Iris.info(C.GOLD + "ATTENTION: " + C.YELLOW + "While running Iris in unstable mode, you won't be eligible for support."); + Iris.info(C.GOLD + "CAUSE: " + C.YELLOW + UtilsSFG.MSGIncompatibleWarnings()); + Iris.info(""); + } + } } diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java index 02047f315..642fb103a 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java @@ -6,17 +6,17 @@ import com.volmit.iris.core.nms.v1X.NMSBinding1X; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; -import javax.tools.ToolProvider; +import java.io.File; import java.util.*; import static com.volmit.iris.Iris.getJavaVersion; import static com.volmit.iris.Iris.instance; -import static com.volmit.iris.core.safeguard.IrisSafeguard.stablemode; -import static com.volmit.iris.core.safeguard.IrisSafeguard.unstablemode; +import static com.volmit.iris.core.safeguard.IrisSafeguard.*; public class ServerBootSFG { - public static final Map incompatiblePlugins = new HashMap<>(); + public static final Map incompatibilities = new HashMap<>(); public static boolean isJDK17 = true; + public static boolean isJRE = false; public static boolean unsuportedversion = false; protected static boolean safeguardPassed; public static boolean passedserversoftware = true; @@ -24,31 +24,31 @@ public class ServerBootSFG { protected static byte severityLow; protected static byte severityMedium; protected static byte severityHigh; - public static String allIncompatiblePlugins; + public static String allIncompatibilities; public static void BootCheck() { Iris.info("Checking for possible conflicts.."); org.bukkit.plugin.PluginManager pluginManager = Bukkit.getPluginManager(); Plugin[] plugins = pluginManager.getPlugins(); - incompatiblePlugins.clear(); - incompatiblePlugins.put("Multiverse-Core", false); - incompatiblePlugins.put("Dynmap", false); - incompatiblePlugins.put("TerraformGenerator", false); - incompatiblePlugins.put("Stratos", false); + incompatibilities.clear(); + incompatibilities.put("Multiverse-Core", false); + incompatibilities.put("Dynmap", false); + incompatibilities.put("TerraformGenerator", false); + incompatibilities.put("Stratos", false); String pluginName; for (Plugin plugin : plugins) { pluginName = plugin.getName(); - Boolean flag = incompatiblePlugins.get(pluginName); + Boolean flag = incompatibilities.get(pluginName); if (flag != null && !flag) { severityHigh++; - incompatiblePlugins.put(pluginName, true); + incompatibilities.put(pluginName, true); } } StringJoiner joiner = new StringJoiner(", "); - for (Map.Entry entry : incompatiblePlugins.entrySet()) { + for (Map.Entry entry : incompatibilities.entrySet()) { if (entry.getValue()) { joiner.add(entry.getKey()); } @@ -64,19 +64,25 @@ public class ServerBootSFG { joiner.add("Server Software"); severityHigh++; } + if (INMS.get() instanceof NMSBinding1X) { unsuportedversion = true; joiner.add("Unsupported Minecraft Version"); severityHigh++; } - boolean jdk = System.getProperty("java.compiler") != null; - if(getJavaVersion() != 17 || !jdk) { + if(getJavaVersion() != 17) { isJDK17 = false; + joiner.add("Unsupported Java version"); + severityMedium++; + } + if(!isJDK()) { + isJRE = true; + joiner.add("Unsupported JDK"); severityMedium++; } - allIncompatiblePlugins = joiner.toString(); + allIncompatibilities = joiner.toString(); safeguardPassed = (severityHigh == 0 && severityMedium == 0 && severityLow == 0); count = severityHigh + severityMedium + severityLow; @@ -85,8 +91,38 @@ public class ServerBootSFG { Iris.safeguard("Stable mode has been activated."); } if(!safeguardPassed){ - unstablemode = true; - Iris.safeguard("Unstable mode has been activated."); + if (severityMedium >= 1 && severityHigh == 0) { + warningmode = true; + Iris.safeguard("Warning mode has been activated."); + } + if (severityHigh >= 1) { + unstablemode = true; + Iris.safeguard("Unstable mode has been activated."); + } } } + + public static boolean isJDK() { + String path = System.getProperty("sun.boot.library.path"); + if(path != null) { + String javacPath = ""; + if(path.endsWith(File.separator + "bin")) { + javacPath = path; + } else { + int libIndex = path.lastIndexOf(File.separator + "lib"); + if (libIndex > 0) { + javacPath = path.substring(0, libIndex) + File.separator + "bin"; + } + } + if (checkJavac(javacPath)) + return true; + } + path = System.getProperty("java.home"); + return path != null && checkJavac(path + File.separator + "bin"); + } + + private static boolean checkJavac(String path) { + return !path.isEmpty() && (new File(path, "javac").exists() || new File(path, "javac.exe").exists()); + } + } diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java index 93be5617d..8b94006c8 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/UtilsSFG.java @@ -5,7 +5,7 @@ import com.volmit.iris.util.format.C; public class UtilsSFG { public static void splash(){ - UnstableModeSFG.selectMode(); + ModesSFG.selectMode(); } public static void printIncompatibleWarnings(){ @@ -14,19 +14,24 @@ public class UtilsSFG { if (ServerBootSFG.safeguardPassed) { Iris.safeguard(C.BLUE + "0 Conflicts found"); } else { - Iris.safeguard(C.DARK_RED + "" + ServerBootSFG.count + " Conflicts found"); + if (IrisSafeguard.unstablemode) { + Iris.safeguard(C.DARK_RED + "" + ServerBootSFG.count + " Conflicts found"); + } + if (IrisSafeguard.warningmode) { + Iris.safeguard(C.YELLOW + "" + ServerBootSFG.count + " Conflicts found"); + } - if (ServerBootSFG.incompatiblePlugins.get("Multiverse-Core")) { + if (ServerBootSFG.incompatibilities.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 (ServerBootSFG.incompatiblePlugins.get("Dynmap")) { + if (ServerBootSFG.incompatibilities.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."); } - if (ServerBootSFG.incompatiblePlugins.get("TerraformGenerator") || ServerBootSFG.incompatiblePlugins.get("Stratos")) { + if (ServerBootSFG.incompatibilities.get("TerraformGenerator") || ServerBootSFG.incompatibilities.get("Stratos")) { Iris.safeguard(C.YELLOW + "Terraform Generator / Stratos"); Iris.safeguard(C.YELLOW + "- Iris is not compatible with other worldgen plugins."); } @@ -39,17 +44,17 @@ public class UtilsSFG { Iris.safeguard(C.RED + "- Please consider using Paper or Purpur instead."); } if (!ServerBootSFG.isJDK17) { - Iris.safeguard(C.YELLOW + "Unsupported Server JDK"); - if (Iris.getJavaVersion() == 17) { - Iris.safeguard(C.YELLOW + "- Please consider using JDK 17 Instead of JRE " + Iris.getJavaVersion()); - } else { + Iris.safeguard(C.YELLOW + "Unsupported java version"); Iris.safeguard(C.YELLOW + "- Please consider using JDK 17 Instead of JDK " + Iris.getJavaVersion()); - } + } + if (!ServerBootSFG.isJRE) { + Iris.safeguard(C.YELLOW + "Unsupported Server JDK"); + Iris.safeguard(C.YELLOW + "- Please consider using JDK 17 Instead of JRE " + Iris.getJavaVersion()); } } } public static String MSGIncompatibleWarnings() { - return ServerBootSFG.allIncompatiblePlugins; + return ServerBootSFG.allIncompatibilities; } }