--- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -28,7 +28,8 @@ public Main() {} - public static void main(String[] astring) { + public static void main(final OptionSet optionset) { // CraftBukkit - replaces main(String[] astring) + /* 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"); @@ -52,19 +53,21 @@ optionparser.printHelpOn(System.err); return; } + */ // CraftBukkit end + try { CrashReport.h(); DispenserRegistry.init(); DispenserRegistry.c(); SystemUtils.l(); java.nio.file.Path java_nio_file_path = Paths.get("server.properties"); - DedicatedServerSettings dedicatedserversettings = new DedicatedServerSettings(java_nio_file_path); + DedicatedServerSettings dedicatedserversettings = new DedicatedServerSettings(optionset); // CraftBukkit - CLI argument support dedicatedserversettings.save(); java.nio.file.Path java_nio_file_path1 = Paths.get("eula.txt"); EULA eula = new EULA(java_nio_file_path1); - if (optionset.has(optionspec1)) { + if (optionset.has("initSettings")) { // CraftBukkit Main.LOGGER.info("Initialized '{}' and '{}'", java_nio_file_path.toAbsolutePath(), java_nio_file_path1.toAbsolutePath()); return; } @@ -74,24 +77,42 @@ return; } - File file = new File((String) optionset.valueOf(optionspec9)); + File file = (File) optionset.valueOf("universe"); // CraftBukkit YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); UserCache usercache = new UserCache(gameprofilerepository, new File(file, MinecraftServer.b.getName())); - String s = (String) Optional.ofNullable(optionset.valueOf(optionspec10)).orElse(dedicatedserversettings.getProperties().levelName); + // CraftBukkit start + String s = (String) Optional.ofNullable(optionset.valueOf("world")).orElse(dedicatedserversettings.getProperties().levelName); Convertable convertable = Convertable.a(file.toPath()); - Convertable.ConversionSession convertable_conversionsession = convertable.c(s); + Convertable.ConversionSession convertable_conversionsession = convertable.c(s, WorldDimension.OVERWORLD); MinecraftServer.convertWorld(convertable_conversionsession); DataPackConfiguration datapackconfiguration = convertable_conversionsession.e(); - boolean flag = optionset.has(optionspec6); + boolean flag = optionset.has("safeMode"); if (flag) { Main.LOGGER.warn("Safe mode active, only vanilla datapack will be loaded"); } ResourcePackRepository resourcepackrepository = new ResourcePackRepository<>(ResourcePackLoader::new, new ResourcePackSource[]{new ResourcePackSourceVanilla(), new ResourcePackSourceFolder(convertable_conversionsession.getWorldFolder(SavedFile.DATAPACKS).toFile(), PackSource.c)}); + // CraftBukkit start + File bukkitDataPackFolder = new File(convertable_conversionsession.getWorldFolder(SavedFile.DATAPACKS).toFile(), "bukkit"); + if (!bukkitDataPackFolder.exists()) { + bukkitDataPackFolder.mkdirs(); + } + 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.getGameVersion().getPackVersion() + "\n" + + " }\n" + + "}\n", mcMeta, com.google.common.base.Charsets.UTF_8); + } catch (java.io.IOException ex) { + throw new RuntimeException("Could not initialize Bukkit datapack", ex); + } + // CraftBukkit end DataPackConfiguration datapackconfiguration1 = MinecraftServer.a(resourcepackrepository, datapackconfiguration == null ? DataPackConfiguration.a : datapackconfiguration, flag); CompletableFuture completablefuture = DataPackResources.a(resourcepackrepository.f(), CommandDispatcher.ServerType.DEDICATED, dedicatedserversettings.getProperties().functionPermissionLevel, SystemUtils.f(), Runnable::run); @@ -107,6 +128,7 @@ datapackresources.i(); IRegistryCustom.Dimension iregistrycustom_dimension = IRegistryCustom.b(); + /* RegistryReadOps registryreadops = RegistryReadOps.a((DynamicOps) DynamicOpsNBT.a, datapackresources.h(), (IRegistryCustom) iregistrycustom_dimension); Object object = convertable_conversionsession.a((DynamicOps) registryreadops, datapackconfiguration1); @@ -134,21 +156,32 @@ } convertable_conversionsession.a((IRegistryCustom) iregistrycustom_dimension, (SaveData) object); + */ final DedicatedServer dedicatedserver = (DedicatedServer) MinecraftServer.a((thread) -> { - DedicatedServer dedicatedserver1 = new DedicatedServer(thread, iregistrycustom_dimension, convertable_conversionsession, resourcepackrepository, datapackresources, object, dedicatedserversettings, DataConverterRegistry.a(), minecraftsessionservice, gameprofilerepository, usercache, WorldLoadListenerLogger::new); + DedicatedServer dedicatedserver1 = new DedicatedServer(optionset, datapackconfiguration1, thread, iregistrycustom_dimension, convertable_conversionsession, resourcepackrepository, datapackresources, null, dedicatedserversettings, DataConverterRegistry.a(), minecraftsessionservice, gameprofilerepository, usercache, WorldLoadListenerLogger::new); + /* dedicatedserver1.d((String) optionset.valueOf(optionspec8)); dedicatedserver1.setPort((Integer) optionset.valueOf(optionspec11)); dedicatedserver1.c(optionset.has(optionspec2)); dedicatedserver1.b((String) optionset.valueOf(optionspec12)); - boolean flag1 = !optionset.has(optionspec) && !optionset.valuesOf(nonoptionargumentspec).contains("nogui"); + */ + boolean flag1 = !optionset.has("nogui") && !optionset.nonOptionArguments().contains("nogui"); if (flag1 && !GraphicsEnvironment.isHeadless()) { dedicatedserver1.bb(); } + if (optionset.has("port")) { + int port = (Integer) optionset.valueOf("port"); + if (port > 0) { + dedicatedserver1.setPort(port); + } + } + return dedicatedserver1; }); + /* CraftBukkit start Thread thread = new Thread("Server Shutdown Thread") { public void run() { dedicatedserver.safeShutdown(true); @@ -157,14 +190,15 @@ thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(Main.LOGGER)); Runtime.getRuntime().addShutdownHook(thread); + */ // CraftBukkit end } catch (Exception exception1) { Main.LOGGER.fatal("Failed to start the minecraft server", exception1); } } - public static void convertWorld(Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, boolean flag, BooleanSupplier booleansupplier, ImmutableSet> immutableset) { - Main.LOGGER.info("Forcing world upgrade!"); + public static void convertWorld(Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, boolean flag, BooleanSupplier booleansupplier, ImmutableSet> immutableset) { // CraftBukkit + Main.LOGGER.info("Forcing world upgrade! {}", convertable_conversionsession.getLevelName()); // CraftBukkit WorldUpgrader worldupgrader = new WorldUpgrader(convertable_conversionsession, datafixer, immutableset, flag); IChatBaseComponent ichatbasecomponent = null;