From aaf33aa8a773fa05ee3462de9211c882eda3850f Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Thu, 1 Aug 2024 18:11:05 +0100 Subject: [PATCH] fix: "synchronise" wrapping bukkit Player on the main thread --- .../worldedit/bukkit/WorldEditPlugin.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index faac1c955..3d6634b1f 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -21,6 +21,7 @@ package com.sk89q.worldedit.bukkit; import com.fastasyncworldedit.bukkit.BukkitPermissionAttachmentManager; import com.fastasyncworldedit.bukkit.FaweBukkit; +import com.fastasyncworldedit.core.util.TaskManager; import com.fastasyncworldedit.core.util.UpdateNotification; import com.fastasyncworldedit.core.Fawe; import com.fastasyncworldedit.core.util.WEManager; @@ -91,6 +92,7 @@ import java.nio.file.Paths; import java.util.List; import java.util.Locale; import java.util.Optional; +import java.util.function.Supplier; import static com.google.common.base.Preconditions.checkNotNull; import static com.sk89q.worldedit.internal.anvil.ChunkDeleter.DELCHUNKS_FILE_NAME; @@ -565,14 +567,15 @@ public class WorldEditPlugin extends JavaPlugin { //FAWE start - Use cache over returning a direct BukkitPlayer BukkitPlayer wePlayer = getCachedPlayer(player); if (wePlayer == null) { - synchronized (player) { - wePlayer = getCachedPlayer(player); - if (wePlayer == null) { - wePlayer = new BukkitPlayer(this, player); - player.setMetadata("WE", new FixedMetadataValue(this, wePlayer)); - return wePlayer; + Supplier task = () -> { + BukkitPlayer bukkitPlayer = getCachedPlayer(player); + if (bukkitPlayer == null) { + bukkitPlayer = new BukkitPlayer(this, player); + player.setMetadata("WE", new FixedMetadataValue(this, bukkitPlayer)); } - } + return bukkitPlayer; + }; + TaskManager.taskManager().sync(task); } return wePlayer; //FAWE end @@ -588,11 +591,12 @@ public class WorldEditPlugin extends JavaPlugin { } BukkitPlayer reCachePlayer(Player player) { - synchronized (player) { + Supplier task = () -> { BukkitPlayer wePlayer = new BukkitPlayer(this, player); player.setMetadata("WE", new FixedMetadataValue(this, wePlayer)); return wePlayer; - } + }; + return TaskManager.taskManager().sync(task); } //FAWE end