From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=84=97=E3=84=A0=CB=8B=20=E3=84=91=E3=84=A7=CB=8A?= Date: Thu, 5 Jan 2023 09:08:17 +0800 Subject: [PATCH] Akarin: Save Json list asynchronously Original license: GPL v3 Original project: https://github.com/Akarin-project/Akarin diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java index c524ca1eab9db011f8203835c43e244ff4101e87..b5a31105ca972f5b6a6b74786904631aa0998ce9 100644 --- a/src/main/java/net/minecraft/server/players/StoredUserList.java +++ b/src/main/java/net/minecraft/server/players/StoredUserList.java @@ -22,6 +22,7 @@ import java.util.stream.Stream; import javax.annotation.Nullable; import me.titaniumtown.ArrayConstants; +import io.papermc.paper.util.MCUtil; import net.minecraft.Util; import net.minecraft.util.GsonHelper; import org.slf4j.Logger; @@ -104,6 +105,7 @@ public abstract class StoredUserList> { } public void save() throws IOException { + Runnable saveTask = () -> {// Leaf - Akarin - Save json list async this.removeExpired(); // Paper - remove expired values before saving JsonArray jsonarray = new JsonArray(); Stream stream = this.map.values().stream().map((jsonlistentry) -> { // CraftBukkit - decompile error @@ -115,6 +117,8 @@ public abstract class StoredUserList> { Objects.requireNonNull(jsonarray); stream.forEach(jsonarray::add); + + try {// Leaf - Akarin - Save json list async BufferedWriter bufferedwriter = Files.newWriter(this.file, StandardCharsets.UTF_8); try { @@ -135,6 +139,13 @@ public abstract class StoredUserList> { bufferedwriter.close(); } + // Leaf start - Akarin - Save json list async + } catch (Exception e) { + StoredUserList.LOGGER.warn("Failed to async save " + this.file, e); + } + }; + MCUtil.scheduleAsyncTask(saveTask); + // Leaf end - Akarin } public void load() throws IOException {