diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/util/FoliaTaskManager.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/util/FoliaTaskManager.java index 646fdcb17a..468cc8faf5 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/util/FoliaTaskManager.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/util/FoliaTaskManager.java @@ -128,7 +128,7 @@ public T syncWith(final Supplier supplier, final Player context) { @Override public T syncGlobal(final Supplier supplier) { - if (Bukkit.isPrimaryThread()) { + if (FoliaSupport.isTickThread()) { return supplier.get(); } final FutureTask task = new FutureTask<>(supplier::get); diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/ChangeExchangeCoordinator.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/ChangeExchangeCoordinator.java index 3c020d4221..30506e141b 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/ChangeExchangeCoordinator.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/ChangeExchangeCoordinator.java @@ -1,5 +1,6 @@ package com.fastasyncworldedit.core.history.changeset; +import com.fastasyncworldedit.core.util.FoliaSupport; import com.sk89q.worldedit.history.change.Change; import org.jetbrains.annotations.ApiStatus; @@ -30,12 +31,18 @@ public Change[] take(Change[] consumed) { if (!this.started) { this.started = true; final int length = consumed.length; - this.runner = UNDO_VIRTUAL_THREAD_BUILDER - .start(() -> this.runnerTask.accept(this.exchanger, new Change[length])); + if (FoliaSupport.isFolia()) { + this.runner = new Thread(() -> this.runnerTask.accept(this.exchanger, new Change[length]), "FAWE undo"); + this.runner.setDaemon(true); + this.runner.start(); + } else { + this.runner = UNDO_VIRTUAL_THREAD_BUILDER + .start(() -> this.runnerTask.accept(this.exchanger, new Change[length])); + } } try { - // Allow a reasonable timeout in case of weirdness - return exchanger.exchange(consumed, 30, TimeUnit.SECONDS); + long timeoutSeconds = FoliaSupport.isFolia() ? 60 : 30; + return exchanger.exchange(consumed, timeoutSeconds, TimeUnit.SECONDS); } catch (InterruptedException | TimeoutException e) { this.runner.interrupt(); Thread.currentThread().interrupt(); diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/SingleThreadQueueExtent.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/SingleThreadQueueExtent.java index 3e7c8089c1..ca53aecba0 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/SingleThreadQueueExtent.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/SingleThreadQueueExtent.java @@ -37,6 +37,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.locks.ReentrantLock; +import com.fastasyncworldedit.core.util.FoliaSupport; /** * Single threaded implementation for IQueueExtent (still abstract) - Does not implement creation of @@ -254,7 +255,7 @@ private > V submitUnchecked(IQueueChunk chunk) { } } - if (Fawe.isTickThread()) { + if (Fawe.isTickThread() && !FoliaSupport.isFolia()) { V result = (V) chunk.call(); if (result == null) { return (V) (Future) Futures.immediateFuture(null);