From d39ed3c03f00b8203ac8f103e7a31690614377e8 Mon Sep 17 00:00:00 2001 From: DanLT Date: Tue, 6 Jul 2021 06:43:24 -0800 Subject: [PATCH] Support "async" spawning --- .../java/com/volmit/iris/object/IrisEntity.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/com/volmit/iris/object/IrisEntity.java b/src/main/java/com/volmit/iris/object/IrisEntity.java index f5bd9bb24..474038b39 100644 --- a/src/main/java/com/volmit/iris/object/IrisEntity.java +++ b/src/main/java/com/volmit/iris/object/IrisEntity.java @@ -22,6 +22,7 @@ import org.bukkit.loot.Lootable; import java.util.Collection; import java.util.Random; +import java.util.concurrent.atomic.AtomicReference; @Accessors(chain = true) @NoArgsConstructor @@ -286,6 +287,22 @@ public class IrisEntity extends IrisRegistrant private Entity doSpawn(Location at) { + if(!Bukkit.isPrimaryThread()) + { + // Someone called spawn (worldedit maybe?) on a non server thread + // Due to the structure of iris, we will call it sync and busy wait until it's done. + AtomicReference ae = new AtomicReference<>(); + J.s(() -> ae.set(doSpawn(at))); + PrecisionStopwatch p = PrecisionStopwatch.start(); + + while(ae == null) + { + J.sleep(3); + } + + return ae.get(); + } + if(isMythical()) { return Iris.linkMythicMobs.spawn(getMythicalType(), at);