--- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -63,40 +_,37 @@ public class Main { private static final Logger LOGGER = LogUtils.getLogger(); - @SuppressForbidden( - reason = "System.out needed before bootstrap" - ) + @SuppressWarnings("ConfusingMainMethod") // Plazma - replaced with org.bukkit.craftbukkit.Main#main + @SuppressForbidden(reason = "System.out needed before bootstrap") @DontObfuscate public static void main(final OptionSet optionSet) { // CraftBukkit - replaces main(String[] args) io.papermc.paper.util.LogManagerShutdownThread.hook(); // Paper - Improved watchdog support SharedConstants.tryDetectVersion(); - /* CraftBukkit start - Replace everything - OptionParser optionParser = new OptionParser(); - OptionSpec optionSpec = optionParser.accepts("nogui"); - OptionSpec optionSpec1 = optionParser.accepts("initSettings", "Initializes 'server.properties' and 'eula.txt', then quits"); - OptionSpec optionSpec2 = optionParser.accepts("demo"); - OptionSpec optionSpec3 = optionParser.accepts("bonusChest"); - OptionSpec optionSpec4 = optionParser.accepts("forceUpgrade"); - OptionSpec optionSpec5 = optionParser.accepts("eraseCache"); - OptionSpec optionSpec6 = optionParser.accepts("recreateRegionFiles"); - OptionSpec optionSpec7 = optionParser.accepts("safeMode", "Loads level with vanilla datapack only"); - OptionSpec optionSpec8 = optionParser.accepts("help").forHelp(); - OptionSpec optionSpec9 = optionParser.accepts("universe").withRequiredArg().defaultsTo("."); - OptionSpec optionSpec10 = optionParser.accepts("world").withRequiredArg(); - OptionSpec optionSpec11 = optionParser.accepts("port").withRequiredArg().ofType(Integer.class).defaultsTo(-1); - OptionSpec optionSpec12 = optionParser.accepts("serverId").withRequiredArg(); - OptionSpec optionSpec13 = optionParser.accepts("jfrProfile"); - OptionSpec optionSpec14 = optionParser.accepts("pidFile").withRequiredArg().withValuesConvertedBy(new PathConverter()); - OptionSpec optionSpec15 = optionParser.nonOptions(); try { - OptionSet optionSet = optionParser.parse(args); - if (optionSet.has(optionSpec8)) { - optionParser.printHelpOn(System.err); - return; + // Plazma start - Branding + System.out.println(""" + \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s + \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ + \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ + \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ + \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ + \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m + """); + // Plazma end - Branding + + // Plazma start - Warn on startup + if (!org.plazmamc.plazma.Options.NO_WARN) { + LOGGER.warn("WARNING! Plazma may cause unexpected problems, so be sure to test it thoroughly before using it on a public server."); + if (!org.plazmamc.plazma.Options.NO_WARN_DEV) { + LOGGER.error("*********************** CAUTION ***********************"); + LOGGER.error("This version is a development version of Plazma."); + LOGGER.error("Nobody knows what kind of problem you're going to have, and there's always the possibility of unexpected problems."); + LOGGER.error("Never use this version on a public server, and after you've tested it enough before using it!"); + LOGGER.error("*******************************************************"); + } } - */ // CraftBukkit end - try { + // Plazma end - Warn on startup Path path = (Path) optionSet.valueOf("pidFile"); // CraftBukkit if (path != null) { @@ -243,12 +_,12 @@ } File mcMeta = new File(bukkitDataPackFolder, "pack.mcmeta"); try { - com.google.common.io.Files.write("{\n" - + " \"pack\": {\n" - + " \"description\": \"Data pack for resources provided by Bukkit plugins\",\n" - + " \"pack_format\": " + SharedConstants.getCurrentVersion().getPackVersion(net.minecraft.server.packs.PackType.SERVER_DATA) + "\n" - + " }\n" - + "}\n", mcMeta, com.google.common.base.Charsets.UTF_8); + com.google.common.io.Files.asCharSink(mcMeta, com.google.common.base.Charsets.UTF_8).write("{\n" + + " \"pack\": {\n" + + " \"description\": \"Data pack for resources provided by Bukkit plugins\",\n" + + " \"pack_format\": " + SharedConstants.getCurrentVersion().getPackVersion(net.minecraft.server.packs.PackType.SERVER_DATA) + "\n" + + " }\n" + + "}\n"); } catch (java.io.IOException ex) { throw new RuntimeException("Could not initialize Bukkit datapack", ex); } @@ -258,75 +_,53 @@ WorldStem worldStem; try { WorldLoader.InitConfig initConfig = loadOrCreateConfig(dedicatedServerSettings.getProperties(), dynamic, hasOptionSpec, packRepository); - worldStem = Util.blockUntilDone( - executor -> WorldLoader.load( - initConfig, - context -> { - worldLoader.set(context); // CraftBukkit - Registry registry = context.datapackDimensions().lookupOrThrow(Registries.LEVEL_STEM); - if (dynamic != null) { - LevelDataAndDimensions levelDataAndDimensions = LevelStorageSource.getLevelDataAndDimensions( - dynamic, context.dataConfiguration(), registry, context.datapackWorldgen() - ); - return new WorldLoader.DataLoadOutput<>( - levelDataAndDimensions.worldData(), levelDataAndDimensions.dimensions().dimensionsRegistryAccess() - ); - } else { - LOGGER.info("No existing world data, creating new world"); - LevelSettings levelSettings; - WorldOptions worldOptions; - WorldDimensions worldDimensions; - if (optionSet.has("demo")) { // CraftBukkit - levelSettings = MinecraftServer.DEMO_SETTINGS; - worldOptions = WorldOptions.DEMO_OPTIONS; - worldDimensions = WorldPresets.createNormalWorldDimensions(context.datapackWorldgen()); - } else { - DedicatedServerProperties properties = dedicatedServerSettings.getProperties(); - levelSettings = new LevelSettings( - properties.levelName, - properties.gamemode, - properties.hardcore, - properties.difficulty, - false, - new GameRules(context.dataConfiguration().enabledFeatures()), - context.dataConfiguration() - ); - worldOptions = optionSet.has("bonusChest") ? properties.worldOptions.withBonusChest(true) : properties.worldOptions; // CraftBukkit - worldDimensions = properties.createDimensions(context.datapackWorldgen()); - } - - WorldDimensions.Complete complete = worldDimensions.bake(registry); - Lifecycle lifecycle = complete.lifecycle().add(context.datapackWorldgen().allRegistriesLifecycle()); - return new WorldLoader.DataLoadOutput<>( - new PrimaryLevelData(levelSettings, worldOptions, complete.specialWorldProperty(), lifecycle), - complete.dimensionsRegistryAccess() - ); - } - }, - WorldStem::new, - Util.backgroundExecutor(), - executor - ) - ) - .get(); - } catch (Exception var39) { - LOGGER.warn( - "Failed to load datapacks, can't proceed with server load. You can either fix your datapacks or reset to vanilla with --safeMode", - (Throwable)var39 - ); + worldStem = Util.blockUntilDone((executor) -> WorldLoader.load(initConfig, (context) -> { + worldLoader.set(context); // CraftBukkit + Registry registry = context.datapackDimensions().lookupOrThrow(Registries.LEVEL_STEM); + if (dynamic != null) { + LevelDataAndDimensions levelDataAndDimensions = LevelStorageSource.getLevelDataAndDimensions( + dynamic, context.dataConfiguration(), registry, context.datapackWorldgen() + ); + return new WorldLoader.DataLoadOutput<>( + levelDataAndDimensions.worldData(), levelDataAndDimensions.dimensions().dimensionsRegistryAccess() + ); + } + + LOGGER.info("No existing world data, creating new world"); + LevelSettings levelSettings; + WorldOptions worldOptions; + WorldDimensions worldDimensions; + if (optionSet.has("demo")) { // CraftBukkit + levelSettings = MinecraftServer.DEMO_SETTINGS; + worldOptions = WorldOptions.DEMO_OPTIONS; + worldDimensions = WorldPresets.createNormalWorldDimensions(context.datapackWorldgen()); + } else { + DedicatedServerProperties properties = dedicatedServerSettings.getProperties(); + levelSettings = new LevelSettings( + properties.levelName, + properties.gamemode, + properties.hardcore, + properties.difficulty, + false, + new GameRules(context.dataConfiguration().enabledFeatures()), + context.dataConfiguration() + ); + worldOptions = optionSet.has("bonusChest") ? properties.worldOptions.withBonusChest(true) : properties.worldOptions; // CraftBukkit + worldDimensions = properties.createDimensions(context.datapackWorldgen()); + } + + WorldDimensions.Complete complete = worldDimensions.bake(registry); + Lifecycle lifecycle = complete.lifecycle().add(context.datapackWorldgen().allRegistriesLifecycle()); + return new WorldLoader.DataLoadOutput<>( + new PrimaryLevelData(levelSettings, worldOptions, complete.specialWorldProperty(), lifecycle), + complete.dimensionsRegistryAccess() + ); + }, WorldStem::new, Util.backgroundExecutor(), executor)).get(); + } catch (final Exception e) { // Plazma + LOGGER.warn("Failed to load datapacks, can't proceed with server load. You can either fix your datapacks or reset to vanilla with --safeMode", e); // Plazma return; } - /* - RegistryAccess.Frozen frozen = worldStem.registries().compositeAccess(); - boolean hasOptionSpec1 = optionSet.has(optionSpec6); - if (optionSet.has(optionSpec4) || hasOptionSpec1) { - forceUpgrade(levelStorageAccess, DataFixers.getDataFixer(), optionSet.has(optionSpec5), () -> true, frozen, hasOptionSpec1); - } - - WorldData worldData = worldStem.worldData(); - levelStorageAccess.saveDataTag(frozen, worldData); - */ Class.forName(net.minecraft.world.entity.npc.VillagerTrades.class.getName()); // Paper - load this sync so it won't fail later async final DedicatedServer dedicatedServer = MinecraftServer.spin( thread1 -> { @@ -343,18 +_,12 @@ services, LoggerChunkProgressListener::createFromGameruleRadius ); - /* - dedicatedServer1.setPort(optionSet.valueOf(optionSpec11)); - */ // Paper start if (optionSet.has("serverId")) { dedicatedServer1.setId((String) optionSet.valueOf("serverId")); } dedicatedServer1.setDemo(optionSet.has("demo")); // Paper end - /* - dedicatedServer1.setId(optionSet.valueOf(optionSpec12)); - */ boolean flag = !optionSet.has("nogui") && !optionSet.nonOptionArguments().contains("nogui"); if (flag && !GraphicsEnvironment.isHeadless()) { dedicatedServer1.showGui(); @@ -370,16 +_,6 @@ return dedicatedServer1; } ); - /* CraftBukkit start - Thread thread = new Thread("Server Shutdown Thread") { - @Override - public void run() { - dedicatedServer.halt(true); - } - }; - thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER)); - Runtime.getRuntime().addShutdownHook(thread); - */ // CraftBukkit end } catch (Exception var42) { LOGGER.error(LogUtils.FATAL_MARKER, "Failed to start the minecraft server", (Throwable)var42); } @@ -443,7 +_,7 @@ } else { try { Thread.sleep(1000L); - } catch (InterruptedException var12) { + } catch (InterruptedException ignore) { // Plazma - Fix IDE warning } } }