Save DimensionDataStorage async
This commit is contained in:
@@ -42,10 +42,10 @@ index 6d3d573ffc118e7f4d76422dc014a7df0384bb49..6e5a7cd4028d38126632390e129c005d
|
|||||||
standardInput = System.`in`
|
standardInput = System.`in`
|
||||||
workingDir = rootProject.layout.projectDirectory
|
workingDir = rootProject.layout.projectDirectory
|
||||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
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
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/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<TickTa
|
@@ -1693,7 +1693,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
|
|
||||||
@DontObfuscate
|
@DontObfuscate
|
||||||
public String getServerModName() {
|
public String getServerModName() {
|
||||||
|
|||||||
58
patches/server/0034-Save-DimensionDataStorage-async.patch
Normal file
58
patches/server/0034-Save-DimensionDataStorage-async.patch
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cryptite <cryptite@gmail.com>
|
||||||
|
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<String, SavedData> cache = Maps.newHashMap();
|
||||||
|
+ public final Map<String, SavedData> 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user