From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cryptite 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 cache = Maps.newHashMap(); + public final Map 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 } }