From d4d53ffd4aa6ef45cf86b34cc205b6d6e671e8c3 Mon Sep 17 00:00:00 2001 From: Chris <90093334+Chwitst187@users.noreply.github.com> Date: Tue, 21 Apr 2026 21:41:22 +0200 Subject: [PATCH] Ensure dynamic command execution is Folia-safe --- .../java/com/sk89q/bukkit/util/DynamicPluginCommand.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/DynamicPluginCommand.java b/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/DynamicPluginCommand.java index 046222d6df..db3c3a262d 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/DynamicPluginCommand.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/bukkit/util/DynamicPluginCommand.java @@ -20,6 +20,8 @@ package com.sk89q.bukkit.util; import com.sk89q.minecraft.util.commands.CommandsManager; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.util.FoliaEntityTask; import com.sk89q.util.StringUtil; import com.sk89q.wepif.PermissionsResolverManager; import org.bukkit.OfflinePlayer; @@ -27,6 +29,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import java.util.Arrays; @@ -59,6 +62,9 @@ public DynamicPluginCommand( @Override public boolean execute(CommandSender sender, String label, String[] args) { + if (WorldEditPlugin.getInstance().isOnFolia() && sender instanceof Player player) { + return FoliaEntityTask.execute(player, () -> owner.onCommand(sender, this, label, args)).join(); + } return owner.onCommand(sender, this, label, args); } @@ -89,6 +95,9 @@ public Plugin getPlugin() { @Override public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { if (registeredWith instanceof CommandInspector) { + if (WorldEditPlugin.getInstance().isOnFolia() && sender instanceof Player player) { + return FoliaEntityTask.execute(player, () -> ((TabCompleter) owner).onTabComplete(sender, this, alias, args)).join(); + } return ((TabCompleter) owner).onTabComplete(sender, this, alias, args); } else { return super.tabComplete(sender, alias, args);