From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kyle Wood <demonwav@gmail.com>
Date: Wed, 2 Dec 2020 21:58:45 -0800
Subject: [PATCH] Add warning for servers not running on Java 11


diff --git a/src/main/java/com/destroystokyo/paper/util/PaperJvmChecker.java b/src/main/java/com/destroystokyo/paper/util/PaperJvmChecker.java
new file mode 100644
index 0000000000000000000000000000000000000000..023123d52fbb458e6ee2d38e42c9651a5c7be728
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/util/PaperJvmChecker.java
@@ -0,0 +1,56 @@
+package com.destroystokyo.paper.util;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public final class PaperJvmChecker {
+
+    private PaperJvmChecker() {}
+
+    public static void checkJvm() {
+        final Logger logger = LogManager.getLogger();
+
+        final String javaVersion = System.getProperty("java.version");
+        final int dotIndex = javaVersion.indexOf('.');
+
+        if (javaVersion.startsWith("1.")) {
+            // definitely old
+            PaperJvmChecker.printWarning(javaVersion, logger);
+            return;
+        }
+
+        final int endIndex = dotIndex == -1 ? javaVersion.length() : dotIndex;
+        final String version = javaVersion.substring(0, endIndex);
+
+        final int javaVersionNum;
+        try {
+            javaVersionNum = Integer.parseInt(version);
+        } catch (final NumberFormatException e) {
+            logger.warn("Failed to determine Java version; Could not parse {}", version, e);
+            PaperJvmChecker.printWarning(javaVersion, logger);
+            return;
+        }
+
+        if (javaVersionNum < 11) {
+            PaperJvmChecker.printWarning(javaVersion, logger);
+        }
+    }
+
+    private static void printWarning(final String version, final Logger logger) {
+        logger.warn("************************************************************");
+        logger.warn("* WARNING - YOU ARE RUNNING AN OUTDATED VERSION OF JAVA.");
+        logger.warn("* PAPER WILL STOP BEING COMPATIBLE WITH THIS VERSION OF");
+        logger.warn("* JAVA WHEN MINECRAFT 1.17 IS RELEASED.");
+        logger.warn("*");
+        logger.warn("* Please update the version of Java you use to run Paper");
+        logger.warn("* to at least Java 11. When Paper for Minecraft 1.17 is");
+        logger.warn("* released support for versions of Java before 11 will");
+        logger.warn("* be dropped.");
+        logger.warn("*");
+        logger.warn("* Current Java version: " + version);
+        logger.warn("*");
+        logger.warn("* Check this forum post for more information: ");
+        logger.warn("*   https://papermc.io/java11");
+        logger.warn("************************************************************");
+    }
+}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 0108a1a68572df562349688e93f8134cb14d6116..12d781f4ae6a46d0885972035870d5b5b62f5b8b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -950,6 +950,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
                 LOGGER.info("Done ({})! For help, type \"help\"", doneTime);
                 // Paper end
 
+                com.destroystokyo.paper.util.PaperJvmChecker.checkJvm(); // Paper jvm version nag
+
                 org.spigotmc.WatchdogThread.tick(); // Paper
                 org.spigotmc.WatchdogThread.hasStarted = true; // Paper
                 Arrays.fill( recentTps, 20 );