'Cherry-pick' some MultiPaper patches

This commit is contained in:
etil2jz
2022-08-30 23:53:48 +02:00
parent 59a4afbe06
commit 0bedac6d37
6 changed files with 305 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: PureGero <puregero@gmail.com>
Date: Sun, 13 Feb 2022 14:02:25 +1000
Subject: [PATCH] Run tasks while reading chunk data
Original license: GPLv3
Original project: https://github.com/MultiPaper/MultiPaper
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index d7e941fe4224cdc18aaf56090fcc87e395464826..941bbf409043ec0deb64ee761c70bd0084ad7b78 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1,6 +1,7 @@
package net.minecraft.server.level;
import co.aikar.timings.Timing; // Paper
+import com.destroystokyo.paper.io.PaperFileIOThread;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Iterables;
@@ -1717,9 +1718,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@Override
public CompoundTag readSync(ChunkPos chunkcoordintpair) throws IOException {
if (Thread.currentThread() != com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE) {
- CompoundTag ret = com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE
- .loadChunkDataAsyncFuture(this.level, chunkcoordintpair.x, chunkcoordintpair.z, com.destroystokyo.paper.io.IOUtil.getPriorityForCurrentThread(),
- false, true, true).join().chunkData;
+ // MultiPaper start - don't block the main thread, run tasks in the meantime
+ CompletableFuture<PaperFileIOThread.ChunkData> completablefuture = com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE
+ .loadChunkDataAsyncFuture(this.level, chunkcoordintpair.x, chunkcoordintpair.z, com.destroystokyo.paper.io.IOUtil.getPriorityForCurrentThread(),
+ false, true, true);
+
+ if (!completablefuture.isDone()) {
+ level.chunkSource.mainThreadProcessor.managedBlock(completablefuture::isDone);
+ }
+
+ CompoundTag ret = completablefuture.join().chunkData;
+ // MultiPaper end
if (ret == com.destroystokyo.paper.io.PaperFileIOThread.FAILURE_VALUE) {
throw new IOException("See logs for further detail");