Forgotten changelist

This commit is contained in:
Cryptite
2023-12-30 08:04:45 -06:00
parent 25e4980031
commit 409797e02a
10 changed files with 37 additions and 255 deletions

View File

@@ -0,0 +1,72 @@
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/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index a530dd1b15093803ffb87848f4c28dcf5da6476c..cd6c890c1f1084759d4e75f9c2d869541b974435 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2137,8 +2137,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (existing == null && !storage.cache.containsKey(id)) {
final net.minecraft.world.level.saveddata.SavedData.Factory<MapItemSavedData> factory = MapItemSavedData.factory();
final MapItemSavedData map = storage.readSavedData(factory.deserializer(), factory.type(), id);
- storage.cache.put(id, map);
if (map != null) {
+ storage.cache.put(id, map);
map.id = id;
new MapInitializeEvent(map.mapView).callEvent();
return map;
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 d051e8c1db6b5c42b8df0be54d9d48ba0e7b0077..f90f7fc66396091bdeb98bc3271b68bca693ee15 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;
@@ -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(type.deserializer(), type.type(), 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
}
}