From 709b003fee95132be07681f6af7d848e87bbfd17 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 26 Jun 2020 12:24:35 +1000 Subject: [PATCH] Re-add default bukkit datapack --- nms-patches/Main.patch | 31 +++++++++++-- nms-patches/MinecraftServer.patch | 45 +++++++++---------- .../craftbukkit/util/CraftMagicNumbers.java | 9 +++- 3 files changed, 56 insertions(+), 29 deletions(-) diff --git a/nms-patches/Main.patch b/nms-patches/Main.patch index 69d94353d5..6a520368f3 100644 --- a/nms-patches/Main.patch +++ b/nms-patches/Main.patch @@ -34,7 +34,7 @@ Main.LOGGER.info("Initialized '{}' and '{}'", java_nio_file_path.toAbsolutePath(), java_nio_file_path1.toAbsolutePath()); return; } -@@ -74,18 +77,19 @@ +@@ -74,24 +77,42 @@ return; } @@ -58,7 +58,30 @@ if (flag) { Main.LOGGER.warn("Safe mode active, only vanilla datapack will be loaded"); -@@ -107,6 +111,7 @@ + } + + 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(); @@ -66,7 +89,7 @@ RegistryReadOps registryreadops = RegistryReadOps.a((DynamicOps) DynamicOpsNBT.a, datapackresources.h(), (IRegistryCustom) iregistrycustom_dimension); Object object = convertable_conversionsession.a((DynamicOps) registryreadops, datapackconfiguration1); -@@ -134,21 +139,32 @@ +@@ -134,21 +156,32 @@ } convertable_conversionsession.a((IRegistryCustom) iregistrycustom_dimension, (SaveData) object); @@ -101,7 +124,7 @@ Thread thread = new Thread("Server Shutdown Thread") { public void run() { dedicatedserver.safeShutdown(true); -@@ -157,14 +173,15 @@ +@@ -157,14 +190,15 @@ thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(Main.LOGGER)); Runtime.getRuntime().addShutdownHook(thread); diff --git a/nms-patches/MinecraftServer.patch b/nms-patches/MinecraftServer.patch index 029a5d5564..551c2ca4db 100644 --- a/nms-patches/MinecraftServer.patch +++ b/nms-patches/MinecraftServer.patch @@ -34,7 +34,7 @@ public final Map, WorldServer> worldServer; private PlayerList playerList; private volatile boolean isRunning; -@@ -124,6 +135,21 @@ +@@ -124,6 +135,20 @@ private final DefinedStructureManager ak; protected SaveData saveData; @@ -48,7 +48,6 @@ + public static int currentTick = (int) (System.currentTimeMillis() / 50); + public java.util.Queue processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); + public int autosavePeriod; -+ public File bukkitDataPackFolder; + public CommandDispatcher vanillaCommandDispatcher; + private boolean forceTicks; + // CraftBukkit end @@ -56,7 +55,7 @@ public static S a(Function function) { AtomicReference atomicreference = new AtomicReference(); Thread thread = new Thread(() -> { -@@ -133,21 +159,21 @@ +@@ -133,21 +158,21 @@ thread.setUncaughtExceptionHandler((thread1, throwable) -> { MinecraftServer.LOGGER.error(throwable); }); @@ -81,7 +80,7 @@ this.isRunning = true; this.h = new long[100]; this.K = ""; -@@ -173,7 +199,34 @@ +@@ -173,7 +198,34 @@ this.ak = new DefinedStructureManager(datapackresources.h(), convertable_conversionsession, datafixer); this.serverThread = thread; this.executorService = SystemUtils.f(); @@ -116,7 +115,7 @@ private void initializeScoreboards(WorldPersistentData worldpersistentdata) { PersistentScoreboard persistentscoreboard = (PersistentScoreboard) worldpersistentdata.a(PersistentScoreboard::new, "scoreboard"); -@@ -186,7 +239,7 @@ +@@ -186,7 +238,7 @@ public static void convertWorld(Convertable.ConversionSession convertable_conversionsession) { if (convertable_conversionsession.isConvertable()) { @@ -125,7 +124,7 @@ convertable_conversionsession.convert(new IProgressUpdate() { private long a = SystemUtils.getMonotonicMillis(); -@@ -209,48 +262,187 @@ +@@ -209,48 +261,187 @@ } @@ -347,7 +346,7 @@ WorldBorder worldborder = worldserver.getWorldBorder(); worldborder.a(iworlddataserver.q()); -@@ -275,34 +467,8 @@ +@@ -275,34 +466,8 @@ iworlddataserver.c(true); } @@ -383,7 +382,7 @@ private static void a(WorldServer worldserver, IWorldDataServer iworlddataserver, boolean flag, boolean flag1, boolean flag2) { ChunkGenerator chunkgenerator = worldserver.getChunkProvider().getChunkGenerator(); -@@ -317,6 +483,21 @@ +@@ -317,6 +482,21 @@ Random random = new Random(worldserver.getSeed()); BlockPosition blockposition = worldchunkmanager.a(0, worldserver.getSeaLevel(), 0, 256, list, random); ChunkCoordIntPair chunkcoordintpair = blockposition == null ? new ChunkCoordIntPair(0, 0) : new ChunkCoordIntPair(blockposition); @@ -405,7 +404,7 @@ if (blockposition == null) { MinecraftServer.LOGGER.warn("Unable to find spawn biome"); -@@ -363,7 +544,7 @@ +@@ -363,7 +543,7 @@ } if (flag) { @@ -414,7 +413,7 @@ worldgenfeatureconfigured.a(worldserver, worldserver.getStructureManager(), chunkgenerator, worldserver.random, new BlockPosition(iworlddataserver.a(), iworlddataserver.b(), iworlddataserver.c())); } -@@ -383,8 +564,15 @@ +@@ -383,8 +563,15 @@ iworlddataserver.setGameType(EnumGamemode.SPECTATOR); } @@ -432,7 +431,7 @@ MinecraftServer.LOGGER.info("Preparing start region for dimension {}", worldserver.getDimensionKey().a()); BlockPosition blockposition = worldserver.getSpawn(); -@@ -397,17 +585,21 @@ +@@ -397,17 +584,21 @@ chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(blockposition), 11, Unit.INSTANCE); while (chunkproviderserver.b() != 441) { @@ -463,7 +462,7 @@ if (forcedchunk != null) { LongIterator longiterator = forcedchunk.a().iterator(); -@@ -421,11 +613,17 @@ +@@ -421,11 +612,17 @@ } } @@ -483,7 +482,7 @@ } protected void loadResourcesZip() { -@@ -470,12 +668,16 @@ +@@ -470,12 +667,16 @@ worldserver.save((IProgressUpdate) null, flag1, worldserver.savingDisabled && !flag2); } @@ -500,7 +499,7 @@ return flag3; } -@@ -484,8 +686,29 @@ +@@ -484,8 +685,29 @@ this.stop(); } @@ -530,7 +529,7 @@ if (this.getServerConnection() != null) { this.getServerConnection().b(); } -@@ -494,6 +717,7 @@ +@@ -494,6 +716,7 @@ MinecraftServer.LOGGER.info("Saving players"); this.playerList.savePlayers(); this.playerList.shutdown(); @@ -538,7 +537,7 @@ } MinecraftServer.LOGGER.info("Saving worlds"); -@@ -571,14 +795,16 @@ +@@ -571,14 +794,16 @@ while (this.isRunning) { long i = SystemUtils.getMonotonicMillis() - this.nextTick; @@ -556,7 +555,7 @@ this.nextTick += 50L; GameProfilerTick gameprofilertick = GameProfilerTick.a("Server"); -@@ -624,6 +850,12 @@ +@@ -624,6 +849,12 @@ } catch (Throwable throwable1) { MinecraftServer.LOGGER.error("Exception stopping the server", throwable1); } finally { @@ -569,7 +568,7 @@ this.exit(); } -@@ -632,8 +864,15 @@ +@@ -632,8 +863,15 @@ } private boolean canSleepForTick() { @@ -586,7 +585,7 @@ protected void sleepForTick() { this.executeAll(); -@@ -739,7 +978,7 @@ +@@ -739,7 +977,7 @@ this.serverPing.b().a(agameprofile); } @@ -595,7 +594,7 @@ MinecraftServer.LOGGER.debug("Autosave started"); this.methodProfiler.enter("save"); this.playerList.savePlayers(); -@@ -769,22 +1008,39 @@ +@@ -769,22 +1007,39 @@ } protected void b(BooleanSupplier booleansupplier) { @@ -635,7 +634,7 @@ this.methodProfiler.enter("tick"); -@@ -868,7 +1124,7 @@ +@@ -868,7 +1123,7 @@ } public String getServerModName() { @@ -644,7 +643,7 @@ } public CrashReport b(CrashReport crashreport) { -@@ -1217,11 +1473,11 @@ +@@ -1217,11 +1472,11 @@ public CompletableFuture a(Collection collection) { CompletableFuture completablefuture = CompletableFuture.supplyAsync(() -> { @@ -658,7 +657,7 @@ }, this).thenCompose((immutablelist) -> { return DataPackResources.a(immutablelist, this.j() ? CommandDispatcher.ServerType.DEDICATED : CommandDispatcher.ServerType.INTEGRATED, this.h(), this.executorService, this); }).thenAcceptAsync((datapackresources) -> { -@@ -1592,6 +1848,22 @@ +@@ -1592,6 +1847,22 @@ } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 9c5becd4df..fbd533badf 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -30,6 +30,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.MojangsonParser; import net.minecraft.server.NBTBase; import net.minecraft.server.NBTTagCompound; +import net.minecraft.server.SavedFile; import net.minecraft.server.SharedConstants; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -220,6 +221,10 @@ public final class CraftMagicNumbers implements UnsafeValues { return stack; } + private static File getBukkitDataPackFolder() { + return new File(MinecraftServer.getServer().a(SavedFile.DATAPACKS).toFile(), "bukkit"); + } + @Override public Advancement loadAdvancement(NamespacedKey key, String advancement) { if (Bukkit.getAdvancement(key) != null) { @@ -232,7 +237,7 @@ public final class CraftMagicNumbers implements UnsafeValues { Advancement bukkit = Bukkit.getAdvancement(key); if (bukkit != null) { - File file = new File(MinecraftServer.getServer().bukkitDataPackFolder, "data" + File.separator + key.getNamespace() + File.separator + "advancements" + File.separator + key.getKey() + ".json"); + File file = new File(getBukkitDataPackFolder(), "data" + File.separator + key.getNamespace() + File.separator + "advancements" + File.separator + key.getKey() + ".json"); file.getParentFile().mkdirs(); try { @@ -252,7 +257,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public boolean removeAdvancement(NamespacedKey key) { - File file = new File(MinecraftServer.getServer().bukkitDataPackFolder, "data" + File.separator + key.getNamespace() + File.separator + "advancements" + File.separator + key.getKey() + ".json"); + File file = new File(getBukkitDataPackFolder(), "data" + File.separator + key.getNamespace() + File.separator + "advancements" + File.separator + key.getKey() + ".json"); return file.delete(); }