'Cherry-pick' some MultiPaper patches
This commit is contained in:
41
patches/server/0112-Run-tasks-while-reading-chunk-data.patch
Normal file
41
patches/server/0112-Run-tasks-while-reading-chunk-data.patch
Normal 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");
|
||||
Reference in New Issue
Block a user