Files
OldSliceMC/patches/server/0033-Save-DimensionDataStorage-async.patch
2023-10-04 16:58:11 -05:00

59 lines
2.3 KiB
Diff

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 f921f55e815a4da01828e025881a7a03591c3978..f44dbf56062148ff442141bc0058accc275617b2 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 javax.annotation.Nullable;
import net.minecraft.SharedConstants;
@@ -17,11 +19,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;
@@ -50,7 +53,7 @@ public class DimensionDataStorage {
SavedData savedData = this.cache.get(id);
if (savedData == null && !this.cache.containsKey(id)) {
savedData = this.readSavedData(type.deserializer(), type.type(), id);
- this.cache.put(id, savedData);
+ if (savedData != null) this.cache.put(id, savedData);
}
return (T)savedData;
@@ -118,11 +121,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
}
}