diff --git a/patches/server/0001-Build-Changes.patch b/patches/server/0001-Build-Changes.patch index e4b85d825..cb1cc6e2b 100644 --- a/patches/server/0001-Build-Changes.patch +++ b/patches/server/0001-Build-Changes.patch @@ -42,10 +42,10 @@ index 6d3d573ffc118e7f4d76422dc014a7df0384bb49..6e5a7cd4028d38126632390e129c005d standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 912affb0ab1c4c40f7a655194e95ec6f0ebf1fcd..d15b822d7b12691608a3890d87b09c7562f91958 100644 +index 3238cbcba567b1242c77e41f6b6f19a8d157fb4e..681123682c1a0060d05860835e5b9f46147f7c1f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1691,7 +1691,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +Date: Mon, 26 Jun 2023 16:45:00 -0500 +Subject: [PATCH] Save DimensionDataStorage async + + +diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java +index 637a86e74d633901fdd2f2f1ba6aa4ed49780ead..8cf3880d9168b5ba6b383ec921bfb490ea51ac38 100644 +--- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java ++++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java +@@ -9,6 +9,8 @@ import java.io.FileInputStream; + import java.io.IOException; + import java.io.PushbackInputStream; + import java.util.Map; ++import java.util.concurrent.CompletableFuture; ++import java.util.concurrent.ConcurrentHashMap; + import java.util.function.Function; + import java.util.function.Supplier; + import javax.annotation.Nullable; +@@ -18,11 +20,12 @@ import net.minecraft.nbt.NbtIo; + import net.minecraft.nbt.NbtUtils; + import net.minecraft.util.datafix.DataFixTypes; + import net.minecraft.world.level.saveddata.SavedData; ++import org.bukkit.Bukkit; + import org.slf4j.Logger; + + public class DimensionDataStorage { + private static final Logger LOGGER = LogUtils.getLogger(); +- public final Map cache = Maps.newHashMap(); ++ public final Map cache = new ConcurrentHashMap<>(); + private final DataFixer fixerUpper; + private final File dataFolder; + +@@ -51,7 +54,7 @@ public class DimensionDataStorage { + SavedData savedData = this.cache.get(id); + if (savedData == null && !this.cache.containsKey(id)) { + savedData = this.readSavedData(readFunction, id); +- this.cache.put(id, savedData); ++ if (savedData != null) this.cache.put(id, savedData); + } + + return (T)savedData; +@@ -119,11 +122,12 @@ public class DimensionDataStorage { + } + + public void save() { +- this.cache.forEach((id, state) -> { ++ // Slice start - run async ++ CompletableFuture.runAsync(() -> this.cache.forEach((id, state) -> { + if (state != null) { + state.save(this.getDataFile(id)); + } +- +- }); ++ })); ++ // Slice end + } + }