--- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -61,8 +_,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface { static final Logger LOGGER = LogUtils.getLogger(); - private static final int CONVERSION_RETRY_DELAY_MS = 5000; - private static final int CONVERSION_RETRIES = 2; + // private static final int CONVERSION_RETRY_DELAY_MS = 5000; + // private static final int CONVERSION_RETRIES = 2; private final java.util.Queue serverCommandQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); // Paper - Perf: use a proper queue @Nullable private QueryThreadGs4 queryThreadGs4; @@ -105,47 +_,12 @@ public void run() { // CraftBukkit start if (!org.bukkit.craftbukkit.Main.useConsole) return; + // Plazma start - Improve code quality // Paper start - Use TerminalConsoleAppender - if (DedicatedServer.this.gui == null || System.console() != null) // Purpur - GUI Improvements - has no GUI or has console (did not double-click) + if (DedicatedServer.this.gui != null && System.console() == null) return; new com.destroystokyo.paper.console.PaperConsole(DedicatedServer.this).start(); - /* - jline.console.ConsoleReader bufferedreader = DedicatedServer.this.reader; - // MC-33041, SPIGOT-5538: if System.in is not valid due to javaw, then return - try { - System.in.available(); - } catch (IOException ex) { - return; - } - // CraftBukkit end - String string1; - try { - // CraftBukkit start - JLine disabling compatibility - while (!DedicatedServer.this.isStopped() && DedicatedServer.this.isRunning()) { - if (org.bukkit.craftbukkit.Main.useJline) { - string1 = bufferedreader.readLine(">", null); - } else { - string1 = bufferedreader.readLine(); - } - - // SPIGOT-5220: Throttle if EOF (ctrl^d) or stdin is /dev/null - if (string1 == null) { - try { - Thread.sleep(50L); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - continue; - } - if (string1.trim().length() > 0) { // Trim to filter lines which are just spaces - DedicatedServer.this.issueCommand(s, DedicatedServer.this.getServerCommandListener()); - } - // CraftBukkit end - } - } catch (IOException var4) { - DedicatedServer.LOGGER.error("Exception handling console input", (Throwable)var4); - } - */ - // Paper end + // Paper end - Use TerminalConsoleAppender + // Plazma end - Improve code quality } }; // CraftBukkit start - TODO: handle command-line logging arguments @@ -156,21 +_,7 @@ } global.addHandler(new org.bukkit.craftbukkit.util.ForwardLogHandler()); - // Paper start - Not needed with TerminalConsoleAppender - final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getRootLogger(); - /* - final org.apache.logging.log4j.core.Logger logger = ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()); - for (org.apache.logging.log4j.core.Appender appender : logger.getAppenders().values()) { - if (appender instanceof org.apache.logging.log4j.core.appender.ConsoleAppender) { - logger.removeAppender(appender); - } - } - - TerminalConsoleWriterThread writerThread = new TerminalConsoleWriterThread(System.out, this.reader); - this.reader.setCompletionHandler(new TerminalCompletionHandler(writerThread, this.reader.getCompletionHandler())); - writerThread.start(); - */ - // Paper end - Not needed with TerminalConsoleAppender + final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getRootLogger(); // Paper - Not needed with TCA // Plazma - Remove commented codes System.setOut(org.apache.logging.log4j.io.IoBuilder.forLogger(logger).setLevel(org.apache.logging.log4j.Level.INFO).buildPrintStream()); System.setErr(org.apache.logging.log4j.io.IoBuilder.forLogger(logger).setLevel(org.apache.logging.log4j.Level.WARN).buildPrintStream()); @@ -183,16 +_,6 @@ LOGGER.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); } - // Paper start - detect running as root - if (io.papermc.paper.util.ServerEnvironment.userIsRootOrAdmin()) { - LOGGER.warn("****************************"); - LOGGER.warn("YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED."); - LOGGER.warn("YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS."); - LOGGER.warn("FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/"); - LOGGER.warn("****************************"); - } - // Paper end - detect running as root - LOGGER.info("Loading properties"); DedicatedServerProperties properties = this.settings.getProperties(); if (this.isSingleplayer()) { @@ -208,6 +_,8 @@ org.spigotmc.SpigotConfig.init((java.io.File) this.options.valueOf("spigot-settings")); org.spigotmc.SpigotConfig.registerCommands(); // Spigot end + + // noinspection ResultOfMethodCallIgnored // Plazma - For preloading io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // Paper - load mappings for stacktrace deobf and etc. // Purpur start - Configurable void damage height and damage try { @@ -218,10 +_,27 @@ } org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur end - Configurable void damage height and damage + // Paper start - initialize global and world-defaults configuration this.paperConfigurations.initializeGlobalConfiguration(this.registryAccess()); this.paperConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess()); // Paper end - initialize global and world-defaults configuration + + // Plazma start - Configurable Plazma + this.plazmaConfigurations.initializeGlobalConfiguration(this.registryAccess()); + this.plazmaConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess()); + // Plazma end - Configurable Plazma + + // Paper start - detect running as root // Plazma start - Tweak console logging (moved down) + if (org.plazmamc.plazma.Options.global().consoleLogs.rootUserWarning && io.papermc.paper.util.ServerEnvironment.userIsRootOrAdmin()) { + LOGGER.warn("****************************"); + LOGGER.warn("YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED."); + LOGGER.warn("YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS."); + LOGGER.warn("FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/"); + LOGGER.warn("****************************"); + } + // Paper end - detect running as root // Plazma end - Tweak console logging (moved down) + this.server.spark.enableEarlyIfRequested(); // Paper - spark // Paper start - fix converting txt to json file; convert old users earlier after PlayerList creation but before file load/save if (this.convertOldUsers()) { @@ -234,16 +_,8 @@ io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics - /*// Purpur start - Purpur config files // Purpur - Configurable void damage height and damage - try { - org.purpurmc.purpur.PurpurConfig.init((java.io.File) options.valueOf("purpur-settings")); - } catch (Exception e) { - DedicatedServer.LOGGER.error("Unable to load server configuration", e); - return false; - } - org.purpurmc.purpur.PurpurConfig.registerCommands(); - */// Purpur end - Purpur config files // Purpur - Configurable void damage height and damage - com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now + // noinspection ResultOfMethodCallIgnored // Plazma - For preloading + com.destroystokyo.paper.VersionHistoryManager.initialize(options); // Paper - load version history now // Plazma - Add options to modify the configuration files this.setPvpAllowed(properties.pvp); this.setFlightAllowed(properties.allowFlight); @@ -287,8 +_,7 @@ LOGGER.warn("**** FAILED TO BIND TO PORT!"); LOGGER.warn("The exception was: {}", var10.toString()); LOGGER.warn("Perhaps a server is already running on that port?"); - if (true) throw new IllegalStateException("Failed to bind to port", var10); // Paper - Propagate failed to bind to port error - return false; + throw new IllegalStateException("Failed to bind to port", var10); // Paper - Propagate failed to bind to port error } // Purpur start - UPnP Port Forwarding if (org.purpurmc.purpur.PurpurConfig.useUPnP) { @@ -316,44 +_,33 @@ // Purpur end - UPnP Port Forwarding // CraftBukkit start - // this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up this.server.loadPlugins(); this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP); // CraftBukkit end - // Paper start - Add Velocity IP Forwarding Support - boolean usingProxy = org.spigotmc.SpigotConfig.bungee || io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled; - String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; - String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; - // Paper end - Add Velocity IP Forwarding Support - if (!this.usesAuthentication()) { - LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + // Plazma start - Tweak console logging + final boolean usingVelocity = io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled; + if (!this.usesAuthentication() + && org.plazmamc.plazma.Options.global().consoleLogs.offlineWarnings + && (!usingVelocity || !io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.onlineMode) + ) { + LOGGER.warn("********** SERVER IS RUNNING IN OFFLINE/INSECURE MODE! **********"); LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); - // Spigot start - // Paper start - Add Velocity IP Forwarding Support - if (usingProxy) { - LOGGER.warn("Whilst this makes it possible to use {}, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose.", proxyFlavor); - LOGGER.warn("Please see {} for further information.", proxyLink); - // Paper end - Add Velocity IP Forwarding Support + if (usingVelocity || org.spigotmc.SpigotConfig.bungee) { + LOGGER.warn("Whilst this makes it possible to use {}, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose.", usingVelocity ? "Velocity" : "BungeeCord"); + LOGGER.warn("Please see {} for further information.", usingVelocity ? "https://docs.papermc.io/velocity/security" : "https://www.spigotmc.org/wiki/firewall-guide/"); } else { LOGGER.warn("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); } - // Spigot end LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); - } - - // CraftBukkit start - /* - if (this.convertOldUsers()) { - this.getProfileCache().save(); - } - */ - // CraftBukkit end + LOGGER.warn("Or, if you understand exactly about this problem, and if you are prepared measures for it, change the \"console-logs.offline-warnings\" to \"false\" in the config/plazma-global.yml file."); + LOGGER.warn("This can suppress this warning, but you still need to be careful about related issues."); + } + // Plazma end - Tweak console logging if (!OldUsersConverter.serverReadyAfterUserconversion(this)) { return false; } else { - // this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // CraftBukkit - moved up this.debugSampleSubscriptionTracker = new DebugSampleSubscriptionTracker(this.getPlayerList()); this.tickTimeLogger = new RemoteSampleLogger( TpsDebugDimensions.values().length, this.debugSampleSubscriptionTracker, RemoteDebugSampleType.TICK_TIME @@ -380,14 +_,6 @@ this.rconThread = RconThread.create(this); } - if (false && this.getMaxTickLength() > 0L) { // Spigot - disable - Thread thread1 = new Thread(new ServerWatchdog(this)); - thread1.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandlerWithName(LOGGER)); - thread1.setName("Server Watchdog"); - thread1.setDaemon(true); - thread1.start(); - } - if (properties.enableJmxMonitoring) { MinecraftServerStatistics.registerJmxMonitoring(this); LOGGER.info("JMX monitoring enabled"); @@ -459,10 +_,6 @@ this.rconThread.stopNonBlocking(); // Paper - don't wait for remote connections } - if (this.queryThreadGs4 != null) { - // this.remoteStatusListener.stop(); // Paper - don't wait for remote connections - } - this.hasFullyShutdown = true; // Paper - Improved watchdog support System.exit(this.abnormalExit ? 70 : 0); // CraftBukkit // Paper - Improved watchdog support } @@ -728,7 +_,7 @@ private void waitForRetry() { try { Thread.sleep(5000L); - } catch (InterruptedException var2) { + } catch (InterruptedException ignore) { // Plazma - Fix IDE warning } } @@ -748,7 +_,7 @@ org.bukkit.plugin.Plugin[] plugins = this.server.getPluginManager().getPlugins(); result.append(this.server.getName()); - result.append(" on Bukkit "); + result.append(" on Plazma "); // Plazma - Rebrand result.append(this.server.getBukkitVersion()); if (plugins.length > 0 && this.server.getQueryPlugins()) { @@ -759,9 +_,9 @@ result.append("; "); } - result.append(plugins[i].getDescription().getName()); + result.append(plugins[i].getPluginMeta().getName()); // Plazma - Use modern method result.append(" "); - result.append(plugins[i].getDescription().getVersion().replaceAll(";", ",")); + result.append(plugins[i].getPluginMeta().getVersion().replaceAll(";", ",")); // Plazma - Use modern method } } @@ -876,7 +_,7 @@ private static ServerLinks createServerLinks(DedicatedServerSettings settings) { Optional optional = parseBugReportLink(settings.getProperties()); - return optional.map(uri -> new ServerLinks(List.of(ServerLinks.KnownLinkType.BUG_REPORT.create(uri)))).orElse(ServerLinks.EMPTY); + return optional.map(uri -> new ServerLinks(List.of(ServerLinks.KnownLinkType.BUG_REPORT.create(uri)))).orElse(ServerLinks.EMPTY); // Plazma - Remove unnecessary type parameter } private static Optional parseBugReportLink(DedicatedServerProperties properties) {